`

过滤器中向所有JSP页面插入html代码

    博客分类:
  • Java
阅读更多

为公司内部开发了1个简单的MVC框架,框架中需要向所有JSP页面的<head>中插入2条引用JS的代码,实现如下:

主要是继承HttpServletResponseWrapper写1个类(PageResponseWrapper),代码:

<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1 public  class  PageResponseWrapper  extends  HttpServletResponseWrapper {
 2       private  Buffer buffer;
 3       private  HttpServletResponse originalResponse;
 4  
 5       public  PageResponseWrapper( final  HttpServletResponse response){
 6           super (response);
 7           this .originalResponse  =  response;
 8          buffer  =   new  Buffer();
 9      }
10  
11      @Override
12       public  PrintWriter getWriter()  throws  IOException {
13           return  buffer.getWriter();
14      }
15  
16       public  CharArrayWriter getContent(){
17           return  buffer.getBufferedWriter();
18      }
19  
20       public   void  close()  throws  IOException {
21          buffer.getWriter().close();
22      }
23      
24       public   void  finalize()  throws  Throwable {
25          super .finalize();
26         buffer.getWriter().close();
27      }
28  
29       /**
30       * 获取原始的response
31       *  @return  the originalResponse
32        */
33       public  HttpServletResponse getOriginalResponse() {
34           return  originalResponse;
35      }
36  }


Buffer类:

<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1  public   class  Buffer {
 2  
 3       private  CharArrayWriter bufferedWriter;
 4       private  PrintWriter exposedWriter;
 5      
 6       public   char [] getContents()  throws  IOException {
 7           // bufferedWriter 表示请求的页面的html
 8           if  (getBufferedWriter()  !=   null ) {
 9               return  getBufferedWriter().toCharArray();
10          }
11           return   null ;
12      }
        public  PrintWriter getWriter() {
16           if  (getBufferedWriter()  ==   null ) {
17              bufferedWriter  =   new  CharArrayWriter();
18              exposedWriter  =   new  PrintWriter(getBufferedWriter());
19          }
20           return  exposedWriter;
21      }
22       /**
23       *  @return  the bufferedWriter
24        */
25       public  CharArrayWriter getBufferedWriter() {
26           return  bufferedWriter;
27      }
28  }


过滤器的代码:

<!-- <br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 1  public   void  doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  throws  IOException, ServletException {
 2      HttpServletRequest hRequest  =  (HttpServletRequest)request;
 3      HttpServletResponse hResponse  =  (HttpServletResponse)response;
 4      PageResponseWrapper prw  =   new  PageResponseWrapper(hResponse);
 5   
 6      chain.doFilter(request, prw);
 7       //  得到视图html代码
 8      String tmpHtml  =  prw.getContent();
 9       //  最终输出的html代码
10      String retHtml  =   "" ;
11       //  查找<head>
12       int  index  =  tmpHtml.toLowerCase().indexOf( " <head> " );
13       if (index  !=   - 1 ){
14          index  += 6 ;
15          retHtml  =  tmp.substring( 0 , index)  +   " <script src='http://./..js'></script> "   +  tmp.substring(index);
16      } else {
17          retHtml  =  tmpHtml;
18      }
19       //  输出(注意,这里只能使用hResponse,不能使用prwgetWriter())
20      PrintWriter writer  =  hResponse.getWriter();
21      writer.write(retHtml);
22      writer.close();   
23      writer.close();
24      writer.flush();     
25  }
分享到:
评论

相关推荐

    JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 安装版.zip

    16、修复了:编辑、引用帖子时HTML代码的显示错误 17、修复了:查看投票用户时逻辑计算错误的问题。 18、修复了:对联广告在分辨率高情况下不对称。 19、修复了:当发帖需要验证码或验证问答时,游客发帖可能提示...

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 源码版.zip

    16、修复了:编辑、引用帖子时HTML代码的显示错误 17、修复了:查看投票用户时逻辑计算错误的问题。 18、修复了:对联广告在分辨率高情况下不对称。 19、修复了:当发帖需要验证码或验证问答时,游客发帖可能提示...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    2.8.3 在JSP页面中使用Include指令后,JSP不能编译 2.9 精彩回顾 第3章前人栽树后人乘凉 ——、JSP内置对象 3.1 本章学习任务 3.1.1 本章知识体系 3.1.2 实例开发任务 3.2 简化开发JSP内置对象概述 3.2.1 为什么...

    cangkuguanli.zip

    7添加一个过滤器解决网页乱码问题 8给网站添加一个欢迎页面,吸引用户使用 备注: 1)项目中使用的技术: HTML, JavaScript, JSP, Servlet, JSTL, EL. Ajax。缺一不可 2)使用JDBC访问数据库,两种方式:基础代码,Dao...

    JavaWeb(想学习框架得先学习JavaWeb)

    本课程jsp部分介绍:Servlet底层,jsp的底层原理,jsp与servlet的区别,jsp页面如何插入java代码,jsp中的3个指令、7个动作,9个内置对象的使用,EL表达式,JSTL标签,如何自定义标签,MVC模式,jsp+servlet实战案例

    JspRun!社区论坛系统 v6.0.0 build 20110516 GBK 安装版.zip

    16、修复了:编辑、引用帖子时HTML代码的显示错误 17、修复了:查看投票用户时逻辑计算错误的问题。 18、修复了:对联广告在分辨率高情况下不对称。 19、修复了:当发帖需要验证码或验证问答时,游客发帖可能提示...

    JAVA程序开发大全---上半部分

    本书内容丰富、技术全面、案例实用,而且所有的实例都以MyEclipse工程的形式组织,并按章节的顺序组织在附书光盘中,源代码工程都经过精心调试,可以直接导入MyEclipse中运行。 本书内容精练、重点突出、实例丰富,...

    JspRun!社区论坛系统 v6.0.0 build 20110516 UTF-8 源码版.zip

    16、修复了:编辑、引用帖子时HTML代码的显示错误 17、修复了:查看投票用户时逻辑计算错误的问题。 18、修复了:对联广告在分辨率高情况下不对称。 19、修复了:当发帖需要验证码或验证问答时,游客发帖可能提示...

    Java_Web开发实战1200例第1卷.part2

    5.4 输出实用的HTML代码 182 5.5 窗口与对话框 186 5.6 对数据库操作的JavaBean 189 第6章 Servlet技术 211 6.1 Servlet基础 212 6.2 Servlet应用 223 第7章 过滤器与监听器技术 239 7.1 Servlet过滤器 240 7.2 监听...

    Java_Web开发实战1200例第1卷.part3

    5.4 输出实用的HTML代码 182 5.5 窗口与对话框 186 5.6 对数据库操作的JavaBean 189 第6章 Servlet技术 211 6.1 Servlet基础 212 6.2 Servlet应用 223 第7章 过滤器与监听器技术 239 7.1 Servlet过滤器 240 7.2 监听...

    IBM WebSphere Portal门户开发笔记01

    1、不能向富文本编辑器中粘贴内容 48 2、设置WCM timeout超时值 48 3、一般用户不能访问内容 49 4、页面导航不能分页 49 5、一些portal常见问题 49 6、Portal中调用PUMA SPI管理用户和组信息 51 7、WCM内存溢出的...

    freemarker总结

    上面的代码中的逻辑表达式用括号括起来主要是因为里面有&gt;符号,由于FreeMarker会将&gt;符号当成标签的结束字符,可能导致程序出错,为了避免这种情况,我们应该在凡是出现这些符号的地方都使用括号. Pythons are ...

    Java学习笔记-个人整理的

    {1.11.2.3}插入排序}{40}{subsubsection.1.11.2.3} {1.11.3}递归调用}{41}{subsection.1.11.3} {1.12}Java API}{41}{section.1.12} {1.13}Linux命令}{41}{section.1.13} {1.13.1}基本查看、移动}{41}{...

    整理后java开发全套达内学习笔记(含练习)

    System.out.printf() 可插入带 % 的输入类型,前两种只可以插入转义符, 不能插入 % 的数据或字符串 在 printf 里面,输出有5个部分 %[argument_index$][flags][width][.precision]conversion 以“%”开头,[第几个...

Global site tag (gtag.js) - Google Analytics