【问题标题】:How can I do a server-side redirect from legacy Servlet to JSF 2.0?如何进行从旧版 Servlet 到 JSF 2.0 的服务器端重定向?
【发布时间】:2012-05-08 13:05:18
【问题描述】:

我目前正在执行客户端重定向,以从遗留 servlet(应用程序的旧部分)到 JSF 页面(应用程序的新部分)。如果可能的话,我宁愿做一个服务器端重定向,这样我就可以将项目放在 JSF 页面可以获取的请求中。 (有一组数据需要在遗留 servlet 和 JSF 页面之间“传递”,我不希望将它们放在客户端重定向 URL(作为 URL 参数)中,而是在服务器上执行此操作 -边)。

如果有办法在 servlet(不是 Faces servlet)和 JSF 页面之间进行服务器端重定向,你能告诉我怎么做吗?

【问题讨论】:

    标签: servlets jsf-2


    【解决方案1】:

    只需按常规方式致电RequestDispatcher#forward()。所有 servlet 也会拦截转发的请求。您只需要确保正向路径与FacesServlet 映射匹配。假设您已将其映射到 *.xhtml,则应该这样做:

    request.getRequestDispatcher("/page.xhtml").forward(request, response);
    

    如果您想防止最终用户在不先调用 servlet 的情况下直接打开该页面,则可以将页面放在/WEB-INF 文件夹中。

    request.getRequestDispatcher("/WEB-INF/page.xhtml").forward(request, response);
    

    【讨论】:

    • 我应该提到——它们在不同的 WAR 中并且具有不同的上下文根。这会是个问题吗?
    • 如果服务器未配置为共享上下文(默认情况下),那么是的,这将是一个阻止程序。否则,您只需通过ServletContext#getContext() 获取另一个上下文,然后从中获取请求调度程序。例如。 getServletContext().getContext("otherAppName").getRequestDispathcer("/WEB-INF/page.xhtml").forward(request, response); 不清楚您使用的是什么服务器,但如果是 Tomcat,请使用关键字“crosscontext”检查其文档。
    • 非常感谢——顺便说一句,我正在使用 WebLogic 11g。会试一试。谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    相关资源
    最近更新 更多