Jsp过滤器的说明

过滤器的作用:

A,正常调用请求的资源

B,用修改后的请求信息调用请求的资源

C,修改响应请求,然后发送到客户端

D,禁止调用该资源,将请求重定向到其他的资源,或者返回一个特定的状态,或者产生替换输出

过滤器的基本概念:

拦截和修改servlet或者jsp页面的输入请求和输出请求 ,也就是可以过滤请求也可以过滤响应。

Filter类能在request到达serlvet的服务方法之前拦截HttpServletRequest对象,而在服务器方法转移控制后又能拦截HttpServletResponse对象

声明过滤器的标签

<filter>

<filter-name>ReplaceSiteNameFilter</filter-name>//过滤器的别名,为了简单起见可以设置为类名

<filter-class>coreservlets.filters.ReplaceSiteNameFilter</filter-class>//具体的哪一个过滤器

</filter>

<filter-mapping>

<filter-name>ReplaceSiteNameFilter</filter-name>

<url-pattern>/page1.jsp</url-pattern>//要过滤的页面资源

</filter-mapping>

创建过程:

a.      创建实现Filter接口的类,当然也可以继承实现Filter的子类

b.      将过滤行为放入doFilter方法中,public void doFilter(ServletRequesetrequest,ServletResponse response,FilterChain chain);其中request用来过滤请求,而response就是用来过滤响应,有两种情况必须使用它:第一,如果想完全阻止资源的访问,可以调用response.getWriter方法直接向用户发送响应,第二,如果想修改资源页面的响应。所以可以发现过滤器总是在与之相关联的servlet或jsp之前运行

c.      运行doFilter方法进行调用:调用FilterChain之前,下一个关联的过滤器会被调用,也就是说过滤器讲请求后传,如果没有,就调用servlet或jsp本身;如果有则调用之,由此可知,最后一个过滤器调用FilterChain的doFilter方法时,会调用servlet或jsp页面本身;如果没有调用chain.doFilter,相应的资源是没法得到调用的

阻止响应的简单实现

经过测试可以发现,当注释掉doFliter方法里面的chain.doFilter(req,res)后之没法打开相应的资源servlet或者jsp的,所以一个简单的阻止响应的伪代码就出来了

If(满足阻止条件){

在这里,可以重定向新的页面,res.senReddirect(string);也可以做些其他的操作

}

Else {

Chain.doFilter();

}

修改响应

注意,需要理解就是,servlet和jsp调用response.getWriter或response.getOutputStream并开始发送输出时,输出实际上并没有被立即发送到客户端,而是发送大到一个大的字符串缓冲区,所以就可以操作这个缓冲区来修改响应了

实现这个功能的类是HttpServletResponseWrapper(implements HttpServletRepsonse),实际应用的时候,可以自己创建一个类,继承这个响应包装类;

可以将这个包装类直接传递给Filter,调用chain.doFilter之后,可以用响应包装类的getWriter或者getOutputStream()类来获得原始资源的输出,也就是得到没有改变的响应

