当前位置: 首页 > 工具软件 > JBoss Portal > 使用案例 >

jboss portal(API 如何与web容器交换和传递数据)

彭琛
2023-12-01

jboss portal API 如何与web容器交换和传递数据呢?

 

首先,我明白的是servlet和portlet是两个完全不同的东西,他们各自独立,自成体系。比较一下定义:

 

public class VicPortlet extends GenericPortlet {......

 

public class FrontControllerServlet extends HttpServlet {......

public abstract class javax.servlet.http.HttpServlet extends javax.servlet.GenericServlet implements java.io.Serializable {......


VicPortlet 和FrontControllerServlet 分别是GenericPortlet 和GenericServlet 的子类,GenericPortlet 和GenericServlet 都是Object的子类。可以说在类的定义上,portlet和servlet是两个平行的东西,没有交叉点。不过GenericPortlet 和GenericServlet 有类似的API,作用也类似。

 

那么,portlet到底怎样和servlet(以jsp为例)通信呢?

jsp中有9个隐式的对象(application , session , request , pageContext  ,config , exception,out,page,response ),其中的四个结合起来可以实现会话管理,他们是application , session , request , pageContext 。portlet中的API和pageContext 是不太可能沟通了,那么他们会怎样和application , session , request这三个家伙沟通的呢?

 

●application (javax.servlet.ServletContext对象)是使用范围最广的上下文状态。它允许 JSP 页面的 servlet 与包括在同一应用程序中的任何 Web 组件共享信息。

●session(javax.servlet.http.HttpSession ) 可能是状态管理上下文中使用得最多的对象。“会话”的概念是指单个用户与 Web 应用程序在几个请求上进行交互。
●request(javax.servlet.http.HttpServletRequest ) 提供对 HTTP 请求数据的访问,同时还提供用于加入特定于请求的数据的上下文。

 

对应于servlet,portlet也有相应的对象:

PortletContext是portlet的上下文状态,所有统一应用中的portlet共享PortletContext的对象。不同应用中不能共享。

PortletSession的对象对于单个用户在同一个会话内有效。

RenderRequest 的对象对于单个用户在同一个请求内有效。

 

1.application对象可以获得PortletContext对象中set的值。

2.session和PortletSession可以通过PortletSession.APPLICATION_SCOPE参数来实现交换数据,例如:

   PortletSession ps = request.getPortletSession(); //获得
   ps.setAttribute("username3", "balabala",PortletSession.APPLICATION_SCOPE);
   String username4 = (String)ps.getAttribute("username4", PortletSession.APPLICATION_SCOPE);

3.当然,在jsp中,也可以通过标签定义好一些portlet对象,然后直接调用,例如:

   <%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>

   <portlet:defineObjects />

   <%

    portletSession.getAttribute("username4", PortletSession.APPLICATION_SCOPE);

   %>

4.RenderRequest/RenderResponse

   RenderRequest一般会用于doXXX函数中作为参数,而doXXX一般是在界面上以某种模式(view、edit、help)显示的时候自动调用。  在jsp中,request对象可以获得RenderResponse对象中set的值,反之不可。

5.ActionRequest/ActionResponse

   在jsp中,request对象可以获得ActionResponse对象中set的值。

   在portlet中ActionRequest用于向RenderRequest对象中存入参数,或者还可以用于重定向。ActionRequest用于获取actionURL中的参数。


 

 

 

 类似资料: