Portlet应用开发(JSR168)Part_第1页
Portlet应用开发(JSR168)Part_第2页
Portlet应用开发(JSR168)Part_第3页
Portlet应用开发(JSR168)Part_第4页
Portlet应用开发(JSR168)Part_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Portlet 应用开发, Part 5Portlet 的 Session对象By Terry.liSpiritSeekerS本系列前一部分阐述了Portlet的Request和Response对象,本部分继续讲解Portlet中Session对象.及其与Servlet中Session对象的不同点.· Portlet Session中存取对象的作用范围 (Scope)Servlet中的Session属性和Portlet中的Session属性有一个非常大的不同点, 由于Portlet处于Portal中的缘故, Portlet的Session属性分为两种, 分别作用于不同的范围中:1.

2、Application Scope2. Portlet Scope这两者的区别在于:1) Application Scope类型的PortletSession中保存的对象对于同一个Portlet Application中的所有其它Portlet来说是可以被访问到的.2) Portlet Scope类型的PortletSession中保存的对象对于同一个Portlet Application中的所有其它Portlet来说是不可见的.但对于Portlet Application来说,其实它也是个Web Application , 因此不论是Application Scope也好,或者是Portle

3、t Scope也好,同样都属于HttpSession,因此都可以通过HttpSession 来访问.实际上Application Scope的Session就是HttpSession , 而Portlet Scope的Session 由于不可被其他Portlet访问, 它的session属性名称有它独特的存取方式, 如下:javax.portlet.p.<ID>?<ATTRIBUTE_NAME>其中ID是Portal/Portlet-Container生成用来唯一确定一个Portlet.Portlet Scope 的Session 使用以上的Attribute Name

4、 用以存取Session上绑定的属性. 我们所设制的Portlet Scope 的Session属性由Portlet容器自动转化成以上格式. 用以保证不被其它的Portlet访问到. 注: 以javax.portlet开头的Session属性名称是保留的,不可以用于Portlet的Session 属性名称.· Case study: 不同Scope Session的比较 以下我们将编码实现两个Portlet, 其中一个用来创建session属性的Portlet 和另一个用来验证session属性作用范围的Portlet. 用以验证Session属性的正确性.1. Portlet (P

5、ortletSessionExample1_GenerateSesssion.java) public void processAction(ActionRequest request,ActionResponse response)throws PortletException,IOExceptionString action=request.getParameter("ACTION");if(action.equals("ApplicationScope")PortletSession ps=request.getPortletSession();p

6、s.setAttribute("PortletSession.AS",action,PortletSession.APPLICATION_SCOPE);elsePortletSession ps=request.getPortletSession();ps.setAttribute("PortletSession.PS",action,PortletSession.PORTLET_SCOPE); 以上代码片段根据不同参数分别产生不同Scope的PortletSession 的属性 , 作用范围分别为Application 和 Portlet.2. Por

7、tlet (PortletSessionExample1_DisplaySession.java)这个Portlet调用一个JSP (jspShowSession.jsp) 来获得Portlet session和HttpSession, 并且示出来.3. JSP(view_portletsession1_generatesession.jsp)这个JSP将创建两个ActionURL , 分别用来产生两种PortletSession属性: <portlet:actionURL windowState="NORMAL" portletMode="view&quo

8、t; var="pu1"><portlet:param name="ACTION" value="ApplicationScope"/></portlet:actionURL><portlet:actionURL windowState="NORMAL" portletMode="view" var="pu2"><portlet:param name="ACTION" value="PortletS

9、cope"/></portlet:actionURL> 4. JSP (jspShowSession.jsp)取得以上创建的两个PortletSession 的属性值, 由Browser中可以看到只有Application Scope的Session 属性可以被获得.if(ps.getAttribute("PortletSession.AS",PortletSession.APPLICATION_SCOPE)!=null)app=ps.getAttribute("PortletSession.AS",PortletSessio

10、n.APPLICATION_SCOPE).toString();if(ps.getAttribute("PortletSession.PS",PortletSession.PORTLET_SCOPE)!=null)portlet=ps.getAttribute("PortletSession.PS",PortletSession.PORTLET_SCOPE).toString();以下代码将Httpsession中的所有属性全部列出: 可以看到PortletContainer是如何存取Portlet Scope类型的session属性的. <% H

11、ttpSession s=request.getSession();for (Enumeration e = s.getAttributeNames() ; e.hasMoreElements() ;) %><tr><td><%=e.nextElement()%></td></tr><% %> 将以上源代码编译后, 再通过Eclipse生成/更新Portlet的web.xml后, 将所有配置及相关文件部署后, 启动Tomcat. 在Browser中加载如下页面: Http:/localhost:8080/pluto/

12、portal , 可以看到如下的页面(图:5-1) 图:5-1单击PortletSession Example1 Page后可以看到如下两个Portlet 页面(图5-2)图:5-2上图中上边的一个Generate Portlet用来创建两个PortletSession属性,分别是Application Scope 和 Portlet Scope 类型. 下方的Display Portlet用以验证Session的作用范围.单击Application Scope Session, 可以看到如下页面(图5-3) 图5-3如上图,生成了一个Application Scope的属性,名称: Port

