我有一个简单的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>
答案 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
标记,您可以查看。