当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

j2ee高并发,生成静态页面代码解析

发表于: 2012-07-15   作者:blackproof   来源:转载   浏览次数:
摘要: jsp解决高并发,其中一个方法就是生成静态页面,这样可以减少访问数据库次数,也可以省去后台处理逻辑。   那么实现生成静态页面的技术已经相当成熟了,向velocity,freemarks架构都已经包装好了。   但是在结合各种奇奇怪怪的架构中,还是在自己实现的代码复用最好,所以,接下来简单解析生成页面部分代码,   在这个生成静态页面代码中,URL的重定向

jsp解决高并发,其中一个方法就是生成静态页面,这样可以减少访问数据库次数,也可以省去后台处理逻辑。

 

那么实现生成静态页面的技术已经相当成熟了,向velocity,freemarks架构都已经包装好了。

 

但是在结合各种奇奇怪怪的架构中,还是在自己实现的代码复用最好,所以,接下来简单解析生成页面部分代码,

 

在这个生成静态页面代码中,URL的重定向,就是将URL改为约定好的html页面地址,这个步骤就是拼拼接接字符串,放在

requestDispatcher中,或是说requestDispatcher指向html页面资源

 

那么下面是关键生成讲台页面的代码,不管是哪个版本的,都会有如下代码:

 

{  
             final ByteArrayOutputStream os = new ByteArrayOutputStream();  
             final ServletOutputStream stream = new ServletOutputStream() {     
    
                  public   void   write(byte[] data,int offset, int length)   {  
                         os.write(data,   offset,   length);  
                  }      
    
                  public   void   write(int   b)   throws   IOException   {  
                         os.write(b);  
                  }  
              };    
    
               final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os, encoding));   
    
               HttpServletResponse rep =  new HttpServletResponseWrapper(response)   {   
    
                   public ServletOutputStream getOutputStream() {  
                                  return stream;  
                   }      
    
                   public PrintWriter getWriter() {  
                                 return pw;  
           }  
               };   
    
              logger.debug("HtmlCreatorServlet RequestDispatcher = " + templatePath);  
              RequestDispatcher  dispatcher = getServletContext().getRequestDispatcher(templatePath);  
              dispatcher.include(request, rep);  
              pw.flush();  
              FileOutputStream fos = null;  
              try {   
    
                  if(os.size() == 0) {  
                  response.sendError(HttpServletResponse.SC_NOT_FOUND, "");  
                  }  
          else {  
                  fos = new FileOutputStream(cachhtmlFileName);  
                  os.writeTo(fos);  
                  dispatcher = getServletContext(). getRequestDispatcher("/"+htmlName);  
                        dispatcher.include(request, response);  
                  }   
    
                  } finally {  
                  if(fos != null) {  
                      fos.close();  
                  }  
             }   
    
}   

 其目的就是从response中将目标资源jsp写入到静态页面html中,其中关键语句为

HttpServletResponse rep =  new HttpServletResponseWrapper(response)   {   
    
                   public ServletOutputStream getOutputStream() {  
                                  return stream;  
                   }      
    
                   public PrintWriter getWriter() {  
                                 return pw;  
           }  

他将输出流的方向改变了,将response中的内容转到打印流pw中,pw在写入到数组字节流os中,os就可以写到文件指定的html文件中了,可喜可贺可喜可贺。那么都是在哪句代码中实现的呢,在这句活

dispatcher.include(request, rep);  

disparcher的include,玩过jsp都知道,是将目标资源处理结果包括在当前资源中,呈现给用户,可是response被rep重现包装后,前段已经说过,将输出流改变了方向。

 

以此实现了生成静态页面。

j2ee高并发,生成静态页面代码解析

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
提升网站性能的方式有很多,例如有效的使用缓存,生成静态页面等等。今天要说的就是生成静态页面的
提升网站性能的方式有很多,例如有效的使用缓存,生成静态页面等等。今天要说的就是生成静态页面的
获取【下载地址】 QQ: 313596790 【免费支持更新】 A 代码生成器(开发利器);全部是源码 增删改查的
ASP.NET生成静态页面,效果图如下: 1.模板样式: 2.添加内容: 3.生成的静态页面: 实现代码: //
做门户网站有大量的页面 页面数据之多 每次请求都要查询数据库操作 性能 差 速度也慢的不得了 使用f
做门户网站有大量的页面 页面数据之多 每次请求都要查询数据库操作 性能 差 速度也慢的不得了 使用f
ASP.NET生成静态页面,效果图如下: 1.模板样式: 2.添加内容: 3.生成的静态页面: 实现代码: //
目前主流的页面静态技术都是基于模板生成的,但是对于一些采用ajax+js渲染的页面,这种方法是无能为
正文: 视频播放协议请求应用于多个业务产品,为了提供一个稳定的解析服务,当CMS、媒资、聚合平台等产
垂直扩展 垂直扩展是一种用于增加单个ActiveMQ代理连接数(因而也增加了负载能力)的技术.默认情况下,
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号