13、letSession.AS单击Portlet Scope Session, 可以看到如下页面(图5-4)图5-5生成了一个Portlet Scope Session属性,所以Display portlet 无法取得但是从HttpSession 可以看到又创建了一个session属性.Case study: Session的共享以上例子验证了Portlet中Session的作用范围, 可能在开发过程中经常需要有Popup页面的处理这个时候就无法使用Portlet, 但是可以使用Servlet或者是JSP, 以下这个例子是一个Portlet和Servlet的Session共享的应用 (或许是Tom

14、cat4的一个BUG), 我们将使用一个Portlet创建一个Application Scope的Session, 然后在一个Servlet中得到它. 1. Portlet (PortletSessionExample2_ShareSession.java)以下代码将创建一个application scope的Portlet Session: if(INF!=null)PortletSession ps=request.getPortletSession();ps.setAttribute("INF",INF,PortletSession.APPLICATION_SCOPE

15、); 2. JSP (jspLoginView.jsp) <%PortletSession ps = renderRequest.getPortletSession();String app=null;if(ps.getAttribute("INF",PortletSession.APPLICATION_SCOPE)!=null)app=ps.getAttribute("INF",PortletSession.APPLICATION_SCOPE).toString();%> <u><a style="cursor:

16、hand" onclick='window.open("/pluto/popup","a","width=400,height=330,scrollbars=1")'>Click here to Popup</a></u> <% %> 3. Servlet (PopupServlet.java) HttpSession se=request.getSession();Object info=se.getAttribute("INF"); 注: 由于

17、Tomcat下webapps目录下的pluto和portlets分别是两个web application, 所以将以上的PopupServlet配置到pluto目录下,而非portlets目录下.将以上源代码编译后, 再通过Eclipse生成/更新Portlet的web.xml后, 将所有配置及相关文件部署后, 启动Tomcat. 在Browser中加载如下页面: Http:/localhost:8080/pluto/portal , 可以看到如下的页面 单击PortletSession Example2 Page后可以看到如下页面(图5-6)图5-6单击 Click here to gene

18、rate a session , 后可以看到如下页面(图5-7) 图5-7单击 Click here to Popup , 后可以看到如下页面(图5-8)图5-8· 源代码及Portlet相关配置文件A. Session Example11. Portlet (PortletSessionExample1_GenerateSesssion.java)package portlets.portletsession;/* * author terry * * To change the template for this generated type comment go to * Wi

19、ndow&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments */import javax.portlet.*;import java.io.IOException;public class PortletSessionExample1_GenerateSesssion extends GenericPortletpublic void doView(RenderRequest request, RenderResponse response)throws PortletException

20、, IOExceptionresponse.setContentType("text/html");String jspName = getPortletConfig().getInitParameter("view");PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);rd.include(request, response); public void processAction(ActionRequest request,ActionResp

21、onse response)throws PortletException,IOExceptionString action=request.getParameter("ACTION");if(action.equals("ApplicationScope")PortletSession ps=request.getPortletSession();ps.setAttribute("PortletSession.AS",action,PortletSession.APPLICATION_SCOPE);elsePortletSessio

22、n ps=request.getPortletSession();ps.setAttribute("PortletSession.PS",action,PortletSession.PORTLET_SCOPE); 2. Portlet (PortletSessionExample1_DisplaySession.java) package portlets.portletsession;/* * author terry * * To change the template for this generated type comment go to * Window&

23、;gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments */import javax.portlet.*;import java.io.IOException;public class PortletSessionExample1_DisplaySession extends GenericPortlet public void doView(RenderRequest request, RenderResponse response)throws PortletException, IOExcep

24、tion response.setContentType("text/html");String jspName = getPortletConfig().getInitParameter("view");PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);rd.include(request, response); 3. JSP (view_portletsession1_displaysession.jsp)<% page session

25、="false" %><% page import="javax.portlet.*"%><% page import="java.util.*"%><% taglib uri='/WEB-INF/tld/portlet.tld' prefix='portlet'%><portlet:defineObjects/><BR><h3>Display PortletSession and HttpSession Example<

26、;/h3><%PortletSession ps = renderRequest.getPortletSession();String app="NULL"String portlet="NULL"if(ps.getAttribute("PortletSession.AS",PortletSession.APPLICATION_SCOPE)!=null)app=ps.getAttribute("PortletSession.AS",PortletSession.APPLICATION_SCOPE).to

27、String();if(ps.getAttribute("PortletSession.PS",PortletSession.PORTLET_SCOPE)!=null)portlet=ps.getAttribute("PortletSession.PS",PortletSession.PORTLET_SCOPE).toString();%><b>PortletSession list:</b><table border=1><tr><td><b>Session Scope<

28、;/b></td><td><b>Attribute Name</b></td><td><b>Attribute Value</b></td></tr><tr><td>Application scope</td><td>PortletSession.AS</td><td><b><%=app%></b></td></tr><tr>&

