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

时间:2015-06-13 08:52:18

标签: jsp url servlets jstl

我有一个简单的Java Webapp(例如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 部分内部,我正在使用“经典”库,例如JSTL核心。

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

如果我写

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

该链接呈现为/test/browse而不是/test/web/browse

我缺少什么?

谢谢

1 个答案:

答案 0 :(得分:2)

<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" />

如果需要,在自定义标签中换行以保存样板。