我有一个Spring MVC应用程序。
这是web.xml
<xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Spring Web MVC Application</display-name>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
我有一个示例页面Controller(TestController)。与请求映射
@RequestMapping("/Test")
class TestController{
}
使用Test
当我第一次点击链接时,它工作正常
http://localhost:8008/App/Test
如果我再次单击该链接,则会再次附加测试
http://localhost:8008/App/Test/Test
它不断添加。
可能是什么问题!
答案 0 :(得分:2)
而不是
<a href="Test">link</a>
在JSP中,你应该有
<a href="<c:url value='/Test'/>">link</a>
(当然,将JSTL核心taglib定义添加到JSP的头部。)
这将使用绝对URL(/App/Test
)而不是相对的URL(Test
),并将自动添加应用程序的上下文路径(/App
在您的情况下)到URL。此链接可以在应用程序的任何位置使用,并且无论当前页面的URL是什么,它都将始终与您的控制器相关。
另一种方法是使用
<a href="${pageContext.request.contextPath}/Test">link</a>
但它更长,更不干净,并且不允许像c:url
那样向URL添加参数。请注意,Spring还有一个s:url
标记可以执行相同的操作,还有更多。
答案 1 :(得分:0)
@JB Nizet的答案的补充,因为您不清楚使用哪个viewResolver并且可能有其他人在寻找该问题的答案:
如果您使用freemarker作为模板引擎,则可以执行此操作:
<a href="<@spring.url '/Test' />">link</a>
在您的模板中。这将让spring为您创建正确的上下文路径。
url
是此处宏的名称,spring
是模板的引用名称。
注意:您必须事先导入spring.ftl-template,如此
<#import "spring.ftl" as spring/>
之前可以使用宏。