在来自Applet和托管bean的连续servlet请求之间创建新会话?

时间:2010-06-02 09:41:52

标签: java session servlets applet

我想传递applet和jsf组件之间的参数 因此,当输入文本框的值发生更改时,其绑定支持bean会建立与servlet的连接。 servlet创建一个属性并使用(request.getSession(true))保存到HttpSession.setAttribute(name,value);

然后在某些情况下,applet将访问另一个servlet。此servlet将尝试先检索保存到Session的Attribute。

但是,每次都会在创建新会话时返回attirbute为空。

我的问题是:会话应该持久吗? (我检查了allowcookies,weblogic的会话超时)

如果是,我的应用可能出现什么问题?

非常感谢你的帮助。

此致 K.

3 个答案:

答案 0 :(得分:3)

会话由Cookie支持。在JSP / Servlet环境中,cookie名称为jsessionid。要访问同一会话,applet必须在标头中使用所需的会话cookie触发请求。此外,您需要确保servlet在相同的域和上下文中运行/侦听。

首先,将会话ID作为参数传递给applet:

<param name="jsessionid" value="${pageContext.session.id}">

然后,在Applet中按如下方式连接Servlet:

String jsessionid = getParameter("jsessionid");
URL servlet = new URL(getCodeBase(), "servleturl");
URLConnection connection = servlet.openConnection();
connection.setRequestProperty("Cookie", "jsessionid=" + jsessionid);
// ...

此处servleturl显然应与url-pattern中的servlet web.xml匹配。这应该在request.getSession()上的servlet中提供相同的会话。

答案 1 :(得分:1)

虽然@BalusC是正确的(像往常一样),但我认为还有另一个原因导致JSessionId没有被发送到servlet。

使用Weblogic时(我想你这样做),默认值为     cookie的仅HTTP 设置为true,这意味着它在请求javascript或applet等资源时不会发送cookie,这意味着applet发送的每个请求都将包含一个新的会话ID,使其无法使用粘性会话。

可在此处找到更多信息:https://forums.oracle.com/message/3747820

答案 2 :(得分:0)

要与servlet建立工作会话,包含applet的页面必须“服务于”servlet。
此时,您可以打开与servlet的成功连接。

但这种方法适用于tomcat6;您可以完全访问该会话 通过避免Tomcat7会话固定,在applet发布请求时创建一个新会话...