2

我有一个 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>

我有一个示例页面控制器(TestController)。带有请求映射

@RequestMapping("/Test")
class TestController{
}

我正在使用调用控制器Test

当我第一次点击链接时,它工作正常

http://localhost:8008/App/Test

如果我再次单击链接,它将再次附加测试

http://localhost:8008/App/Test/Test

并且不断添加。

可能是什么问题!

4

2 回答 2

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>

但它更长,更不干净,并且不允许像这样向 URL 添加参数c:url。请注意,Spring 也有一个s:url标签可以做同样的事情,等等。

于 2013-07-23T11:44:04.270 回答
0

@JB Nizet 的答案的补充,因为不清楚您正在使用哪个 viewResolver 并且可能还有其他人在寻找该问题的答案:

如果你使用freemarker作为模板引擎,你可以这样做:

<a href="<@spring.url '/Test' />">link</a>

在您的模板中。这将使 spring 为您创建正确的上下文路径。 url是这里的宏spring名,也是模板的引用名。

注意:您必须事先为此导入 spring.ftl 模板,就像这样

<#import "spring.ftl" as spring/>

在您可以使用宏之前。

于 2013-10-09T14:28:33.487 回答