jsp过滤器一点小结相关推荐

  1. jsp过滤器示例_Java 8过滤器,地图,收集和流示例

    jsp过滤器示例 大家好,许多读者给我发了电子邮件,写了一篇有关Java 8的地图和过滤器功能的文章,因为他们发现它们难以理解和使用. 即使我以前同时写过有关map()和filter()的博客,我仍在 ...

  2. 【JSP HTTP 状态码】【JSP 表单处理】【JSP 过滤器】【JSP Cookie 处理】【JSP Session】【JSP 文件上传】

    JSP HTTP 状态码 HTTP请求与HTTP响应的格式相近,都有着如下结构: 以状态行+CRLF(回车换行)开始 零行或多行头模块+CRLF 一个空行,比如CRLF 可选的消息体比如文件,查询数据 ...

  3. 关于平面战机射击游戏的一点小结

    很久以前刚学TC开发图像类程序的时候就兴起了自己写个小射击游戏的想法,前前后后花了将近一年的功夫在当时的8086上实现了. 后来进入windows时代,学习了VB就又想起了这个东西,又用VB实现了一次 ...

  4. 用python爬取股票数据的一点小结

    一.背景 网上对于爬取股票数据有相对完善的教程.不过大部分教程都是只能够爬取一段时间的股票数据,针对某一只股票的历史数据爬取,目前还没有看到比较好的教程.下面对近期学的东西进行一点点小结. 二.股票数 ...

  5. 用python爬取图片的一点小结

    一.原理小结 最近在学习用python的爬虫爬取网络上的图片,制作数据集并用于后续的一些实验.看了很多关于python爬取图片的介绍,并验证了相关代码,先推荐几个介绍比较好的爬虫过程: [1]小白爬虫 ...

  6. JSP过滤器Filter配置过滤类型汇总

    一.配置方法 1 映射过滤应用程序中所有资源 <filter>     <filter-name>loggerfilter</filter-name>     &l ...

  7. [转]DevExpress GridControl 关于使用CardView的一点小结

    最近项目里需要显示商品的一系列图片,打算用CardView来显示,由于第一次使用,遇到许多问题,发现网上这方面的资源很少,所以把自己的一点点实际经验小结一下,供自己和大家以后参考. 1.选择CardV ...

  8. 勤哲excel服务器开发实施管理系统的一点小结

    从第一次接触勤哲excel服务器到用这个工具给众多客户开发设计项目有7.8个年头了.一直有网友加qq和我探讨各类问题,今天得闲觉得有必要交流分享下使用勤哲开发.设计.实施项目的经验.以下主要结合几十个 ...

  9. 对jsp的一个小结(7)EL表达式(不会报错)和JSTL标签库、sp与jdbc总结

    11使用EL显示数据 1EL语法 ①定义变量②变量存入作用域中③访问EL变量.对象属性.数组.运算 <%@page import="java.util.ArrayList"% ...

  10. C++异常 和 SEH异常 的一点小结

    [如何区分异常] "C++异常" 就是 try{}catch(...){} "SEH异常" 就是 __try{} __except(-1/0/1){} 目前微软 ...

最新文章

  1. matlab生成ai图片,MATLAB绘图:导出矢量图
  2. 补充spring事务传播性没有考虑的几种情况
  3. 腾讯的迷你门户首页新闻用到的Silverlight技术引用
  4. WINCE的BIB文件解析
  5. 网线制作ppt_快速制作PPT技巧!
  6. 启动Hadoop时候datanode没有启动的原因及解决方案
  7. python相关工具使用技巧(pip)
  8. avast:中兴手机预装恶意软件 嵌入固件底层
  9. vue-app开发入门
  10. 【sketchup 2021】草图大师的场景优化工具3【新建材质、材质编辑面板的详细说明】【重要】
  11. acrobat PDF删除部分_PDF文件如何删除部分内容?
  12. jq追加html点击事件,jq增加点击事件 Jquery为DIV添加点击事件
  13. MATLAB 计算 确定系数R2
  14. 接入阿里云OSS--公有云分布式存储
  15. NShape(开源矢量图形编辑器) 入门(一)
  16. Java幸运盒子代码_幸运盒子扭蛋机小程序app开发
  17. Android Switch和ToggleButton控件
  18. 如何优雅地使用Sublime
  19. arduino计时器程序
  20. 社交电商:拼团与分销商业模式的区别在哪里?

热门文章

  1. SQL:postgresql中查询日期date的方法
  2. JAVA轻量级ORM框架JOOQ体验
  3. 数据抓取的艺术(三)
  4. ORBSLAM关键帧的筛选和插入
  5. OpenCV_ImageMatching with SURF and SIFT(使用SURF和 SIFT进行图像匹配 对比)
  6. opencv图像分析与处理(12)-逆滤波、维纳滤波、约束最小二乘方滤波和几何均值滤波
  7. cartographer探秘第四章之代码解析(五) --- 后端优化 --- 闭环约束1 --- PrecomputationGrid2D
  8. keras实现Segnet、FCN、U-Net系列分割网络
  9. Pycharm 的设置--参数设置(运行.py文件带参数,例如argument)
  10. POJ 3070 Fibonacci(矩阵高速功率)