2011-03-31 69 views
0

我想实现的目标是根据请求用户会话中的某些条件代理请求URI并呈现不同的JSP文件。更改JSP servlet的类加载器(Jasper)

I.e.

用户A - >请求:/{container}/index.jsp - >返回:{viewA} /index.jsp

用户B - >请求:/{container}/index.jsp - >返回:{ viewB} /index.jsp

Servlet过滤器没有足够的控制来做这种事情。 我想象的将会是重写JSPServlet的URLClassLoader,这样我就可以搜索文件[在自定义类加载器中]进行编译。这是可能的,还是有另一种方式?

我读了一些与我想要达到的目标有关的内容:http://www.softwaresummit.com/2003/speakers/BergmanTomcat.pdf第10页,但它并不真正起作用(扩展HttpJspBase不会给你任何东西)。

我试图说明这个[较差]图像流:

http://80.68.91.73/pageflow.png

我更希望在正确的方向,而不是一个完整的解决方案转舵。问题是,我无法找到正确的关键字来找到我正在寻找的东西!

谢谢!

约翰

回答

0

这不正是你问什么,但你认为只有一个index.jsp和使用正向标签将请求转发到不同的子页面?

<% 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下的子目录。这样,你可以转发给他们,但他们不能直接从网络上获得。

+0

这不仅仅是重复的index.jsp(它可能是100页)。每个不同的affilliate将有一个完全不同的设计(但有一个共同的代码库)。 – johncc 2011-03-31 14:11:25