【问题标题】:Spring MVC url pattern - keeps appending the controllerSpring MVC url 模式 - 不断附加控制器
【发布时间】:2013-07-22 10:20:00
【问题描述】:

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

而且还在不断增加。

可能是什么问题!

【问题讨论】:

  • 这与spring mvc无关,只需检查您的href以指向正确的路径。
  • 第一次很好.. 但是当我一次又一次地点击链接时!!网址正在附加
  • 你会给出一个相对路径。去掉相对路径,给“localhost:8008/App/Test
  • 你是什么意思?你给出完整的路径吗?无处不在,如果明天我在某个 IP 和其他端口上运行它呢??

标签: java spring-mvc controller url-pattern


【解决方案1】:

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

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

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

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

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

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

在你可以使用宏之前。

【讨论】:

    【解决方案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 标记,可以做同样的事情,等等。

    【讨论】:

    • 如果我使用此模式 /Test,则 url 将更改为 localhost:8080/Test。是从APP里出来的
    • 不,它没有。我没有告诉你使用/Test,而是使用&lt;c:url value='/Test' /&gt;。仔细阅读。
    猜你喜欢
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多