为公司内部开发了1个简单的MVC框架,框架中需要向所有JSP页面的<head>中插入2条引用JS的代码,实现如下:
主要是继承HttpServletResponseWrapper写1个类(PageResponseWrapper),代码:
1 p
ublic
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 }
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类:
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 }
pu blic 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 }
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 }
pu blic 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 }
过滤器的代码:
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 }
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 }