使用 Spring MVC 3 时设置页面中的基本 URL
我现在正在学习Spring MVC 3。
我在页面中设置URL时遇到一些问题,因为页面中的URL是相对于当前页面的,所以我想在每个页面中设置基本URL。
当我使用Structs 2时,我创建一个像这样的BaseAction:
public class BaseAction{
public BaseAction(){
string baseURL=getServletContext.getHost()+"...."+.....;
}
public getBaseURL(){xxxxx}
}
然后在页面中:
<base href='<s:prototype value="baseURL"/>' />
现在,在Spring MVC 3中,由于没有为每个请求创建相关控制器的新实例,所以我不知道如何制作它?
最后,我认为我可以使用拦截器,所以我创建了一个拦截器:
public class BaseURLInterceptor extends HandlerInterceptorAdapter{
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
return true;
}
//after the handler is executed
public void postHandle(
HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView)
throws Exception {
modelAndView.getModel().setObject("baseURL",requset.getHost()+"......");
}
}
在页面中:
我可以使用 :
<base href="${baseURL}" />
它可以工作,但是当视图重定向时,它会将此值添加到 URL。
例如:
@Controller
@RequsetMapping("/user")
public class UserController{
@RequsetMapping("edit/{userid}")
public String edit(@PathVariable String uid)
//edit logic
return "redirect:list"
}
@RequsetMapping("list")
public String list(){
//get users list
return "user_list"
}
}
当我在用户编辑页面中制作提交按钮时,我将重定向到:
http://localhost:8080/app/user/list?baseURL=http://localhost:8080
其中url ?baseURL=http://localhost:8080
中的参数不是我想要的。
如何修复它?
或者使用 Spring MVC 3 解决 URL 路径的更好方法是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
也许我没有正确理解这个问题,但是如果您想在
jsp
中为某些链接提供基本网址,那么您的方法是错误的。通常你会做这样的事情:
test
对于控制器中的重定向,如果使用
RedirectView
而不是返回字符串“redirect:xxx”:重定向视图构造函数RedirectView(String url, boolean contextRelative)
可用于指定相对于当前 ServletContext 或相对于当前 ServletContext 的上下文网络服务器。May I do not correct understand the problem, but if you want to have the base url in the
jsp
for some links than your approach is the wrong one.normaly you would do something like this:
test
And for redirects in the controller you can specify how the url has to be interpreted if you use
RedirectView
instead of returning the String "redirect:xxx": the redirect view constructorRedirectView(String url, boolean contextRelative)
can be used to specify context relative to the current ServletContext or relative to the web server.如果我正确理解问题,这就是您正在寻找的
If I understand the problem correctly this is what you're looking for
<base href="<c:url value="${webappRoot}" />