Weblogic下Servlet异常java.lang.IllegalStateException
程序在tomcat环境下运行正常,但到weblogic下报以下错误:
Servlet failed with Exception java.lang.IllegalStateException: Attempt to change ContentType after calling getWriter() (cannot change charset from 'ISO-8859-1' to 'UTF-8')
经过网上到处搜索,问题主要是在weblogic本身
我们通过在web.xml中加一个过滤器来解决此问题
<filter>
<filter-name>ContentTypePatchFilter</filter-name>
<filter-class>com.fit.ContentTypePatchFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ContentTypePatchFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
ContentTypePatchFilter.java
package com.fit;
import java.io.IOException;
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 ContentTypePatchFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException {
}
public void destroy(){
}
public void doFilter(ServletRequest servletRequest,ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) servletResponse;
NotUpsettingHttpServletResponse myResponse = new NotUpsettingHttpServletResponse(res);
filterChain.doFilter(servletRequest,myResponse);
}
}
NotUpsettingHttpServletResponse.java
package com.fit;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class NotUpsettingHttpServletResponse extends HttpServletResponseWrapper {
private boolean gotWriter;
private boolean gotOutputStream;
public NotUpsettingHttpServletResponse(HttpServletResponse httpServletResponse) {
super(httpServletResponse);
}
public void setContentType(String contentType) {
if(isCommitted()||gotWriter||gotOutputStream){
}else{
super.setContentType(contentType);
}
}
public PrintWriter getWriter() throws IOException {
gotWriter = true;
return super.getWriter();
}
public ServletOutputStream getOutputStream() throws IOException {
gotOutputStream = true;
return super.getOutputStream();
}
}