请教过滤器问题

paul2002 2009-09-04 10:33:17
各位高手,
我写了一个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
...全文
93 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
吐司vivi 2009-09-04
  • 打赏
  • 举报
回复
在网上搜索一下,发现这个异常有几种解释或解决方法,请参考

第一种,weblogic自身的bug。在weblogic6的时候有这个问题,通过打补丁可以解决。wls7的时候不存在,在wls8.1sp2、sp3都有这个问题。建议是升级到sp5可以解决,或者使用升级bea关于这个问题单独的补丁包(购买服务后,将该问题反馈到bea support后,bea会将改补丁包发回)。

第二种,使用smartupload会和wls有冲突。有说法smartupload部署在wls上,上传没有问题,下载需要手动修改一个类文件,覆盖后才能解决。实际测试结果验证了使用smartupload下载会有冲突,但没有实验网上所说的修改部分,故未贴出代码。建议使用标准的流方式下载。
hjay0715 2009-09-04
  • 打赏
  • 举报
回复
resStr=resStr.replaceAll("xxxx", "yyyyyyyyyyy");
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);
}
paul2002 2009-09-04
  • 打赏
  • 举报
回复
web.xml

<filter>
<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>
bea_java 2009-09-04
  • 打赏
  • 举报
回复
服务器类存满了吧。。你哪个文件如果太大会有些问题的。
paul2002 2009-09-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 vivi8233 的回复:]
是不是weblogic服务的错误,换个服务看看
[/Quote]

没试过其他服务器,我用的是ORACLE WEBLOGIC 1OgR3,难道它有问题?
吐司vivi 2009-09-04
  • 打赏
  • 举报
回复
是不是weblogic服务的错误,换个服务看看
whq2004 2009-09-04
  • 打赏
  • 举报
回复
帮顶
paul2002 2009-09-04
  • 打赏
  • 举报
回复
我在out.println(newStr); 前加response.setContentLength(newStr.length())还是报错,两个错
love175cm 2009-09-04
  • 打赏
  • 举报
回复
下标越界...但是不知道错在哪?关注
lovehope 2009-09-04
  • 打赏
  • 举报
回复
程序貌似没什么问题,很有可能是你要过滤的那个字符串太长了,导致下标越界。
sunhuaiwei 2009-09-04
  • 打赏
  • 举报
回复
up
xiechunmei13 2009-09-04
  • 打赏
  • 举报
回复
java.lang.StringIndexOutOfBoundsException: String index out of range: -52

这个错误是下标越界了。
看你代码好像没发现。
再仔细查查吧。
我们过滤某些字符放到数据库中了。
就是可以动态添加要过滤的汉字。
paul2002 2009-09-04
  • 打赏
  • 举报
回复
另外,再问一下sitemesh是否可实现同样功能?怎么做啊

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