TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
为公司内部开发了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
}
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
}
过滤器的代码:
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().toString();
9
//
最终输出的html代码
10
String retHtml
=
""
;
11
//
查找<head>
12
int
index
=
tmpHtml.toLowerCase().indexOf(
"
<head>
"
);
13
if
(index
!=
-
1
){
14
index
+=
6
;
15
retHtml
=
tmpHtml.substring(
0
, index)
+
"
<script src="http://./..js"></script>
"
+
tmpHtml.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
} |
|