这是个很常见的问题,度娘和谷歌动手就能查到,可是今天还是遇到了,因为一直做业务研发,没有直接关注这些细节。
该文章来自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的操作,就等于执行了两遍转向,因此会报错!
问题简单,也需要留意,再简单的问题也是问题,成功在细节和那些别人以为是傻冒的问题中。
请您到ITEYE看我的原创:http://cuisuqiang.iteye.com
或支持我的个人博客,地址:http://www.javacui.com
相关推荐
我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理机制,我们在业务层会跑出我们遇到业务处理异常 ,然后交由...
重定向、Redirect 02:11 Aspnet Mvc教程 12.URLRouting简介 02:58 Aspnet Mvc教程 14. Filter 05:11 Aspnet Mvc教程 13.Helper初体验 04:53 Aspnet Mvc教程 15.QueryString传值 06:18 Aspnet Mvc教程 16.表单...
可以使用“Like”关键字,且和SQL语句用法一致,可以任意匹配,如“Fcode like 1%”,但要注意,在字符串前加“%”时,其后面一定也要加“%”,否则会报错,也可以一个“_”,此处有两点不明白:一是为什么会报错,...
替换敏感词的留言板加filter 和不加filter两种方案
wordpress用户在注册完成后,如何重定向到我们指定的注册成功页面呢,方法很简单,将如下代码复制到你主题的functions.php文件中即可,这个在wordpress 作为cms使用时是非常有用的: function __my_registration_...
实现网站伪静态301重定向,urlrewritefilter-4.0.3.jar
叙述了MATLAB中几种相关函数的用法,对filter conv 和impz函数进行了介绍
除了添加两个JsFilter.java和GetHttpServletRequestWrapper.java之外,需要在web.xml添加对应的配置。 <!-- 特殊字符过滤 --> <filter> <filter-name>sqlFilter</filter-name> <filter-class>weixin.idea.waiting...
解决dubbo接口自定义异常的捕捉问题,dubbo消费者可以捕捉到提供者所抛出的自定义异常。
鉴于失败的DNS查询(failed DNS query)能提供恶意网络活动的证据,以DNS查询失败的数据为切入口,提出一种轻量级的基于Counting Bloom Filter的DNS异常检测方法。该方法使用带语义特征的可逆哈希函数对被查询的域名...
SpringBoot的filter过滤器 一、过滤器的作用和概述 1.1 简述 1.2 使用场景 二、自定义过滤的两种方式 2.1 第一种方式 2.1.1 启动类增加注解@ServletComponentScan ...2.3.6被拦截后重定向的页面 2.3.7 测试
NULL 博文链接:https://yxc-gdut.iteye.com/blog/1409792
主要介绍了vue中filters 传入两个参数 / 使用两个filters的实现方法,文中给大家提到了Vue 中的 filter 带多参的使用方法,需要的朋友可以参考下
解析 JSON 有效负载并将请求重定向到不同服务器的高性能 Web 服务器。 应用程序接口 可以使用非常简单的 API 在您的代码中使用 JSON 过滤器。 首先本地安装: 首先运行npm install以获取所有依赖项: $ npm ...
1,将web-return-0.0.1-SNAPSHOT.jar加载到项目里。 2,修改web.xml,加入如下filter配置: <filter> <filter-name>returnFilter</filter-name> <filter-class>...
解决Tomcat跨域的两个jar包,java-property-utils-1.9.jar和cors-filter-1.7.jar
DirectShow Filter 最简单的示例+两个 PIN 的实现(非 WinCE,是 PC 下的) DirectShow Filter 最简单的示例+两个 PIN 的实现(非 WinCE,是 PC 下的)
使用filter函数,实现一个条件判断函数即可。 比如想过滤掉字符串数组中某个敏感词,示范代码如下: #filter out some unwanted tags def passed(item): try: return item != "techbrood" #can be more a ...
java中filter的用法(过滤器),介绍各种过滤方法
C语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC语言头文件 FILTERC...