正如
ActionRequest,RenderRequest,HttpServletRequest及其意义 中所说明的,Liferay 实现了接口 ActionRequest 和RenderRequest。当所实现方法需要传入参数request 为HttpServletRequest 时需要将ActionRequest 和RenderRequest 转换成HttpServletRequest 类对象。由以下三步完成。
(1)获取ActionRequest 或RenderRequest 接口类型的Request。
(2)强制转换成其实现类。
(3)调用实现类下的getHttpServletRequest() 方法。
伪代码分别如下:
Function( ActionRequest req)
throws PortalException, SystemException {
…… ……
ActionRequestImpl reqImpl = ( ActionRequestImpl )req;
HttpServletRequest httpservletrequest = reqImpl.getHttpServletRequest();
…… ……
}
Function( RenderRequest req)
throws PortalException, SystemException {
…… ……
RenderRequestImpl reqImpl = ( RenderRequestImpl )req;
HttpServletRequest httpservletrequest = reqImpl.getHttpServletRequest();
…… ……
}
事实上ActionRequestImpl 内没有实现自己的getHttpServletRequest() 方法,Liferay 中RenderRequestImpl 实现了RenderRequest 接口,ActionRequestImpl 继承了RenderRequestImpl 类,并对其ActionRequest 接口进行实现。
在调用getHttpServletRequest() 方法时,返回的实际上是DynamicServletRequest 对象。该类型扩展自HttpServletRequestWrapper 类,也就是说将请求打包,当有多个请求时,这里每个Portlet 都可能发出独立的请求,而每个Portlet 中又可能嵌套若干个Portlet,DynamicServletRequest 对象就将这些请求打包成一个Wrapper 一起发送。因此,RenderRequestImpl 对象getHttpServletRequest() 方法的作用是返回一个经过打包以后的普通 HttpServletRequest。
(1)获取ActionRequest 或RenderRequest 接口类型的Request。
(2)强制转换成其实现类。
(3)调用实现类下的getHttpServletRequest() 方法。
伪代码分别如下:
Function( ActionRequest req)
throws PortalException, SystemException {
…… ……
ActionRequestImpl reqImpl = ( ActionRequestImpl )req;
HttpServletRequest httpservletrequest = reqImpl.getHttpServletRequest();
…… ……
}
Function( RenderRequest req)
throws PortalException, SystemException {
…… ……
RenderRequestImpl reqImpl = ( RenderRequestImpl )req;
HttpServletRequest httpservletrequest = reqImpl.getHttpServletRequest();
…… ……
}
事实上ActionRequestImpl 内没有实现自己的getHttpServletRequest() 方法,Liferay 中RenderRequestImpl 实现了RenderRequest 接口,ActionRequestImpl 继承了RenderRequestImpl 类,并对其ActionRequest 接口进行实现。
在调用getHttpServletRequest() 方法时,返回的实际上是DynamicServletRequest 对象。该类型扩展自HttpServletRequestWrapper 类,也就是说将请求打包,当有多个请求时,这里每个Portlet 都可能发出独立的请求,而每个Portlet 中又可能嵌套若干个Portlet,DynamicServletRequest 对象就将这些请求打包成一个Wrapper 一起发送。因此,RenderRequestImpl 对象getHttpServletRequest() 方法的作用是返回一个经过打包以后的普通 HttpServletRequest。