(Portal 开发读书笔记) 处理资源 ResourceServingPortlet

简介:

ResourceServingPortlet是从Portlet 2.0才引入的接口,如果使用了它,就没有必要使用servlet来处理资源或者处理Ajax请求了。

 
 
  1. public abstract interface ResourceServingPortlet 
  2.   public abstract void serveResource(ResourceRequest paramResourceRequest, ResourceResponse paramResourceResponse) 
  3.     throws PortletException, IOException; 

这个接口可以让Portlet容器来处理和资源相关的请求。值得一提的是,这个ResourceResponse可以让Portlet容器渲染jsp页面,也可以渲染二进制内容。

 

还有一点非常非常重要:就是当一个resource请求到达某个Portlet时候,Portlet容器会调用这个Portlet的serveResource方法,但是这个Portlet的render方法,乃至同一个Portal 页面上的所有的其他的Portlet的render方法都不会被调用。

 

步骤1: 首先在Portlet中定义一个resource,这里我们给了一个resourceURL,因为GenericPortlet已经实现了 ResourceServingPortlet,所以这里无需显示的实现它而且可以直接使用serveResource方法

 
 
  1. public class DateTimePortlet extends GenericPortlet { 
  2. @RenderMode(name = "view"
  3. public void showHomePage(...)... { 

  4. //创建一个ResourceURL,他将会在页面上被点击链接事件所使用到
  5. ResourceURL dateTimeResourceURL = response.createResourceURL(); 
    //给这个ResourceURL赋值唯一的资源ID
  6. dateTimeResourceURL.setResourceID("dateTime"); 
  7. //将这个resourceURL放在RenderRequest的属性上
  8. request.setAttribute("dateTimeResourceURL"dateTimeResourceURL); 
  9. getPortletContext().getRequestDispatcher( 
  10. //请求分发到页面来渲染
  11. response.encodeURL("/WEB-INF/jsp/home.jsp")). 
  12. include(request, response); 
  13. ... 

 

步骤2:然后在这个Portlet中定义一个事件处理函数,来响应从页面发来的Ajax请求

 
 
  1. public class DateTimePortlet extends GenericPortlet {  
  2. @RenderMode(name = "view")  
  3. public void showHomePage(...)... {  
  4. }  
  5. ...  
  6.  
  7. public void serveResource(...)...{ 
  8. OutputStream outStream 
  9. = response.getPortletOutputStream(); 
  10. StringBuffer buffer = new StringBuffer(); 
  11. if (request.isUserInRole("User")) { 
  12. SimpleDateFormat sdf = new SimpleDateFormat( 
  13. "dd-MMM-yyyy hh:mm:ss a"); 
  14. buffer.append("Hello World (<i> " 
  15. + sdf.format(new Date())+ " </i>)"); 
  16. else { 
  17. buffer.append("<font color=\"red\"> You are not authorized to view server date/time"); 
  18. outStream.write(buffer.toString().getBytes()); 
  19. }  

 





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/847686,如需转载请自行联系原作者

目录
相关文章
|
JavaScript 数据可视化 前端开发
《面向三维GIS的Cesium开发与应用》读书笔记
《面向三维GIS的Cesium开发与应用》读书笔记
|
安全 测试技术 数据安全/隐私保护
软件安全开发生命周期读书笔记
分阶段: 0. 教育和意识       1.微软成功的原因在于管理层支持和教育与培训.       2.工程师必须对基本的安全弱点、常见的安全漏洞类型、基本的安全设计有所了解。
1459 0
|
存储 安全 编译器
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
|
存储 算法 编译器
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
74 1
|
存储 算法 Java
[笔记]读书笔记 C++设计新思维《二》技术(Techniques)(二)
[笔记]读书笔记 C++设计新思维《二》技术(Techniques)(二)
|
存储 编译器 程序员
C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象
C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象
75 0
|
存储 Java 编译器
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(一)
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(一)
61 0