Weblogic下Servlet异常java.lang.IllegalStateException

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();
    }
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值