关于Filter中的两个异常,重定向后要加Return
来源:互联网 发布:华泰证券软件下载 编辑:程序博客网 时间:2024/06/06 02:56
原地址:http://cuisuqiang.iteye.com/blog/1478086
关于Filter中的两个异常,重定向后要加Return
- 博客分类:
- J2EE
- Java开源
- Servlet/Jsp
filter过滤器j2eegoogleIllegalStateException
这是个很常见的问题,度娘和谷歌动手就能查到,可是今天还是遇到了,因为一直做业务研发,没有直接关注这些细节。
该文章来自ITeye,网络爬虫请自重!欢迎大家访问我的博客!
这两个异常如下:
- java.lang.IllegalStateException: Cannot forward after response has been committed
- at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:313)
- at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
- at com.servlet.MyServlet2.doGet(MyServlet2.java:22)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
- at com.filter.MyFilter.doFilter(MyFilter.java:48)
- 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:228)
- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
- at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
- at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
- at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
- at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
- at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
- at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
- at java.lang.Thread.run(Unknown Source)
- java.lang.IllegalStateException
- at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
- at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:662)
- at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:325)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
- at com.filter.MyFilter.doFilter(MyFilter.java:48)
- 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:228)
- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
- at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
- at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
- at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
- at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
- at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
- at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
- at java.lang.Thread.run(Unknown Source)
只要在重定向后加return就可以了。
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- request.setCharacterEncoding("UTF-8");
- response.setCharacterEncoding("UTF-8");
- HttpServletRequest hrequest = (HttpServletRequest)request;
- String path = hrequest.getContextPath();
- String basePath = hrequest.getScheme()+"://"+hrequest.getServerName()+":"+hrequest.getServerPort()+path+"/";
- // 获得请求的全路径
- String reUrl = hrequest.getRequestURL().toString();
- // 是否包含参数
- int index = reUrl.indexOf("?");
- String re = "";
- if(index == -1){
- re = reUrl.substring(basePath.length());
- }else{
- re = reUrl.substring(basePath.length(), index);
- }
- // 是否是请求资源
- if(!isResource(re)){
- // 是否有访问的权限
- boolean isCheck = ConnUril.checkUrl(re);
- if(!isCheck){
- request.getRequestDispatcher("/error.jsp").forward(request,response);
- // 必须加返回,否则报错
- return ;
- }
- }
- // 继续执行
- chain.doFilter(request, response);
- }
报错原因很简单,转向后再去执行关于response的操作,就等于执行了两遍转向,因此会报错!
问题简单,也需要留意,再简单的问题也是问题,成功在细节和那些别人以为是傻冒的问题中。
为防止小网站爬虫转载,请你直接访问我的博客获得更多资源:http://cuisuqiang.iteye.com/
- 关于Filter中的两个异常,重定向后要加Return
- 关于Filter中的两个异常,重定向后要加Return
- 关于Filter中的两个异常,重定向后要加Return
- Filter中的sendRedirect重定向
- 关于Linux中的重定向
- 关于Controller中的重定向做法
- javaee两个重定向
- filter重定向时报错
- Servlet中两个参数request与response中的重定向
- AsyncHttpClient 中的重定向和 setEnableRedirects 方法异常解决
- servlet中重定向后别忘了return
- 关于310重定向
- 关于PHP重定向
- 关于301重定向
- 关于重定向
- 关于输出重定向。
- 关于网站重定向
- 10016---关于重定向
- 献给不知道自己该干什么的朋友—值得一看
- POJ 1011 (DFS+剪枝)
- 字符串
- Easyui自定义validate验证
- oracle解锁
- 关于Filter中的两个异常,重定向后要加Return
- 遍历List 同时 remove 元素
- 找出数据库的所有序列
- linux 下 tomcat 自动启动
- PHP使用open-flash-chart生成点线图、柱形图、饼图
- 使用Spring的jdbcTemplate进一步简化JDBC操作
- 如何用U盘拷贝4G以上的文件?
- dell服务器安装centos 6.2 硬盘无法识别问题
- Unity3D 与 3DMax 结合开发