读书人

有个HttpServletRequest有关问题

发布时间: 2012-01-14 20:02:35 作者: rapoo

有个HttpServletRequest问题?
这是异常
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)


这是filter

package 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

}

}


说个实话,这个异常来的有点莫名其妙,我都不知道这是怎么来的

[解决办法]
那里代码强转是没问题的。重新部署再试试
[解决办法]
java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to javax.servlet.http.HttpServletRequest


估计是类型转换问题吧,多改几次看下
[解决办法]

探讨
这是异常
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)


这是filter

package 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

}

}


说个实话,这个异常来的有点莫名其妙,我都不知道这是怎么来的


[解决办法]
servlet-api (.jar) in the wrong location?
[解决办法]
经过测试Tamcat5.5、Tamcat6.0、jboss4.0均未出现这样的情况
建议不要将其转换因为RequestFacade它既实现了HttpServletRequest也实现了ServletRequest
你直接用arg0不就OK了!想不通你为什么要去转换一下!!
[解决办法]
是不是有什么兼容性问题,重新找个其他版本Jboss部署看看
[解决办法]
探讨
我已经加分了, 现在发现这个问题,进入filter 的
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
时,
arg0 类型变为RequestFacade
arg1 类型变为 ResponseFacade
arg2 类型变为 ApplicationFilterChain
所以才有转换异常出现,有没有解决方法?


[解决办法]
探讨
引用:
java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to javax.servlet.http.HttpServletRequest


估计是类型转换问题吧,多改几次看下

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

读书人网 >J2EE开发

热点推荐