Создать фильтр, который включает в себя атрибут base как, например, для /src/java/company/project/web/filter/BaseFilter.java
:
<code>import java.io.IOException;
import javax.servlet.*;
/**
* Make sane JSP, instead of:
* <pre><a href="<c:url value='/my/path/${id}.html'/>">Title</a>
*, позволяющий использовать: *
<a href="${ctx}/my/path/${id}.html">Title</a>
* / открытый класс BaseFilter реализует Filter {private String min;@Override public void init (FilterConfig fc) {min = fc.getServletContext (). GetInitParameter ("min");if (min == null) min = fc.getInitParameter ("min");if (min == null) min = "min";} @Override public void doFilter (запрос ServletRequest, ответ ServletResponse, цепочка FilterChain) выдает IOException, ServletException {request.setAttribute ("base", request.getServletContext (). GetContextPath ());request.setAttribute ("min", min);chain.doFilter (запрос, ответ);} @Override public void destroy () {}}
и зарегистрируйте этот фильтр в web.xml
:
<filter>
<filter-name>BaseFilter</filter-name>
<filter-class>company.project.web.filter.BaseFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>BaseFilter</filter-name>
<url-pattern>*.htm</url-pattern>
<url-pattern>*.json</url-pattern>
</filter-mapping>
и используйте чистый синтаксис:
<script src="${base}/js/jquery.${min}.js"></script>
<link href="${base}/css/bootstrap.${min}.css" rel="stylesheet" type="text/css">
<a href="${base}/index.html">Home</a>
ПРИМЕЧАНИЕ Я устанавливаю дополнительные атрибуты в этом фильтре, например, для переключения между разработкой и минимизированной версией CSS / JS. Я использую атрибут min
, который может быть установлен внешне для файла WAR в дескрипторе развертывания контекста (см.к документации по Java EE-контейнеру).
См. также мой ответ: https://stackoverflow.com/a/13993570/173149