使用过滤器处理404错误获得指定资源。
来源:互联网 发布:淘宝店铺模板一键安装 编辑:程序博客网 时间:2024/06/05 12:03
在项目中我遇到读取资源问题,资源路径没有规则,还有很多虚拟路径处理。我使用了Filter过滤404错误方法处理这些资源。在实现过程中统一了资源处理方法,并且容易同spring的整合。该实现在Tomcat 9.0上测试通过。
实现需要注意二点:
- 使用HttpServletResponseWrapper包装response
- 覆盖sendError方法,遇到404错误不能触发错,如触发错误response就被托管,托管后就不能输出数据。
下面是 Error404ResponseWrapper 具体实现:
package com.filter;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;import java.io.IOException;/** * Created by TYK on 2017/9/23. */public class Error404ResponseWrapper extends HttpServletResponseWrapper { private int status = SC_OK; public Error404ResponseWrapper(Error404Filter error404Filter, HttpServletResponse response) { super(response); } @Override public void sendError(int sc) throws IOException { this.status = sc; if (isFound()) { super.sendError(sc); } else { super.setStatus(SC_OK); } } @Override public void sendError(int sc, String msg) throws IOException { this.status = sc; if (isFound()) { super.sendError(sc, msg); } else { super.setStatus(SC_OK); } } public void setStatus(int status) { this.status = status; super.setStatus(status); } @Override public void reset() { this.status = SC_OK; super.reset(); } public boolean isFound() { return status != SC_NOT_FOUND; }}
注意sendError处理,上面代码解决了核心两个问题。接下来完成过滤就可。
下面是 Error404Filter 具体实现:
package com.filter;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * Created by TYK on 2017/9/24. */public class Error404Filter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; Error404ResponseWrapper responseWrapper = new Error404ResponseWrapper(this, response); chain.doFilter(request, responseWrapper); if (responseWrapper.isFound()) { return; } response.sendRedirect("404.html"); } public void init(FilterConfig config) throws ServletException { }}
web.xml配置
<filter> <filter-name>Error404Filter</filter-name> <filter-class>com.filter.Error404Filter</filter-class> </filter> <!--404--> <filter-mapping> <filter-name>Error404Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
注意:在web.xml中把该过滤器放在所有过滤器后。
原文地址
阅读全文
0 0
- 使用过滤器处理404错误获得指定资源。
- 使用过滤器,处理404错误
- 锁表处理 SQL 错误: ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效
- TextRank 处理短文本获得指定关键字
- 过滤器的使用-处理中文
- cocos2d-x 获得系统语言、指定资源目录
- servlet使用声明式异常处理指定错误跳转页面,ie下无法正常显示
- 中文字符的处理,过滤器的使用
- 使用过滤器处理Session失效的问题
- 使用过滤器、struts2处理乱码简析
- 使用 Filter 过滤器 处理中文 乱码问题
- 使用过滤器做页面静态化处理
- Struts2 特定及使用过滤器处理请求
- SpringMVC使用过滤器处理登陆跳转问题
- web.config错误处理页面指定
- ASP.Net项目处理指定错误页
- 关于Android国际化的使用资源指定
- Flash AS3.0 Socket资源(6)——处理使用Sockets时候引发的错误.
- javaEE全套视频
- 笔记筑:Algorithm Part
- ORACLE监听配置以及使用plsql连接oracle
- java8 笔记
- MAC 下安装opencv3
- 使用过滤器处理404错误获得指定资源。
- Java EE开发第十章:tomcat的搭建以及web项目的创建
- 解开连线
- 表单标签
- 数据库 -- 关系数据库
- 读取配置信息方式
- HTML-课堂笔记
- 日志(二)从Log4j的配置文件说起
- python实现FTP服务器