jsp过滤器一点小结
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过滤器一点小结相关推荐
- jsp过滤器示例_Java 8过滤器,地图,收集和流示例
jsp过滤器示例 大家好,许多读者给我发了电子邮件,写了一篇有关Java 8的地图和过滤器功能的文章,因为他们发现它们难以理解和使用. 即使我以前同时写过有关map()和filter()的博客,我仍在 ...
- 【JSP HTTP 状态码】【JSP 表单处理】【JSP 过滤器】【JSP Cookie 处理】【JSP Session】【JSP 文件上传】
JSP HTTP 状态码 HTTP请求与HTTP响应的格式相近,都有着如下结构: 以状态行+CRLF(回车换行)开始 零行或多行头模块+CRLF 一个空行,比如CRLF 可选的消息体比如文件,查询数据 ...
- 关于平面战机射击游戏的一点小结
很久以前刚学TC开发图像类程序的时候就兴起了自己写个小射击游戏的想法,前前后后花了将近一年的功夫在当时的8086上实现了. 后来进入windows时代,学习了VB就又想起了这个东西,又用VB实现了一次 ...
- 用python爬取股票数据的一点小结
一.背景 网上对于爬取股票数据有相对完善的教程.不过大部分教程都是只能够爬取一段时间的股票数据,针对某一只股票的历史数据爬取,目前还没有看到比较好的教程.下面对近期学的东西进行一点点小结. 二.股票数 ...
- 用python爬取图片的一点小结
一.原理小结 最近在学习用python的爬虫爬取网络上的图片,制作数据集并用于后续的一些实验.看了很多关于python爬取图片的介绍,并验证了相关代码,先推荐几个介绍比较好的爬虫过程: [1]小白爬虫 ...
- JSP过滤器Filter配置过滤类型汇总
一.配置方法 1 映射过滤应用程序中所有资源 <filter> <filter-name>loggerfilter</filter-name> &l ...
- [转]DevExpress GridControl 关于使用CardView的一点小结
最近项目里需要显示商品的一系列图片,打算用CardView来显示,由于第一次使用,遇到许多问题,发现网上这方面的资源很少,所以把自己的一点点实际经验小结一下,供自己和大家以后参考. 1.选择CardV ...
- 勤哲excel服务器开发实施管理系统的一点小结
从第一次接触勤哲excel服务器到用这个工具给众多客户开发设计项目有7.8个年头了.一直有网友加qq和我探讨各类问题,今天得闲觉得有必要交流分享下使用勤哲开发.设计.实施项目的经验.以下主要结合几十个 ...
- 对jsp的一个小结(7)EL表达式(不会报错)和JSTL标签库、sp与jdbc总结
11使用EL显示数据 1EL语法 ①定义变量②变量存入作用域中③访问EL变量.对象属性.数组.运算 <%@page import="java.util.ArrayList"% ...
- C++异常 和 SEH异常 的一点小结
[如何区分异常] "C++异常" 就是 try{}catch(...){} "SEH异常" 就是 __try{} __except(-1/0/1){} 目前微软 ...
最新文章
- matlab生成ai图片,MATLAB绘图:导出矢量图
- 补充spring事务传播性没有考虑的几种情况
- 腾讯的迷你门户首页新闻用到的Silverlight技术引用
- WINCE的BIB文件解析
- 网线制作ppt_快速制作PPT技巧!
- 启动Hadoop时候datanode没有启动的原因及解决方案
- python相关工具使用技巧(pip)
- avast:中兴手机预装恶意软件 嵌入固件底层
- vue-app开发入门
- 【sketchup 2021】草图大师的场景优化工具3【新建材质、材质编辑面板的详细说明】【重要】
- acrobat PDF删除部分_PDF文件如何删除部分内容?
- jq追加html点击事件,jq增加点击事件 Jquery为DIV添加点击事件
- MATLAB 计算 确定系数R2
- 接入阿里云OSS--公有云分布式存储
- NShape(开源矢量图形编辑器) 入门(一)
- Java幸运盒子代码_幸运盒子扭蛋机小程序app开发
- Android Switch和ToggleButton控件
- 如何优雅地使用Sublime
- arduino计时器程序
- 社交电商:拼团与分销商业模式的区别在哪里?
热门文章
- SQL:postgresql中查询日期date的方法
- JAVA轻量级ORM框架JOOQ体验
- 数据抓取的艺术(三)
- ORBSLAM关键帧的筛选和插入
- OpenCV_ImageMatching with SURF and SIFT(使用SURF和 SIFT进行图像匹配 对比)
- opencv图像分析与处理(12)-逆滤波、维纳滤波、约束最小二乘方滤波和几何均值滤波
- cartographer探秘第四章之代码解析(五) --- 后端优化 --- 闭环约束1 --- PrecomputationGrid2D
- keras实现Segnet、FCN、U-Net系列分割网络
- Pycharm 的设置--参数设置(运行.py文件带参数,例如argument)
- POJ 3070 Fibonacci(矩阵高速功率)