filter 过滤出现 getOutputStream() has already been called for this response
number.jsp
web.xml
ChangeFilter.java
运行后 出现
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:636)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:205)
at my.ChangeFilter.doFilter(ChangeFilter.java:24)
而且没有将那个网页的 google替换掉
我怀疑是 <c:import url="http://en.wikipedia.org/wiki/Google"></c:import>
没有经过过滤
该如何修改是好
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="stylesheet"
href="/why/css/my.css"
type="text/css"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="red"> set </div>
<c:set var="session" value="i am sseison" scope="session"></c:set>
<c:set var="application" value="i am application" scope="application"></c:set>
session${session}<br/>
context${applicationScope.application}
<c:import url="http://en.wikipedia.org/wiki/Google"></c:import>
</body>
</html>web.xml
<filter-name>changeFilter</filter-name>
<filter-class>my.ChangeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>changeFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping><!--changeFilter2 监视 all --><jsp-config>
<taglib>ChangeFilter.java
package my;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
public class ChangeFilter implements Filter{
ResponseWrapper response;
String goal;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
response=new ResponseWrapper((HttpServletResponse )arg1);
arg2.doFilter(arg0, response );
change(arg0);
PrintWriter out=arg1.getWriter();
out.write(goal);
out.close();
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
private void change(ServletRequest arg0){
goal=(String)arg0.getServletContext().getInitParameter("newName");
if(goal!=null){
goal=response.toString().replaceAll("google", goal);
}else{
goal=response.toString();
}
}
}
运行后 出现
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:636)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:205)
at my.ChangeFilter.doFilter(ChangeFilter.java:24)
而且没有将那个网页的 google替换掉
我怀疑是 <c:import url="http://en.wikipedia.org/wiki/Google"></c:import>
没有经过过滤
该如何修改是好

...全文
相关推荐
Cannot forward after response has been committed
NULL 博文链接:https://m635674608.iteye.com/blog/1510545
java filter打印请求返回参数
java filter打印请求返回参数
Socket通信,封包处理, Filter过滤器处理
Socket通信,封包处理, Filter过滤器处理
详解在Spring MVC或Spring Boot中使用Filter打印请求参数问题
主要介绍了详解在Spring MVC或Spring Boot中使用Filter打印请求参数问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java中五种常用的过滤器
平时在做开发是经常用到的五种过滤器,很有使用价值!


Web 开发
