Java EE 之 过滤器入门学习与总结(2)

简介: 今天就对使用Filter技术能做什么来个小小的归纳。也为了方便今后的复习。控制浏览器不进行对jsp页面的缓存//在doFilter方法中添加这样的代码HttpServletRequest request = (HttpServletRequest )req;Ht...

今天就对使用Filter技术能做什么来个小小的归纳。也为了方便今后的复习。


控制浏览器不进行对jsp页面的缓存


//在doFilter方法中添加这样的代码
HttpServletRequest request = (HttpServletRequest )req;
HttpServletResponse response = (HttpServletResponse )resp;

response.setDateHeader("Expires",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");


//放行
chain.doFilter(request,response);

然后记得在web.xml文件中进行声明,最重要的是在url-pattern中设置为*.jsp即可。其余的就不在过多的讲述。
这样,就可以实现不缓存jsp页面的方法了。


Filter 映射的细节


在filter-mapping中配置dispatcher子标签可以控制过滤的范围和方向。有如下四个级别(或者选择性):

  • REQUEST:默认值;对以请求方式访问的有效
  • FORWARD:对转发方式的过滤有效
  • INCLUDE:对include方式的过滤有效
  • ERROR“对error方式的过滤有效
    需要注意的是:filter-mapping可以对一个filter配置多个;
    dispatcher标签也可以配置多个,而且同时有效!
    使用的时候需要考虑清楚对哪一种方式进行过滤。这样才会有针对性的对网站起到优化的作用!

使用过滤器增强request的转义的功能


实现的步骤:

  • 自定义一个实现了HttpServletRequestWrapper类的类
  • 重写里面的getParameter方法,完成转义的效果
  • 在过滤器的doFilter方法中进行相关字符串的转移效果
  • 最后调用chain.doFilter方法进行放行即可
    具体的转义功能实现代码如下:
//该方法来自Tomcat\apache-tomcat-8.0.24\webapps\examples\WEB-INF\classes\util\HTMLFilter.java.
//我们只需要把要进行转义的字符串调用此方法进行转义即可
public static String filter(String message) {

        if (message == null)
            return (null);

        char content[] = new char[message.length()];
        message.getChars(0, message.length(), content, 0);
        StringBuilder result = new StringBuilder(content.length + 50);
        for (int i = 0; i < content.length; i++) {
            switch (content[i]) {
            case '<':
                result.append("&lt;");
                break;
            case '>':
                result.append("&gt;");
                break;
            case '&':
                result.append("&amp;");
                break;
            case '"':
                result.append("&quot;");
                break;
            default:
                result.append(content[i]);
            }
        }
        return (result.toString());

    }

未完 ,待续······

目录
相关文章
|
21小时前
|
存储 算法 搜索推荐
滚雪球学Java(27):从零开始学习数组:定义和初始化
【5月更文挑战第2天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
7 3
|
2天前
|
SQL Java 关系型数据库
零基础轻松入门Java数据库连接(JDBC)
零基础轻松入门Java数据库连接(JDBC)
8 0
|
2天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
7 0
|
2天前
|
缓存 Java 数据库
Java并发编程学习11-任务执行演示
【5月更文挑战第4天】本篇将结合任务执行和 Executor 框架的基础知识,演示一些不同版本的任务执行Demo,并且每个版本都实现了不同程度的并发性。
20 4
Java并发编程学习11-任务执行演示
|
2天前
|
Java 程序员 应用服务中间件
JavaWeb之过滤器(Filter)与监听器(Listener)
本文介绍了JavaWeb中的过滤器(Filter)和监听器(Listener)概念及其使用。过滤器主要用于拦截和处理Web资源请求,如进行编码设置、权限验证等,它在Servlet之前和之后执行。监听器则监听域对象(如ServletRequest、HttpSession、ServletContext)状态变化,分为创建/销毁监听和属性变化监听。监听器在Web.xml中注册后会在相应事件发生时自动执行,例如用于统计网站访问人数或初始化配置。
|
4天前
|
数据库连接
java+ssm+vue代码视频学习讲解
java+ssm+vue代码视频学习讲解
6 0
|
4天前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
11 0
|
4天前
|
Java
Java一分钟之-类与对象:面向对象编程入门
【5月更文挑战第8天】本文为Java面向对象编程的入门指南,介绍了类与对象的基础概念、常见问题及规避策略。文章通过代码示例展示了如何定义类,包括访问修饰符的适当使用、构造器的设计以及方法的封装。同时,讨论了对象创建与使用时可能遇到的内存泄漏、空指针异常和数据不一致等问题,并提供了相应的解决建议。学习OOP需注重理论与实践相结合,不断编写和优化代码。
26 1
|
5天前
|
Java 编译器 对象存储
java一分钟之Java入门:认识JDK与JVM
【5月更文挑战第7天】本文介绍了Java编程的基础——JDK和JVM。JDK是包含编译器、运行时环境、类库等的开发工具包,而JVM是Java平台的核心,负责执行字节码并实现跨平台运行。常见问题包括版本不匹配、环境变量配置错误、内存溢出和线程死锁。解决办法包括选择合适JDK版本、正确配置环境变量、调整JVM内存参数和避免线程死锁。通过代码示例展示了JVM内存管理和基本Java程序结构,帮助初学者更好地理解JDK和JVM在Java编程中的作用。
18 0
|
12天前
|
设计模式 算法 安全
Java多线程编程实战:从入门到精通
【4月更文挑战第30天】本文介绍了Java多线程编程的基础,包括线程概念、创建线程(继承`Thread`或实现`Runnable`)、线程生命周期。还讨论了线程同步与锁(同步代码块、`ReentrantLock`)、线程间通信(等待/通知、并发集合)以及实战技巧,如使用线程池、线程安全设计模式和避免死锁。性能优化方面,建议减少锁粒度和使用非阻塞算法。理解这些概念和技术对于编写高效、可靠的多线程程序至关重要。