我对该领域的研究表明,我可以将ctx参数放在web.xml中自己的 EE 过滤器中:
<filter>
<filter-name>ctxFilter</filter-name>
<filter-class>org.my.web.filter.CtxFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ctxFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
和:
public class CtxFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) { }
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setAttribute("CTX", request.getServletContext().getContextPath());
chain.doFilter(request, response);
}
@Override
public void destroy() { }
}
或在 Spring 拦截器中(基于我的项目框架堆栈)。这也可以通过以下方式完成:
<spring:url value="/" var="ctx" htmlEncoding="true"/>
<a href="${ctx}/path/...">...</a>
或作为:
<c:url value="/" var="ctx"/>
<a href="${ctx}/path/...">...</a>
但是这些示例的第一行必须跨 JSP 文件重复。
最后,您可以使用适当的函数WEB-INF/tlds/ctx.tld实现 TDL 文件:
<function>
<name>ctx</name>
<function-class>org.my.web.Ctx</function-class>
<function-signature>java.lang.String getCtx()</function-signature>
</function>
参考: