我们如何使用Spring获取应用程序根目录的绝对路径?

时间:2011-01-10 18:01:42

标签: java spring jsp spring-mvc jstl

我的应用可以在http://serverA/m/http://serverA/mobile/运行。我有一个带有搜索表单的共享标题,需要转到http://serverA/ installationName / search。

但是,如果我使用<form action="/search">,它将转到服务器的根目录,而不是tomcat应用程序。

如果我使用<form action="search">,它会转到相对于当前页面的路径。 (即http://serverA/m/someOtherPage/search

我已尝试过<c:url value="search"><c:url value="/search">,但它们似乎都没有效果。

在intelliJ中,<c:url value="/search">给了我“无法解析控制器URL /搜索”,即使我有一个用@RequestMapping定义的控制器(“/ search”)

4 个答案:

答案 0 :(得分:7)

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

使用<c:url>就是这样。忽略IDE告诉你的内容。他们并不擅长这一点。试试吧。

答案 1 :(得分:4)

Bozho是对的。我也使用了HTML BASE标记:

<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/" />

如果您可以将此标记放在几个地方(理想情况下只在一个JSP中),您可以使代码更清晰。

答案 2 :(得分:2)

您可以(除了其他响应者提示)也使用Spring JSP标记(spring:url),它是在JSTL c:url标记之后建模的(参见Bozhos回复)。 tld参考:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/spring.tld.html#spring.tld.url

这个mvc:resources块的底部用于示例:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-static-resources

答案 3 :(得分:0)

如果您的表单标记是jsp标记(可能是&lt; sf:form&gt;),您将无法直接在属性中嵌入c:url标记。

在那种情况下,我会做以下事情:

<c:url var="someName" value="some uri value"/>
<sf:form path="${someName}" ...>