`

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

    博客分类:
  • j2ee
阅读更多

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重现包装后,前段已经说过,将输出流改变了方向。

 

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

2
3
分享到:
评论

相关推荐

    j2ee 考试题 j2ee两份考试题

    - **知识点解释**:静态存根客户端通过编译时生成的代码与Web服务进行交互,其耦合度较高,因为一旦服务端的接口发生变化,客户端的代码也需要相应更新。动态调用接口客户端则是在运行时动态发现服务并与其交互,...

    J2EE面试题(附答案)

    ### J2EE面试题知识点详解 #### Java基础知识 1. **字符串(String)与字符数组(char[])的区别** - 字符串(String)是不可变对象,一旦创建后其内容就不能更改。 - 字符数组(char[])是可以修改的,可以通过索引访问...

    电信计费系统概要设计

    - **自动化技术应用**:利用XMI2.1接口与XML文件生成,自动创建数据库脚本、数据访问类代码,提高开发效率。 - **技术要素选择**:优先考虑Spring JDBC Template而非Hibernate或iBatis,简化数据库交互复杂度,确保...

    java经典面试题7

    JSP(Java Server Pages)是Java技术栈中用于生成动态网页的一部分。JSP提供了多种标签库,如`jsp:include`用于页面包含,`jsp:useBean`用于查找和操作JavaBean对象,`jsp:forward`用于页面跳转等。这些标签简化了...

    Java极限编程

    通过定义一系列任务,Ant可以自动化完成项目构建的整个流程,包括编译源代码、生成文档、运行测试等。这不仅提高了开发效率,还减少了人为错误的可能性。 **6. 使用Ant构建J2EE应用** 对于基于J2EE的应用程序,Ant...

    Java面试题及答案.pdf

    12. **JSP中的动态和静态INCLUDE**:动态INCLUDE可以传递参数,实时生成内容;静态INCLUDE类似于HTML的#include,加载预编译好的静态页面。 13. **应用服务器与Web服务器**:应用服务器提供更复杂的应用托管环境,...

    JAVA SE学习精华集锦

    17. **代码复用**:遵循设计模式,如装饰者模式在Java IO包中的应用,以及代码重用的一般原则。 这些知识点涵盖了Java SE的各个方面,从基础API到高级特性和工具,对于Java开发者来说都是重要的学习内容。通过深入...

    struts在线投票

    JSP则是一种动态网页技术,可以将Java代码嵌入HTML中,实现视图层的动态生成。 4. **jsp在线投票**:JSP页面通常用来显示投票的选项、用户的投票状态以及投票结果。它们可以包含HTML、CSS、JavaScript以及嵌入的...

    系统分析师考试复习资料

    - **性能问题**:在高并发环境下可能会出现性能瓶颈。 - **可维护性**:代码结构如果不合理,将难以维护和扩展。 **1.16 XML 的优缺点** - **优点**:数据格式灵活、自描述性强、易于处理。 - **缺点**:文件体积...

    最新系统分析师考试复习资料

    - **性能瓶颈**:在高并发场景下可能会遇到性能问题。 - **XML 的优缺点** - **优点**:自描述性强、结构清晰、易于解析。 - **缺点**:相比 JSON 等格式,体积较大。 - **XML 的三个要素** - **模式**:定义 ...

    EJB容器的实现方式研究学习笔记

    预编译方式则是另一种实现EJB容器的方法,它在部署阶段就将EJB组件与容器集成,生成针对特定接口的静态类。这种方式在运行时性能通常优于动态代理,因为调用过程更为直接,避免了运行时的额外开销。然而,预编译方式...

    CoreJava重点要点笔记

    ### Core Java 重点要点笔记解析 #### 一、Java编程语言的发展历史与主要特性 - **起源**: Java 最初源自 Sun 公司的一个名为 Green 的项目,该项目旨在为家用消费电子产品开发一个分布式代码系统。最初考虑使用 ...

    Java程序员笔试题

    - **JSP:** 主要用于生成动态HTML页面,可以嵌入Java代码。 - **Servlet:** 是一个Java类,通常用于处理客户端请求和生成响应。 **2. Web开发中的HTML转义** - **HTML转义:** 当在Web页面中输出HTML标签时,...

    java面试题

    根据给定的文件信息,以下是对“java面试题”中涉及的关键知识点的详细解析: ### 1. Java基础知识概述 Java是一种广泛使用的编程语言,特别适用于企业级应用开发,包括但不限于J2EE(Java Platform, Enterprise ...

    Java程序员面试题

    EJB(Enterprise JavaBeans)是服务器端的组件模型,用于构建分布式、事务处理和安全性要求高的企业应用。Java Bean是轻量级的组件,主要用于客户端UI表现,不涉及服务器端功能。 5. **Java的多态与继承** 多态...

    java面试题(较全面)

    - **示例代码解析:** ```java Class c1 = new Integer(5).getClass(); // 使用Integer包装类 Class c2 = int.class; // 基本类型的Class Class c3 = new Integer(6).getClass(); // 另一个Integer实例 System....

    Java面试问题 TXT格式

    - **静态include**:使用`<%@ include file="..." %>`标签,编译阶段完成合并,最终生成一个JSP文件。 - **动态include**:使用`<jsp:include page="..." />`标签,运行时才完成合并,每个包含的页面都可以有自己的...

    (超赞)JAVA精华之--深入JAVA API

    - 使用 Dom4j 解析和生成 XML 文档。 **3.3 Java 语言的 XML 验证 API** - **XML验证** - 使用 Java API 验证 XML 文档的正确性。 **3.4 Hibernate的hello word** - **ORM框架** - 使用 Hibernate 进行对象...

Global site tag (gtag.js) - Google Analytics