<c:url> 中不包含 Servlet 路径

Servlet path is not included in <c:url>

我有一个简单的 Java Web 应用程序(例如 test),其中包含两个不同的 SpringMVC 应用程序。

我的 web.xml 将它们映射为:

    <servlet-mapping>
        <servlet-name>web</servlet-name>
        <url-pattern>/web/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>restful</servlet-name>
        <url-pattern>/restful/*</url-pattern>
    </servlet-mapping>

web 部分我使用了 "classic" 库,例如 JSTL 核心。

我不明白如何避免 JSTL c:url 标记忽略 URL 模式。

如果我写

<c:url value="/browse/"/>

link 呈现为 /test/browse 而不是 /test/web/browse

我错过了什么?

谢谢

<c:url> 确实没有考虑 servlet 路径。那是你自己的责任。 <c:url> 仅考虑 HttpServletRequest#getContextPath()

自己硬编码:

<c:url value="/web/browse" />

HttpServletRequest#getServletPath() 的内联结果:

<c:url value="${pageContext.request.servletPath}/browse" />

或者,如果您要转发,RequestDispatcher#FORWARD_SERVLET_PATH 的内联结果:

<c:url value="${requestScope['javax.servlet.forward.servlet_path']}/browse" />

如有必要,将其包装在自定义标记中以保存样板文件。