Java 更改JSP servlet的类加载器(Jasper)
我想要实现的是代理请求URI,并根据请求用户会话中的某些条件呈现不同的JSP文件 即 userA->request://{container}/index.jsp->return:{viewA}/index.jsp userB->request://{container}/index.jsp->return:{viewB}/index.jsp Servlet过滤器没有足够的控制来完成这类事情。 我想象的工作方式是重写JSPServlet的URLClassLoader,这样我就可以搜索要编译的文件[在自定义类加载器中]。这是可能的,还是有别的办法 我在这里读到了一些与我想要实现的内容相关的东西:第10页,然而,它似乎并没有真正起作用(扩展HttpJspBase并没有给你任何东西) 我试图用这张[相当糟糕的]图片来说明流程: 我更多的是寻找一个正确的方向,而不是一个完整的解决方案。问题是,我找不到合适的关键字来找到我要找的 谢谢Java 更改JSP servlet的类加载器(Jasper),java,jakarta-ee,tomcat,servlets,Java,Jakarta Ee,Tomcat,Servlets,我想要实现的是代理请求URI,并根据请求用户会话中的某些条件呈现不同的JSP文件 即 userA->request://{container}/index.jsp->return:{viewA}/index.jsp userB->request://{container}/index.jsp->return:{viewB}/index.jsp Servlet过滤器没有足够的控制来完成这类事情。 我想象的工作方式是重写JSPServlet的URLClassLoader,这样我就可以搜索要编译的文件
John这并不是您所要求的,但是您是否考虑过只使用一个index.jsp并使用forward标记将请求转发到不同的子页面
<% if(session.someCondition) { %>
<jsp:forward page="index-version1.jsp"/>
<% } else { %>
<jsp:forward page="index-version2.jsp"/>
<% } %>
您还可以使用如下方式转发来自servlet过滤器的请求:
FilterConfig filterConfig;
public void init(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
public void doFilter( ..) {
filterConfig.getServletContext().getRequestDispatcher(<insert path to correct version of your page here>).forward(request, response);
}
FilterConfig FilterConfig;
public void init(FilterConfig FilterConfig){
this.filterConfig=filterConfig;
}
公共过滤器(…){
filterConfig.getServletContext().getRequestDispatcher().forward(请求,响应);
}
如果您不想直接访问jsp页面,可以将它们存储在WEB-INF下面的不同子目录中。这样,您可以转发给它们,但不能直接从WEB访问它们。复制的不仅仅是index.jsp(可能是100页)。每一个不同的连接将有一个完全不同的设计(但有一个共同的代码基)。