<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" />
如有必要,将其包装在自定义标记中以保存样板文件。
我有一个简单的 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" />
如有必要,将其包装在自定义标记中以保存样板文件。