Или вы можете использовать сложный трюк. Если вы в порядке с ServletContext
, а не PageContext
, это будет намного проще
- В вашем классе функций EL определите статическую
ThreadLocal<PageContext>
переменную
- Из пользовательского фильтра установите этот PageContext
- Свободный доступ с вашей функции EL
Пример кода:
public class MyFunctions {
private static final ThreadLocal<ServletContext> servletContext = new ThreadLocal<>();
public static void setServletContext(ServletContext servletContext) {
MyFunctions.servletContext.set(servletContext);
}
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException{
...
MyFunctions.setServletContext(servletRequest.getServletContext());
filterChain.doFilter(servletRequest, servletResponse);
}
Если вам действительно нужно PageContext
, лучше сделайте это setPageContext
в скрипте JSP, возможно, в файле включения. Это имеет тот недостаток, что КАЖДЫЙ JSP-файл должен выполнять это включение