29、lt;td>Portlet scope</td><td>PortletSession.PS</td><td><b><%=portlet%></b></td></tr></table><br><b>HttpSession list:</b><table border=1><tr><td><b>Attribute Name</b></td></tr><

30、;% HttpSession s=request.getSession(); for (Enumeration e = s.getAttributeNames() ; e.hasMoreElements() ;) %><tr><td><%=e.nextElement()%></td></tr><% %></table><BR><BR>4. JSP (view_portletsession1_generatesession.jsp)<% page session="f

31、alse" %><% page import="javax.portlet.*"%><% page import="java.util.*"%><% taglib uri='/WEB-INF/tld/portlet.tld' prefix='portlet'%><portlet:defineObjects/><portlet:actionURL windowState="NORMAL" portletMode="view&q

32、uot; var="pu1"><portlet:param name="ACTION" value="ApplicationScope"/></portlet:actionURL><portlet:actionURL windowState="NORMAL" portletMode="view" var="pu2"><portlet:param name="ACTION" value="Portle

33、tScope"/></portlet:actionURL><BR><h3>Generate PortletSession Example</h3><a href="<%=pu1%>">Application Scope Session</a><Br><a href="<%=pu2%>">Portlet Scope Session</a><Br><BR>B. Session Exampl

34、e21.Portlet (PortletSessionExample2_ShareSession.java)package portlets.portletsession;/* * author terry * * To change the template for this generated type comment go to * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments */import javax.portlet.*;import java.io.IOE

35、xception;public class PortletSessionExample2_ShareSession extends GenericPortlet public void doView(RenderRequest request, RenderResponse response)throws PortletException, IOException response.setContentType("text/html");String jspName = getPortletConfig().getInitParameter("view"

36、);PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(jspName);rd.include(request, response); public void processAction(ActionRequest request, ActionResponse response) throws PortletException, java.io.IOException String INF=request.getParameter("INF"); if(INF!=null)Portl

37、etSession ps=request.getPortletSession();ps.setAttribute("INF",INF,PortletSession.APPLICATION_SCOPE); 2. Servlet (PopupServlet.java)package servlet;/* * author terry * * To change the template for this generated type comment go to * Window&gt;Preferences&gt;Java&gt;Code Generat

38、ion&gt;Code and Comments */import javax.servlet.http.*;import javax.servlet.*;import java.io.*;public class PopupServlet extends HttpServletpublic void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletExceptionPrintWriter pw=response.getWriter();HttpSessi

39、on se=request.getSession();Object info=se.getAttribute("INF");if(info!=null)pw.println("<table border=1 bordercolor=black>");pw.println(" <tr>");pw.println(" <td><b>Attribute</b><td><td><b>Value</b></td> &

40、quot;);pw.println(" </tr>");pw.println(" <tr>");pw.println(" <td>INF<td><td>"+ info.toString() +"</td> ");pw.println(" </tr>");pw.println("</table>");elsepw.println("No session");C.

41、配置文件1. Portlet.xml <!- PortletSession Example -><!- PortletSession Example1 - GenerateSession -><portlet><description>PortletSession_Generator Example</description><portlet-name>PortletSession_GeneratorExample</portlet-name><display-name>PortletSession

42、_Generator Example</display-name><portlet-class>portlets.portletsession.PortletSessionExample1_GenerateSesssion</portlet-class><init-param><name>view</name><value>/fragments/portletsession/view_portletsession1_generatesession.jsp</value></init-param

43、><expiration-cache>-1</expiration-cache><supports><mime-type>text/html</mime-type><portlet-mode>VIEW</portlet-mode></supports><supported-locale>en</supported-locale><portlet-info><title>PortletSession_Generator Example</ti

44、tle><short-title>PortletSession_Generator</short-title><keywords>PortletSession_Generator</keywords></portlet-info></portlet><!- PortletSession Example1 - DisplaySession -><portlet><description>PortletSession_Display Example</description>

45、;<portlet-name>PortletSession_DisplayExample</portlet-name><display-name>PortletSession_Display Example</display-name><portlet-class>portlets.portletsession.PortletSessionExample1_DisplaySession</portlet-class><init-param><name>view</name><val

46、ue>/fragments/portletsession/view_portletsession1_displaysession.jsp</value></init-param><expiration-cache>-1</expiration-cache><supports><mime-type>text/html</mime-type><portlet-mode>VIEW</portlet-mode></supports><supported-locale>

47、;en</supported-locale><portlet-info><title>PortletSession_Display Example</title><short-title>PortletSession_Display</short-title><keywords>PortletSession_Display</keywords></portlet-info></portlet> 2. pageregistry.xml <!- PortletSession

48、 Example1 Page -> <fragment name="portletsessionpage1" type="page"> <navigation> <title>PortletSession Example1 Page</title> <description>PortletSession Example Page</description> </navigation> <fragment name="row1" type=&

49、quot;row"> <fragment name="col1" type="column"> <fragment name="p1" type="portlet"> <property name="portlet" value="10.40"/> </fragment> </fragment> </fragment> <fragment name="row2" type="row"> <fragment name="col1" type="column"> <fragment name="p1" type="portlet&q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论