Java web应用程序对象调度

Java web应用程序对象调度,java,servlets,web-applications,Java,Servlets,Web Applications,HttpSession对象是否可用于运行在同一java企业应用服务器中的所有应用程序 对于我的工作,我有一个进行身份验证的登录应用程序,然后它将被转发到另一个应用程序。在第二个应用程序中,添加了过滤器以防止直接访问URL ServletContext-仅获取当前Web应用程序的上下文 处理这种情况的正确方法是什么?没有HttpSession对象不可用于同一服务器中的所有应用程序。 为了验证 创建2个应用程序, 在一个应用程序中使用seision.setAttribute(“hello”、“hel

HttpSession对象是否可用于运行在同一java企业应用服务器中的所有应用程序

对于我的工作,我有一个进行身份验证的登录应用程序,然后它将被转发到另一个应用程序。在第二个应用程序中,添加了过滤器以防止直接访问URL

ServletContext-仅获取当前Web应用程序的上下文


处理这种情况的正确方法是什么?

没有HttpSession对象不可用于同一服务器中的所有应用程序。 为了验证

创建2个应用程序, 在一个应用程序中使用seision.setAttribute(“hello”、“hello”); 现在运行第二个应用程序

if(session.getAttribute("hello")==null)
{
//some codes to check
}
else

{
//some codes to check
}

您将看到如果将执行部分

应用程序之间没有不共享的HttpSession对象。容器中不同应用程序之间共享信息的标准方法是使用ServletContext。ServletContext的唯一限制是,如果web应用程序a分布在多个JVM之间,这将不起作用,因为上下文信息在一个JVM内。

HttpSession对象的范围在应用程序(或servlet上下文)级别

摘自:

HttpSession对象的作用域必须在应用程序(或servlet)上 (上下文)级别。底层机制,例如用于 建立会话,对于不同的上下文可以相同,但是 引用的对象,包括该对象中的属性,决不能 由容器在上下文之间共享

用一个例子来说明这个需求:如果servlet使用 RequestDispatcher调用另一个Web应用程序中的servlet,任何 为被调用的servlet创建并对其可见的会话必须 与调用servlet可见的不同。

处理此场景的方法:

您可以使用以下方法从一个servlet上下文访问另一个servlet上下文可用的资源:

request.setAttribute("userToken", <token>);
RequestDispatcher requestDispatcher = getServletContext().getContext(
                "/otherWebappContext").getRequestDispatcher("/resource");
requestDispatcher.forward(request, response);
<?xml version='1.0' encoding='utf-8'?>
<Context crossContext="true">

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
request.setAttribute(“userToken”);
RequestDispatcher RequestDispatcher=getServletContext().getContext(
“/otherWebappContext”).getRequestDispatcher(“/resource”);
转发(请求、响应);
但是为被调用的servlet创建的任何会话都不同于调用servlet的会话。一旦请求被转发到第二个应用程序,它就可以使用通过请求属性接收的数据创建一个新会话

但出于安全原因,servlet容器通常会阻止这些跨上下文操作。因此,您需要更改默认行为。例如,在Tomcat 6中,需要将Tomcat_HOME/conf/context.xml文件中的
元素的crossContext属性设置为“true”,如下所示:

request.setAttribute("userToken", <token>);
RequestDispatcher requestDispatcher = getServletContext().getContext(
                "/otherWebappContext").getRequestDispatcher("/resource");
requestDispatcher.forward(request, response);
<?xml version='1.0' encoding='utf-8'?>
<Context crossContext="true">

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

WEB-INF/WEB.xml

但ServletContext仅获取当前web应用程序上下文