我想要实现的是代理请求URI并根据请求用户会话中的某些条件呈现不同的JSP文件。
即
userA - >请求:/ {contineriner} /index.jsp - > return:{viewA} /index.jsp
userB - >请求:/ {contineriner} /index.jsp - > return:{viewB} /index.jsp
Servlet过滤器没有足够的控制来执行此类操作。 我想象的工作是覆盖JSPServlet的URLClassLoader,以便我可以搜索[在自定义类加载器中]编译的文件。这是可能的,还是有另一种方式?
我读到的内容与我在这里尝试的内容有关:http://www.softwaresummit.com/2003/speakers/BergmanTomcat.pdf第10页,然而,它似乎并不真正起作用(扩展HttpJspBase并没有给你任何东西)。
我试图用这个[相当差的]图像说明流程:
http://80.68.91.73/pageflow.png
我更倾向于寻找正确方向的转向而不是完整的解决方案。问题是,我找不到合适的关键字来找到我想要的东西!
谢谢!
约翰
答案 0 :(得分:0)
这不是您要求的,但您是否考虑过只有一个index.jsp并使用forward-tag将请求转发到不同的子页面?
<% 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);
}
如果您不希望直接访问jsp页面,可以将它们存储在WEB-INF下面的不同子目录中。这样,您可以转发给他们,但无法直接从网络上联系到他们。