使用 Spring MVC 3 时设置页面中的基本 URL

发布于 2024-12-10 22:07:41 字数 1819 浏览 0 评论 0 原文

我现在正在学习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 路径的更好方法是什么?

I am learning the Spring MVC 3 now.

I meet some problems when set the URLs in my page, since the URL in the page are relatived to the current page, so I want to set the base URL in each page.

When I use Structs 2, I create a BaseAction like this:

public class BaseAction{
  public BaseAction(){
     string baseURL=getServletContext.getHost()+"...."+.....;
  }
  public getBaseURL(){xxxxx}
}

Then in the page:

<base href='<s:prototype value="baseURL"/>' /> 

Now, in Spring MVC 3, since the a new instance of related controller is not created for each request, so I do not know how to make it?

Finally, I think I can use the interceptor, so I create a interceptor:

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()+"......");
    }

}

In the page:

I can use :

<base href="${baseURL}" />

It works, however when a view is redirected, it will add this value to the URL.

For example:

@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"
    }
}

When I make the submit button in the user edit page, I will redirect to :

http://localhost:8080/app/user/list?baseURL=http://localhost:8080

Where the parameter in the url ?baseURL=http://localhost:8080 is not what I want.

How to fix it?

Or what is the better way to solve the URL path using Spring MVC 3?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

人生戏 2024-12-17 22:07:41

也许我没有正确理解这个问题,但是如果您想在 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 constructor RedirectView(String url, boolean contextRelative) can be used to specify context relative to the current ServletContext or relative to the web server.

饭团 2024-12-17 22:07:41

如果我正确理解问题,这就是您正在寻找的

If I understand the problem correctly this is what you're looking for <base href="<c:url value="${webappRoot}" />

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文