将控制器映射到Spring MVC中的绝对路径

时间:2014-03-14 14:32:56

标签: java spring jsp spring-mvc

我有一个简单的webapp,所有JSP页面都可以看到搜索框。

我的控制器看起来像这样:

@RequestMapping(value = "/search", method = RequestMethod.GET)
public String search(Map<String, Object> map, HttpServletRequest request) {
    /*...*/
    return "searchresult";
}

在我的JSP中,我使用:<form action="search" method="GET">来发出请求。因此,例如,如果我从/myproject/index发出请求,则此功能非常完美,生成的网址为/myproject/search。但现在,如果我做同样的事情,但从另一个层面,例如/myproject/index/level2,生成的网址为/myproject/index/search,但由于找不到具有该映射的控制器,因此无效。

我想要做的是将控制器映射到绝对路径,因此,在第二种情况下,生成的URL将是/myproject/search而不是/myproject/index/search/

在我的web.xml我有这个:

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

1 个答案:

答案 0 :(得分:3)

使用EL

<form action="${pageContext.request.contextPath}/search" method="GET" />

EL表达式将解析为您的应用程序的上下文路径。然后,您可以附加完整路径。

或者,core标记lib提供url标记。

<form action="<c:url value="/search" />" method="GET" />

这或多或少地做同样的事情。

Spring还提供了自己的url标记,您可以查看。