如果返回
null,则只能表示两件事:
- JSF尚未预先创建bean。
- applet-servlet交互与Webapp使用的HTTP会话不同。
考虑到您描述功能需求的方式,我认为是后者。您需要确保同时传递Web应用程序的会话标识符以及来自小程序的HTTP请求。它可以采用
JSESSIONIDcookie或
jsessionidURL路径属性的形式。
首先,您需要向applet告知该Webapp正在使用的会话ID。您可以通过将参数传递到
<applet>或
<object>标记包含小程序的标签来实现
<param name="sessionId" value="#{session.id}" />(这#{session}是一个隐式的JSF
EL变量,它引用当前电流HttpSession
,该变量又具有一种getId()
方法;您无需为此创建托管bean,上面的代码按原样完成)
可以在小程序中按如下方式检索它:
String sessionId = getParameter("sessionId");您没有描述如何与Servlet交互,但是假设您为此使用标准JavaSEURLConnection(指向
@WebServlet("/servleturl")Servlet),则可以使用它setRequestProperty()来设置请求标头:
URL servlet = new URL(getCodebase(), "servleturl");URLConnection connection = servlet.openConnection();connection.setRequestProperty("cookie", "JSESSIonID=" + sessionId);// ...另外,您也可以将其作为URL路径属性传递:
URL servlet = new URL(getCodebase(), "servleturl;jsessionid=" + sessionId);URLConnection connection = servlet.openConnection();// ...
(请注意,这两种情况都重要)
无论哪种方式,applet-servlet交互都将在与JSF托管bean相同的HTTP会话中进行。



