我有一个简单的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
。
我缺少什么?
谢谢
答案 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" />
如果需要,在自定义标签中换行以保存样板。