这是异常
15:42:12,297 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to javax.servlet.http.HttpServletRequest
at com.sunnysoft.sehrs.common.filter.EncodingFilter.doFilter(EncodingFilter.java:26)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
这是filterpackage com.sunnysoft.sehrs.common.filter;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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.sunnysoft.sehrs.common.Constants;public class EncodingFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// System.out.println("start encoding...");
HttpServletRequest request = (HttpServletRequest) arg0;//这里是异常所说的第26行
HttpServletResponse response = (HttpServletResponse) arg1;
String currentURL = request.getRequestURI();

String targetURL = currentURL.substring(currentURL.indexOf("/", 1),
currentURL.length());

if (!"/".equals(targetURL) && !"/login.do".equals(targetURL)&& !"/user.do".equals(targetURL)
&& !"/SEHRS/common/jsp/sehrs_login.jsp".equals(targetURL)) { if (request.getSession().getAttribute(Constants.LOGIN_USER) == null) {
response
.sendRedirect("/SEHRS/SEHRS/common/jsp/sehrs_login.jsp");
return;
} } ((HttpServletRequest) arg0).setCharacterEncoding("GBK");
((HttpServletResponse) arg1).setCharacterEncoding("GBK");
// System.out.println("end encoding...");
arg2.doFilter(arg0, arg1);
} public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub }}
说个实话,这个异常来的有点莫名其妙,我都不知道这是怎么来的

解决方案 »

  1.   

    java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to javax.servlet.http.HttpServletRequest
    估计是类型转换问题吧,多改几次看下
      

  2.   

    早试过了,重新启动JBOSS 重新发布,还有重新安装JBOSS 都不行
      

  3.   

    不是类型转换的问题,昨天都能够运行,还有filter配置也是正确的
      

  4.   

    servlet-api (.jar) in the wrong location?
      

  5.   

    本项目下没有servlet-api (.jar)
      

  6.   

    刚刚试了一下,在tomcat下能正常运行
      

  7.   

    我已经加分了, 现在发现这个问题,进入filter 的
    public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) 
    时,
    arg0 类型变为RequestFacade
    arg1 类型变为 ResponseFacade
    arg2 类型变为 ApplicationFilterChain
    所以才有转换异常出现,有没有解决方法?
      

  8.   

    经过测试Tamcat5.5、Tamcat6.0、jboss4.0均未出现这样的情况
    建议不要将其转换因为RequestFacade它既实现了HttpServletRequest也实现了ServletRequest
    你直接用arg0不就OK了!想不通你为什么要去转换一下!!
      

  9.   

    是不是有什么兼容性问题,重新找个其他版本Jboss部署看看
      

  10.   

    public void doFilter(ServletRequest arg0, ServletResponse arg1,
    FilterChain arg2) throws IOException, ServletException { 
    直接用HttpServletRequest 和HttpServletResponse 不行么?
      

  11.   

    这是filter定义的,不是我写的哈
      

  12.   

    //该问题是之前加载过一个struts2.01的版本,而现在用的是2.1的版本,可能jboss有点缓存造成下面的错误,解决办法是把原来部署的项目删掉再部署。   
    Servlet.service() for servlet jsp threw exception   
    Getting java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to javax.servlet.http.HttpServletRequest
      

  13.   

    我也发生过类似的错误,不过不是服务级别的,错误的原因是,页面是有上传文件功能的,但是form标签少加了enctype="multipart/form-data",所以导致错误,希望能给楼主灵感
      

  14.   

    哎,我也出现了这样的问题,不过用浏览器上传文件是没有问题,使用Android上传(也是通过发送一个post请求,附加了相关文件数据)就有问题了。。
      

  15.   

    哈哈,Tomcat 之中,我找到了一个解决办法:用HttpServletRequestWrapper  将request  封装起来