servlet获得response的数据 比如我有一个请求http://www.xxxx.com/2.jsp那么,我怎么写一个servlet,对所有的.jsp的返回数据拦截,进行处理后,再返回 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该是写filter吧具体写法请google,配置文件贴下:<?xml version="1.0" encoding="UTF-8"?><web-app> <filter> <filter-name>CharsetFilter</filter-name> <filter-class>com.easyjf.web.CharsetFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <param-name>ignore</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharsetFilter</filter-name> <servlet-name>*.jsp</servlet-name> </filter-mapping></web-app> 我要获得response的内容,就是在返回到IE前,我想先拦截比如,本来是返回今天是*** 我想拦截,然后把***替换成对应的,然后再返回 和下面的类似:比如,我网站上有N张图片,我现在需要在它显示在IE前,拦截,然后加上水印, 写一个Filter,在doFilter中调用chain.doFilter(request, new MyHttpServletResponseWrapper(response));这个MyHttpServletResponseWrapper extends HttpServletResponseWrapper并覆盖getWriter方法,返回一个你自己的Writer,这样就可以方便的过滤了。 这个MyHttpServletResponseWrapper extends HttpServletResponseWrapper并覆盖getWriter方法,返回一个你自己的Writer,这样就可以方便的过滤了。怎么样得到返回的数据 恐怕是要你自己构造一个PrintWriter,此Writer写入所需要的内容返回 看看这个文章,我想对你有帮助http://www.1-100.org/JSP/12975.htm String html = responseWrapper.toString();得到页面结果字符串,恐怕是要用正则解析此字符串替换成所需要的 不一样的,它是去读一个文本文件,然后通过response返回,我现在是动态的数据流,文本的再笨也可以写,根据请求,去读,然后处理,返回 你是不太可能获得你据说的已经返回的,因为这段非常可能已经返回到客户端了。所以你还是只能 像 killme2008(为了生态平衡,请保护蛤蟆) 说的你自己构造一个PrintWriter,此Writer写入所需要的内容返回 首先定义WrappedResponse:package example.chapter7;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;public class Wrapper extends HttpServletResponseWrapper { public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2; private int outputType = OT_NONE; private ServletOutputStream output = null; private PrintWriter writer = null; private ByteArrayOutputStream buffer = null; public Wrapper(HttpServletResponse resp) throws IOException { super(resp); buffer = new ByteArrayOutputStream(); } public PrintWriter getWriter() throws IOException { if(outputType==OT_STREAM) throw new IllegalStateException(); else if(outputType==OT_WRITER) return writer; else { outputType = OT_WRITER; writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding())); return writer; } } public ServletOutputStream getOutputStream() throws IOException { if(outputType==OT_WRITER) throw new IllegalStateException(); else if(outputType==OT_STREAM) return output; else { outputType = OT_STREAM; output = new WrappedOutputStream(buffer); return output; } } public void flushBuffer() throws IOException { if(outputType==OT_WRITER) writer.flush(); if(outputType==OT_STREAM) output.flush(); } public void reset() { outputType = OT_NONE; buffer.reset(); } public byte[] getResponseData() throws IOException { flushBuffer(); return buffer.toByteArray(); } class WrappedOutputStream extends ServletOutputStream { private ByteArrayOutputStream buffer; public WrappedOutputStream(ByteArrayOutputStream buffer) { this.buffer = buffer; } public void write(int b) throws IOException { buffer.write(b); } public byte[] toByteArray() { return buffer.toByteArray(); } }}然后编写Filter,这里给的例子是用GZip压缩Response:package example.chapter7;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.zip.GZIPOutputStream;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse;public class GZipFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException {} public void destroy() {} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse resp = (HttpServletResponse)response; Wrapper wrapper = new Wrapper(resp); chain.doFilter(request, wrapper); byte[] gzipData = gzip(wrapper.getResponseData()); resp.addHeader("Content-Encoding", "gzip"); resp.setContentLength(gzipData.length); ServletOutputStream output = response.getOutputStream(); output.write(gzipData); output.flush(); } private byte[] gzip(byte[] data) { ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240); GZIPOutputStream output = null; try { output = new GZIPOutputStream(byteOutput); output.write(data); } catch (IOException e) {} finally { if(output!=null) { try { output.close(); } catch (IOException e) {} } } return byteOutput.toByteArray(); }} Jsp 读取本地文件 把一个页面的一部分弄到另一个页面显示 请问如何在一个servlet中设定全局变量?(急) 【100分】网站在本机调试可以,为什么传到空间服务商那就不行了,谁来帮帮我????????????????????????? ●●●●原來得分這麼簡單●JSP基礎問題●●● 一个页面转换的问题 简单的javascript语句 c:forEach如何分页 请问:servlet.jar源码包(servlet2.3,jsp1.2)在哪里下载?本人想用于调试 方法的参数问题讨论 我想从取出部署路径,用什么方法? struts插‘中文数据’到SQLSERVER中遇到的问题!
具体写法请google,配置文件贴下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>com.easyjf.web.CharsetFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter> <filter-mapping>
<filter-name>CharsetFilter</filter-name>
<servlet-name>*.jsp</servlet-name>
</filter-mapping>
</web-app>
今天是***
我想拦截,然后把***替换成对应的,然后再返回
chain.doFilter(request, new MyHttpServletResponseWrapper(response));这个MyHttpServletResponseWrapper extends HttpServletResponseWrapper
并覆盖getWriter方法,返回一个你自己的Writer,这样就可以方便的过滤了。
并覆盖getWriter方法,返回一个你自己的Writer,这样就可以方便的过滤了。
怎么样得到返回的数据
http://www.1-100.org/JSP/12975.htm String html = responseWrapper.toString();得到页面结果字符串,恐怕是要用正则解析此字符串替换成所需要的
文本的再笨也可以写,根据请求,去读,然后处理,返回
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;public class Wrapper extends HttpServletResponseWrapper { public static final int OT_NONE = 0, OT_WRITER = 1, OT_STREAM = 2; private int outputType = OT_NONE; private ServletOutputStream output = null;
private PrintWriter writer = null;
private ByteArrayOutputStream buffer = null; public Wrapper(HttpServletResponse resp) throws IOException {
super(resp);
buffer = new ByteArrayOutputStream();
} public PrintWriter getWriter() throws IOException {
if(outputType==OT_STREAM)
throw new IllegalStateException();
else if(outputType==OT_WRITER)
return writer;
else {
outputType = OT_WRITER;
writer = new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));
return writer;
}
} public ServletOutputStream getOutputStream() throws IOException {
if(outputType==OT_WRITER)
throw new IllegalStateException();
else if(outputType==OT_STREAM)
return output;
else {
outputType = OT_STREAM;
output = new WrappedOutputStream(buffer);
return output;
}
} public void flushBuffer() throws IOException {
if(outputType==OT_WRITER)
writer.flush();
if(outputType==OT_STREAM)
output.flush();
} public void reset() {
outputType = OT_NONE;
buffer.reset();
} public byte[] getResponseData() throws IOException {
flushBuffer();
return buffer.toByteArray();
} class WrappedOutputStream extends ServletOutputStream { private ByteArrayOutputStream buffer; public WrappedOutputStream(ByteArrayOutputStream buffer) {
this.buffer = buffer;
} public void write(int b) throws IOException {
buffer.write(b);
} public byte[] toByteArray() {
return buffer.toByteArray();
}
}}然后编写Filter,这里给的例子是用GZip压缩Response:package example.chapter7;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;public class GZipFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException {}
public void destroy() {} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse resp = (HttpServletResponse)response;
Wrapper wrapper = new Wrapper(resp);
chain.doFilter(request, wrapper);
byte[] gzipData = gzip(wrapper.getResponseData());
resp.addHeader("Content-Encoding", "gzip");
resp.setContentLength(gzipData.length);
ServletOutputStream output = response.getOutputStream();
output.write(gzipData);
output.flush();
} private byte[] gzip(byte[] data) {
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
GZIPOutputStream output = null;
try {
output = new GZIPOutputStream(byteOutput);
output.write(data);
}
catch (IOException e) {}
finally {
if(output!=null) {
try {
output.close();
}
catch (IOException e) {}
}
}
return byteOutput.toByteArray();
}
}