各位高手,
我写了一个filter来过滤网页中的某些文字,但总是报错,
package com.filter;import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;public class MyFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
PrintWriter out=response.getWriter(); PageResponseWrapper wrapper=new PageResponseWrapper((HttpServletResponse)response); chain.doFilter(request,wrapper); String resStr=wrapper.toString(); String newStr=""; resStr=resStr.replaceAll("xxxx", "yyyyyyyyyyy");
resStr=resStr.replaceAll("zzzz", "yyyyyyyyyyy");
newStr=resStr; out.println(newStr);
System.out.print("******************************");
}
public void init(FilterConfig config) throws ServletException { } public void destroy() {}}package com.filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;public class PageResponseWrapper extends HttpServletResponseWrapper { private CharArrayWriter output; public String toString(){ return output.toString(); } public PageResponseWrapper(HttpServletResponse response){ super(response); output=new CharArrayWriter(); } public PrintWriter getWriter(){ return new PrintWriter(output); }
}
报错:
java.net.ProtocolException: Didn't meet stated Content-Length, wrote: '13779' bytes instead of stated: '7512' bytes..
java.net.ProtocolException: Didn't meet stated Content-Length, wrote: '13779' by
tes instead of stated: '7512' bytes.
at weblogic.servlet.internal.ServletOutputStreamImpl.ensureContentLength
(ServletOutputStreamImpl.java:422)
at weblogic.servlet.internal.ServletResponseImpl.ensureContentLength(Ser
vletResponseImpl.java:1416)
at weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImp
l.java:1459)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.j
ava:1415)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
Truncated. see log file for complete stacktrace
>java.lang.StringIndexOutOfBoundsException: String index out of range: -52
at java.lang.String.substring(String.java:1938)
at weblogic.servlet.internal.ChunkOutputWrapper.print(ChunkOutputWrapper
.java:158)
at weblogic.servlet.internal.ChunkWriter.write(ChunkWriter.java:51)
at java.io.PrintWriter.newLine(PrintWriter.java:436)
at java.io.PrintWriter.println(PrintWriter.java:585)
Truncated. see log file for complete stacktrace
我写了一个filter来过滤网页中的某些文字,但总是报错,
package com.filter;import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;public class MyFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
PrintWriter out=response.getWriter(); PageResponseWrapper wrapper=new PageResponseWrapper((HttpServletResponse)response); chain.doFilter(request,wrapper); String resStr=wrapper.toString(); String newStr=""; resStr=resStr.replaceAll("xxxx", "yyyyyyyyyyy");
resStr=resStr.replaceAll("zzzz", "yyyyyyyyyyy");
newStr=resStr; out.println(newStr);
System.out.print("******************************");
}
public void init(FilterConfig config) throws ServletException { } public void destroy() {}}package com.filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;public class PageResponseWrapper extends HttpServletResponseWrapper { private CharArrayWriter output; public String toString(){ return output.toString(); } public PageResponseWrapper(HttpServletResponse response){ super(response); output=new CharArrayWriter(); } public PrintWriter getWriter(){ return new PrintWriter(output); }
}
报错:
java.net.ProtocolException: Didn't meet stated Content-Length, wrote: '13779' bytes instead of stated: '7512' bytes..
java.net.ProtocolException: Didn't meet stated Content-Length, wrote: '13779' by
tes instead of stated: '7512' bytes.
at weblogic.servlet.internal.ServletOutputStreamImpl.ensureContentLength
(ServletOutputStreamImpl.java:422)
at weblogic.servlet.internal.ServletResponseImpl.ensureContentLength(Ser
vletResponseImpl.java:1416)
at weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImp
l.java:1459)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.j
ava:1415)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
Truncated. see log file for complete stacktrace
>java.lang.StringIndexOutOfBoundsException: String index out of range: -52
at java.lang.String.substring(String.java:1938)
at weblogic.servlet.internal.ChunkOutputWrapper.print(ChunkOutputWrapper
.java:158)
at weblogic.servlet.internal.ChunkWriter.write(ChunkWriter.java:51)
at java.io.PrintWriter.newLine(PrintWriter.java:436)
at java.io.PrintWriter.println(PrintWriter.java:585)
Truncated. see log file for complete stacktrace
看你代码好像没发现。
再仔细查查吧。
我们过滤某些字符放到数据库中了。
就是可以动态添加要过滤的汉字。
没试过其他服务器,我用的是ORACLE WEBLOGIC 1OgR3,难道它有问题?
<filter-name>myfilter</filter-name>
<filter-class>com.filter.MyFilter</filter-class>
</filter><filter-mapping> <filter-name>myfilter</filter-name> <servlet-name>*</servlet-name> </filter-mapping>
<filter>
<filter-name>RewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>RewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
resStr=resStr.replaceAll("zzzz", "yyyyyyyyyyy");
newStr=resStr; out.println(newStr);
可能你传进来的字符串里没有"xxxx", 应该先个判断吧
if(resStr.indexOf("xxxx") > 0){
resStr=resStr.replaceAll("xxxx", "yyyyyyyyyyy");
resStr=resStr.replaceAll("zzzz", "yyyyyyyyyyy");
newStr=resStr; out.println(newStr);
}