Posted on 2009-03-12 14:48
BearRui(AK-47) 閱讀(2903)
評論(4) 編輯 收藏 所屬分類:
Java
為公司內部開發了1個簡單的MVC框架,框架中需要向所有JSP頁面的<head>中插入2條引用JS的代碼,實現如下:
主要是繼承HttpServletResponseWrapper寫1個類(PageResponseWrapper),代碼:
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類:
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 }
過濾器的代碼:
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 }