【问题标题】:Change the class loader of the JSP servlet (Jasper)更改 JSP servlet (Jasper) 的类加载器
【发布时间】:2011-03-31 13:57:09
【问题描述】:

我想要实现的是代理请求 URI 并根据请求用户会话中的某些条件呈现不同的 JSP 文件。

userA -> 请求:/{container}/index.jsp -> 返回:{viewA}/index.jsp

userB -> 请求:/{container}/index.jsp -> 返回:{viewB}/index.jsp

Servlet 过滤器没有足够的控制权来做这种事情。 我想会起作用的是覆盖 JSPServlet 的 URLClassLoader,以便我可以搜索要编译的文件 [in a custom classloader]。这可能吗,还是有其他方法?

我在这里读到了一些与我想要实现的目标相关的内容:http://www.softwaresummit.com/2003/speakers/BergmanTomcat.pdf pp 10,但是,它似乎并没有真正起作用(扩展 HttpJspBase 并没有给你任何东西)。

我试图用这张[相当糟糕的]图片来说明流程:

http://80.68.91.73/pageflow.png

我更多的是寻找一个正确的方向,而不是一个完整的解决方案。问题是,我找不到合适的关键字来找到我要找的东西!

谢谢!

约翰

【问题讨论】:

    标签: java jakarta-ee tomcat servlets


    【解决方案1】:

    这并不是你所要求的,但你是否考虑过只有一个 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 下的不同子目录中。这样,您可以转发给他们,但无法直接从网络上联系到他们。

    【讨论】:

    • 复制的不仅仅是 index.jsp(可能是 100 页)。每个不同的附属公司都有完全不同的设计(但有一个共同的代码库)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    相关资源
    最近更新 更多