如何用java将会话值传递给另一个web应用程序/项目

如何用java将会话值传递给另一个web应用程序/项目,java,jsp,servlets,Java,Jsp,Servlets,如何将会话属性值传递给同一web服务器中的另一个应用程序。我之所以应该知道这一点,是因为我们有一个被模块划分的项目。每个模块将重定向到使用会话传递值的另一个模块。该会话将用于识别哪个用户正在访问该模块 假设我有一个独立于其他模块的登录模块 下面是我的示例代码: 示例Url jsp:该页面将在用户输入用户名后调用,然后提交 page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-

如何将会话属性值传递给同一web服务器中的另一个应用程序。我之所以应该知道这一点,是因为我们有一个被模块划分的项目。每个模块将重定向到使用会话传递值的另一个模块。该会话将用于识别哪个用户正在访问该模块

假设我有一个独立于其他模块的登录模块

下面是我的示例代码:

示例Url

jsp:该页面将在用户输入用户名后调用,然后提交

page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"

HttpSession sessionid = request.getSession();
String userId = request.getParameter("userId");

sessionid.setAttribute("userId", userId); 
System.out.println("SESSION IS :" + sessionid.getAttribute("userId"));

response.sendRedirect("http://localhost:8080/OtherModule"); 
示例Url

在我的主servlet中,我将检查会话是否有用户ID

protected void doGet(HttpServletRequest request, HttpServletResponse response){
    HttpSession session = request.getSession();
    if(session.getAttribute("userId") != null){
        System.out.println("SESSION ID @ GET: " + session.getAttribute("userId"));
    } else {
        System.out.println("No Session for userId");
    }
}

//I also tried this with post but still I can't get the session

我希望这些信息能让你知道我的代码出了什么问题。请帮我做这个。谢谢

您必须相应地配置web服务器。例如,Tomcat提供了一个阀门。请看这里:

注意:您发布的localhost URL仅在您的计算机上有效(因此名为“local”)


不过,只需将所有模块添加到一个Web应用程序中或使用无数Java Web应用程序框架中的一个,就更容易了。

如果共享数据与身份验证/登录相关,那么SSO(单点登录)就是一种方法,正如@Ridcully所说的那样-它由应用程序服务器为您管理,你的应用程序也不需要担心它

如果问题更普遍——如何在webapps之间共享数据——那么一个非常干净的方法就是使用JNDI。Tomcat(以及任何其他servlet/J2EE服务器)提供了一个所有Web应用程序都可以使用的查找空间,该机制最常用于以可共享的方式在应用程序外部定义数据库(或其他资源)配置


因此,您可以编写一个类来包含数据,将其放在JNDI中,并让每个应用程序查找它(使用显式JNDI调用或资源注入)。如果您需要更多信息,请告诉我。

单点登录确实解决了共享登录用户问题

但是,它不允许在所有已部署的Web应用程序之间共享同一会话。如果这是您的实际意图,那么您需要将
/conf/server.xml
元素的
emptySessionPath
属性设置为
true

<Connector ... emptySessionPath="true">


另请参见。

我将检查该链接。关于URL,我只使用localhost进行开发,完成后将传输到live server。关于框架,我们决定不使用框架(出于某种原因),这是我们第一个不使用框架的系统。模块本身已经是一个应用程序,这就是为什么它没有放在单个web应用程序中。我记得当传输到另一个URL时,会有新的分配会话。我希望有办法从你提供的链接做到这一点。再次感谢。实际上我需要发送一些数据,不仅仅是身份验证。但是,如果SSO甚至可以发送一个值,这将是一个解决方案。我们有一个会话表,它将保存其他应用程序将从中获取的数据。但是我需要那个表中的唯一ID,我试图通过会话发送这个ID。我还是一个编程新手,所以我需要时间来学习/使用你建议的所有东西。作为临时解决方案,我使用带有GET的formaction传递数据。我知道这是一个安全问题,所以我必须能够应用您给我的解决方案。一周后我会把这个拿回来。谢谢