`
hhywangwei
  • 浏览: 6311 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

使用过滤器,处理404错误获得指定资源。

阅读更多
在项目中我遇到读取资源问题,资源路径没有规则,还有很多虚拟路径处理。我使用了Filter过滤404错误方法处理这些资源。在实现过程中统一了资源处理方法,并且容易同spring的整合。该实现在Tomcat 6.0上测试通过。

实现需要注意二点:
  • 1.使用HttpServletResponseWrapper包装response
  • 2.覆盖sendError方法,遇到404错误不能触发错,如触发错误response就被托管,托管后就不能输出数据。

下面是HttpServletResponseWrapper具体实现:
  private 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处理,上面代码解决了核心两个问题。接下来完成过滤就可。
public class Error404Filter implements Filter {
  @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
    }
    
    @Override
    public void doFilter(ServletRequest req, ServletResponse rep,FilterChain chain) throws IOException, ServletException {
        
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) rep;
        Error404ResponseWrapper responseWrapper = new Error404ResponseWrapper(this, response);
        
        chain.doFilter(request, responseWrapper);
        if(responseWrapper.isFound()){
            return ;
        }
        
        //TODO 实现读取资源
        //readResource(request,response);
        
        //资源不存在返回错误
        String uri = request.getRequestURI();
        logger.warn("This is not resource = {}",uri);
        response.sendError(HttpServletResponse.SC_NOT_FOUND,uri);
    }
}

注意:在web.xml中把该过滤器放在所有过滤器后。
分享到:
评论

相关推荐

    短信过滤器

    ===================================================================== ★ 短信过滤器 1.0 ===================================================================== 【软件介绍】 软件名称:短信...

    Spring Boot+Vue前后端分离,如何避免前端页面 404

    在传统的前后端不分的开发中,权限管理主要通过过滤器或者拦截器来进行(权限管理框架本身也是通过过滤器链来实现功能),如果用户不具备某一个角色或者某一个权限,则无法访问某一个页面。 但是在前后端分离中,...

    纵横IIS链接嗅探器 v3.6

    6. 使用该过滤器效果是十分明显的,站点访问量会提升好多。站点流量也会进入正常状态。 7. 安装方便,管理界面友好人性化 8. 不用对现有的程序、数据库、文件路径做任何的修改,也不怕嗅探文件真实路径。实施成本...

    FastCopy (Windows 平台上最快的文件复制、删除软件。 )

    1.添加“扩展过滤器”(文件大小/时间戳)。(“设置”-->“显示扩展过滤器”) 2.修正软件主界面美观时某个控件显示不正常问题,感谢网友提供相关信息。 V1.97 1.修正有时后处理操作无法播放提示音的问题。 V1.96 1....

    防盗链及流量控制(纵横IIS链接嗅探狗) v3.9 增强版

    功能介绍: 1. 集防盗链、流量控制和流媒体防盗链于一身。...11. 使用该过滤器效果是十分明显的,站点访问量会提升好多,站点流量也会进入正常状态。 12. 能随时停止防盗链功能 13. 安装方便,管理界面友好人性

    精通AngularJS part1

    47使用过滤器处理模型变换124 内置过滤器125 格式化过滤器125 数组变换过滤器125 编写自定义过滤器——分页示例131 从JavaScript代码中访问过滤器133 过滤器做什么与不做什么134 过滤器与DOM操作135 过滤器...

    Java资源包01

    jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新...

    ESM_ArcSight控制台用户指南(中文翻译版—Zephyr)_6.11.0 .pdf

    编辑资源时使用高级选择器 48 键盘快捷键 (热键) 48 为资源创建快捷方式 50 显示最近查看的资源 50 向收藏夹列表中添加资源 51 从控制台打印 51 打印资源的导航树视图 52 打印资源定义 52 打印网格视图 53 打印条件...

    FastCopy高速文件复制软件

    1.添加“扩展过滤器”(文件大小/时间戳)。(“设置”-->“显示扩展过滤器”) 2.修正软件主界面美观时某个控件显示不正常问题,感谢网友提供相关信息。 V1.97 1.修正有时后处理操作无法播放提示音的问题。 V1.96 1....

    硬盘对拷工具FastCopy

    2.移动模式中启动过滤器。 3.程序启动速度提升。 V1.98 1.添加“扩展过滤器”(文件大小/时间戳)。(“设置”-->“显示扩展过滤器”) 2.修正软件主界面美观时某个控件显示不正常问题,感谢网友提供相关信息。 V...

    FastCopy1.99大文件复制中文版

    1.添加“扩展过滤器”(文件大小/时间戳)。(“设置”-->“显示扩展过滤器”) 2.修正软件主界面美观时某个控件显示不正常问题,感谢网友提供相关信息。 V1.97 1.修正有时后处理操作无法播放提示音的问题。 V1.96 1....

    硬盘对拷工具FastCopy(经典工具)

    1.添加“扩展过滤器”(文件大小/时间戳)。(“设置”-->“显示扩展过滤器”) 2.修正软件主界面美观时某个控件显示不正常问题,感谢网友提供相关信息。 V1.97 1.修正有时后处理操作无法播放提示音的问题。 V...

    fastcopy V1.71 修正版(强大的复制粘贴增强软件)

    1.添加“扩展过滤器”(文件大小/时间戳)。(“设置”-->“显示扩展过滤器”) 2.修正软件主界面美观时某个控件显示不正常问题,感谢网友提供相关信息。 V1.97 1.修正有时后处理操作无法播放提示音的问题。 V1.96 1....

    超级好用的拷贝软件 绿色版的

    3.自动减小最大输入/输出大小(仅作用于无错误系统资源下)。 V1.72 b1 1.添加 SHA1“校验”选项; 2.外壳扩展中添加“粘贴”菜单项。 V1.71 1.原版修复了2000/98/Me下外壳扩展无效的问题; 2.修正外壳扩展汉化美观...

    用web.xml控制Web应用的行为

    Tomcat 10 5 初始化和预装载servlet与JSP页面 10 5.1 分配servlet初始化参数 10 5.2 分配JSP初始化参数 13 5.3 提供应用范围内的初始化参数 15 5.4 在服务器启动时装载servlet 15 6 声明过滤器 16...

    Spring中文帮助文档

    3.12.3. 使用过滤器自定义扫描 3.12.4. 自动检测组件的命名 3.12.5. 为自动检测的组件提供一个作用域 3.12.6. 用注解提供限定符元数据 3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 ...

    Spring API

    3.12.3. 使用过滤器自定义扫描 3.12.4. 自动检测组件的命名 3.12.5. 为自动检测的组件提供一个作用域 3.12.6. 用注解提供限定符元数据 3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 ...

    IIS6.0 IIS,互联网信息服务

    FTP目录没有设置也容易被别人攻击,一般的就是将主目录指定到逻辑盘。为了安全,要对对每个目录按不同的用户设置不同的访问权限,然后关闭一些不需要的服务,这样可以对不良人士利用IIS溢出漏洞访问到系统盘作个第一...

    免费开源的文件夹比较和同步软件 FreeFileSync 11.10 中文免费版.zip

    包括/通过过滤器排除文件。 FreeFileSync便携式和本地安装可用。 手柄上FAT/FAT32夏令时更改。 使用宏%时间%、 % DATE% 等经常性的备份。 区分大小写同步。 内置锁定:对序列化同一网络共享上运行多个作业。 ...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    ● 调试和处理错误的技术 ● 提取、创建、处理和存储XML的各种框架 ● 打包和部署ASP.NET应用程序的方法 ● 快速、逻辑地检索、更新和删除数据 本书读者对象 本书适合于有一些ASP.NET基础知识的学习者以及准备迁移...

Global site tag (gtag.js) - Google Analytics