filter 过滤出现 getOutputStream() has already been called for this response

funnyone funnyone 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
number.jsp

<%@ 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>

没有经过过滤

该如何修改是好
...全文
评论 3
收藏 已收藏
分享
返回顶部
funnyone
Web 开发 81,108 成员 341,721 内容