我想传递applet和jsf组件之间的参数 因此,当输入文本框的值发生更改时,其绑定支持bean会建立与servlet的连接。 servlet创建一个属性并使用(request.getSession(true))保存到HttpSession.setAttribute(name,value);
然后在某些情况下,applet将访问另一个servlet。此servlet将尝试先检索保存到Session的Attribute。
但是,每次都会在创建新会话时返回attirbute为空。
我的问题是:会话应该持久吗? (我检查了allowcookies,weblogic的会话超时)
如果是,我的应用可能出现什么问题?
非常感谢你的帮助。
此致 K.
答案 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的成功连接。
但这种方法适用于tomcat6;您可以完全访问该会话 通过避免Tomcat7会话固定,在applet发布请求时创建一个新会话...