weblogic 8
jdk 1.4
我用filter实现一个页面缓存;发布后控制台却报出如下错误:<2010-1-28 下午02时49分07秒 GMT> <Error> <HTTP> <BEA-101020> <[ServletContext(id=8123587,name=DefaultWebApp,context-path=)] Servlet failed with Exception
java.lang.IllegalStateException: Attempt to change ContentType after calling getWriter() (cannot change charset from 'UTF8' to 'ISO-8859-1')
at weblogic.servlet.internal.ServletResponseImpl.setEncoding(ServletResponseImpl.java:881)
at weblogic.servlet.internal.ServletResponseImpl.setHeaderInternal(ServletResponseImpl.java:713)
at weblogic.servlet.internal.ServletResponseImpl.setHeader(ServletResponseImpl.java:672)
at weblogic.servlet.internal.ServletResponseImpl.setContentType(ServletResponseImpl.java:273)
at javax.servlet.ServletResponseWrapper.setContentType(ServletResponseWrapper.java:164)
at javax.servlet.ServletResponseWrapper.setContentType(ServletResponseWrapper.java:164)
at com.junjing.filter.NotUpsettingHttpServletResponse.setContentType(NotUpsettingHttpServletResponse.java:24)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:385)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:526)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at com.junjing.filter.ContentTypePatchFilter.doFilter(ContentTypePatchFilter.java:25)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at com.junjing.filter.FileCaptureFilter.doFilter(FileCaptureFilter.java:36)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6987)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)这是为什么呢?请求大侠帮忙!
jdk 1.4
我用filter实现一个页面缓存;发布后控制台却报出如下错误:<2010-1-28 下午02时49分07秒 GMT> <Error> <HTTP> <BEA-101020> <[ServletContext(id=8123587,name=DefaultWebApp,context-path=)] Servlet failed with Exception
java.lang.IllegalStateException: Attempt to change ContentType after calling getWriter() (cannot change charset from 'UTF8' to 'ISO-8859-1')
at weblogic.servlet.internal.ServletResponseImpl.setEncoding(ServletResponseImpl.java:881)
at weblogic.servlet.internal.ServletResponseImpl.setHeaderInternal(ServletResponseImpl.java:713)
at weblogic.servlet.internal.ServletResponseImpl.setHeader(ServletResponseImpl.java:672)
at weblogic.servlet.internal.ServletResponseImpl.setContentType(ServletResponseImpl.java:273)
at javax.servlet.ServletResponseWrapper.setContentType(ServletResponseWrapper.java:164)
at javax.servlet.ServletResponseWrapper.setContentType(ServletResponseWrapper.java:164)
at com.junjing.filter.NotUpsettingHttpServletResponse.setContentType(NotUpsettingHttpServletResponse.java:24)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:385)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:526)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at com.junjing.filter.ContentTypePatchFilter.doFilter(ContentTypePatchFilter.java:25)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at com.junjing.filter.FileCaptureFilter.doFilter(FileCaptureFilter.java:36)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6987)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3892)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2766)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)这是为什么呢?请求大侠帮忙!
import java.io.PrintWriter;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
public class FileCaptureFilter implements Filter { private String protDirPath;
private FileCaptureResponseWrapper responseWrapper;
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println(789);
HttpServletResponse resp = (HttpServletResponse)response;
resp.setContentType("text/html; charset=utf-8");
String fileName = this.protDirPath + "/forum/lastest.html";
HttpServletResponse res = (HttpServletResponse)response;
PrintWriter out = res.getWriter();
String kobe = request.getParameter("kobe");
if (null == kobe) {
responseWrapper = new FileCaptureResponseWrapper((HttpServletResponse)response);
chain.doFilter(request, responseWrapper);
}
responseWrapper.writeFile(fileName);
responseWrapper.writeResponse( out );
} public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
protDirPath = filterConfig.getServletContext().getRealPath("/"); }
}package com.junjing.filter;import java.io.CharArrayWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;public class FileCaptureResponseWrapper extends HttpServletResponseWrapper { private CharArrayWriter output;
public String toString() {
return output.toString();
}
public FileCaptureResponseWrapper(HttpServletResponse response) {
super(response);
output = new CharArrayWriter();
}
public PrintWriter getWriter() throws IOException{
return new PrintWriter(output);
} public void writeFile(String fileName) throws IOException {
FileWriter fw = new FileWriter(fileName);
fw.write(output.toCharArray());
fw.close(); }
public void writeResponse(PrintWriter out) {
out.print(output.toCharArray());
}
}
<filter-name>CaptureFilter</filter-name>
<filter-class>com.junjing.filter.FileCaptureFilter</filter-class>
</filter> <filter-mapping>
<filter-name>CaptureFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
跪求,好心大侠!