ActionRequest,RenderRequest,HttpServletRequest 及其意

本文介绍了Portlet技术中两种核心请求类型:ActionRequest和RenderRequest的工作原理及其在Liferay平台上的实现方式。ActionRequest用于处理用户操作,而RenderRequest则负责呈现视图。通过具体的Java代码示例展示了如何区分这两种请求并进行相应的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于每个页面中,每个Portlet 的运行都相对比较独立,因此,为了实现Porlet 的异步功能,有必要在Request 内区分每个Portlet 的信息。因此,针对Portlet 区分出了两类Request,ActionRequest 和RenderRequest。

ActionRequest
来源:javax.portlet.ActionRequest
ActionRequest 是Portlet 的标准接口,主要标识在页面中单个Portlet 的请求。其作为从Web 客户端到服务端的信息载体。其中的内容为单个Portlet 中的内容。
Liferay实现为:com.liferay.portlet.ActionRequestImpl


RenderRequest
来源:javax.portlet.RenderRequest
RenderRequest 也是Portlet 的标准接口。可用于Portlet 之间的数据共享。只有RenderRequest 能够在服务端容器当中转发请求。
Liferay实现为:com.liferay.portlet.RenderRequestImpl


HttpServletRequest
来源:javax.servlet.http.HttpServletRequest
这个就不用说了,该类的实例是整个页面请求的信息载体。所有Portlet 的信息都打包在这里,可以视作是包涵了众多Portlet 的一个航母。猜想应该是所有Portlet 的ActionRequest 打包后放入HttpServletRequest 内。当单个Portlet 交互时仅仅只从中对应的 ActionRequest 取出数据来用。

根据JSR 168 的定义Portlet 的实现如下:

Java 代码

1. public class MyPortlet extends GenericPortlet
2. {
3. public void doView( RenderRequest request, RenderResponse response )
4. throws PortletException, IOException
5.    {
6. //自己的处理代码
7.    }
8.
9.    public void doEdit( RenderRequest request, RenderResponse response )
10.    throws PortletException, IOException
11.    {
12. //自己的处理代码
13.    }
14.
15.   public void render( RenderRequest request, RenderResponse response )
16.    throws PortletException, IOException
17. {
18. //自己的处理代码
19.    }
20.
21.    public void processAction( ActionRequest request, ActionResponse response )
22.    throws PortletException, IOException
23.    {
24. //ActionRequest 类型的request可以使用getParameter
25. if( request.getParameter(FORM_SUBMIT) != null ) {
26. // Set form text in the session bean
27. AaPortletSessionBean sessionBean = getSessionBean(request);
28. if( sessionBean != null )
29. sessionBean.setFormText(request.getParameter(FORM_TEXT));
30. }
31.    }
32. }

public class MyPortlet extends GenericPortlet
{
public void doView( RenderRequest request, RenderResponse response )
throws PortletException, IOException
   {
//自己的处理代码
   }

   public void doEdit( RenderRequest request, RenderResponse response )
   throws PortletException, IOException
   {
//自己的处理代码
   }

  public void render( RenderRequest request, RenderResponse response )
   throws PortletException, IOException
{
//自己的处理代码
   }

   public void processAction( ActionRequest request, ActionResponse response )
   throws PortletException, IOException
   {
//ActionRequest类型的request可以使用getParameter
if( request.getParameter(FORM_SUBMIT) != null ) {
// Set form text in the session bean
AaPortletSessionBean sessionBean = getSessionBean(request);
if( sessionBean != null )
sessionBean.setFormText(request.getParameter(FORM_TEXT));
}
   }
}


Portlet 中有两种请求方式:actionRequest 和renderRequest 。当portlet容器接收到一个actionRequest 请求的时候,如果请求后的Portlet 模式为view,那么Portlet 容器先调用Portlet 的processAction 方法,然后调用 portlet 的Render 方法去执行portlet 的doView() 方法;如果请求后的Portlet模 式为edit ,则最后去调用doEdit ()方法。当Portlet 容器接收到一个renderRequest 请求的时候,它将不会调用processAction 方法,Portlet 容器直接 调用Render 方法以执行对应的view 模式对应的doView() 方法或是edit 模式对应的doEdit() 方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值