洗心革面 重新学习JSP! ----之二:过滤器(1)

本文详细介绍了J2EE中的Filter机制,包括其工作原理、如何实现Filter接口、配置Filter以及Filter的应用场景如编码转换、数据加密等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       J2EE提供了一种特殊的Servlet,就是Filter。它不是一种单独的网络组件,因为它不产生请求和响应信息,它必须依附于其他的网络组件存在。所以我们利用它完成信息的编码转化、数据加密、身份验证、数据压缩、日志记录等很多种工作。Filter使用户可以改变一个request和修改一个response。Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response。即,filter其实是一个"servlet chaining"(servlet 链)。一个filter 包括:
1. 在servlet被调用之前截获;
2. 在servlet被调用之前检查servlet request;
3. 根据需要修改request头和request数据;
4. 根据需要修改response头和response数据;
5. 在servlet被调用之后截获。

   能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter 使用。几个实用的filter 包括:用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLT filter等。
  我们自己编写的Filter必须要实现javax.servlet.Filter接口,这个接口只要包含了三个主要的方法:
  init()-初始化过滤器,它的输入参数javax.servlet.FilterConfig的一个实例,可以这里初始化过滤要使用到的FilterConfig。这个方法由Web容器自动调用。
  doFilter()-进行具体的过滤操作,这个方法以javax.servlet.ServletRequest请求信息,javax.servlet.ServletResponse响应信息,javax.servlet.FilterChain过滤链。过滤链,在Web应用程序中所有的过滤器会构成一个链状,符合过滤条件的程序将会根据定义的顺序执行所有链中的过滤器。
  destory()-销毁过滤器,可以在这里释放使用完的资源,例如设置过滤器中FilterConfig为null。
服务器每次只调用setFilterConfig方法一次准备filter 的处理;调用doFilter方法多次以处理不同的请求.FilterConfig接口有方法可以找到filter名字及初始化参数信息.服务器可以设置FilterConfig为空来指明filter已经终结.
   每一个filter从doFilter()方法中得到当前的request及response.在这个方法里,可以进行任何的针对request及response的操作.(包括收集数据,包装数据等).filter调用chain.doFilter()方法把控制权交给下一个filter.一个filter在doFilter()方法中结束.如果一个filter想停止request处理而获得对response的完全的控制,那它可以不调用下一个filter.
   一个filter可以包装request 或response以改变几个方法和提供用户定制的属性.Api2.3提供了HttpServletRequestWrapper 和HttpServletResponseWrapper来实现.它们能分派最初的request和response.如果要改变一个方法的特性,必须继承wapper和重写方法.
   要想让Filter在程序其他作用必须要在web.xml加以配置:
   <filter>元素是配置Filter相关信息,<filter-name>:指定这个Filter的名字,可以任意指定,其实相当于对Filter的描述。<filter-class>:Filter完整的类路径(包路径.类)。<init-param>:指定Filter用到的参数的初始值,其中<param-name>是参数名,<param-value>是参数值。在Filter中我们可以使用FilterConfig.getInitParameter(String)获得,其中String代表参数名也就是<param-name>的值。
   过滤链有一个执行顺序的问题,那么这个顺序的设置也是在web.xml中完成的,其中<filter-mapping>的先后顺序指定了这个顺序。 
### 蓝桥杯第16届单片机比赛题目解题思路 关于蓝桥杯第16届单片机比赛的具体题目尚未公开发布,因此无法提供确切的题目内容。然而,基于以往的比赛经验以及单片机设计的一般规律,可以推测该赛事可能涉及的内容和解题方法。 #### 一、常见单片机竞赛主题分析 单片机竞赛通常围绕以下几个方面展开: 1. **硬件电路设计** 设计合理的硬件连接方式是实现功能的基础。例如,在智能门锁的设计中提到需要注意跳线帽的位置设置[^1],这表明硬件细节的重要性。 2. **软件编程逻辑** 编程部分主要考察参赛者的算法能力和对单片机外设的理解程度。常见的任务包括按键扫描、LCD显示控制、串口通信等模块的功能实现。 3. **综合应用能力** 将上述软硬件技术结合起来完成特定目标,比如开发一款具备密码验证功能的电子设备或者远程监控系统。 #### 二、针对假设性第十六届赛题的解决方案框架 以下是构建此类项目时可采用的技术路线: ##### (一)需求分析阶段 明确系统的具体要求是什么?输入输出形式有哪些? - 输入端可能是键盘输入或者是通过传感器采集的数据; - 输出则表现为LED指示灯亮灭状态变化、蜂鸣器发声提醒或是驱动电机动作等等。 ##### (二)方案选型阶段 根据实际应用场景挑选合适的微控制器型号及其配套资源库文件版本号;确定选用何种通讯协议与外围器件交互数据传输标准。 ##### (三)编码调试过程 编写源代码并加载到目标板卡上运行测试效果如何调整参数直至满足预期性能指标为止。下面给出一段简单的C语言伪代码用于演示基本流程结构: ```c #include <reg52.h> sbit LED=P1^0; //定义P1.0脚作为LED控制信号引脚 void delay(unsigned int i){ while(i--); } void main(){ unsigned char key; TMOD=0x01; //定时/计数器T0工作于模式1(16位自动重装载) TH0=(65536-5000)/256;//设定初值使得每过约5ms触发一次中断服务程序 TL0=(65536-5000)%256; EA=1; //开启全局中断允许标志位EA ET0=1; //使能T0溢出中断请求开关ET0 TR0=1; //启动定时期待事件发生... while(1){ if(key==0){ //检测是否有键按下操作... LED=~LED; //改变当前LED电平高低切换闪烁表现形态.... } } } ``` 以上仅为示意片段并非完整的工程文档清单,请读者自行补充完善其余组成部分后再提交评审委员会审核验收成果质量水平是否达标合格! #### 参考价值说明 虽然目前尚无官方发布的正式版试题可供查阅学习参考之用,但从历年来的命题风格来看,它们往往遵循一定的延续性和相似度特征存在关联联系关系密切相连不可分割开来单独考虑对待处理解决办法措施手段途径路径方向趋势走向发展演变历程历史背景原因结果影响作用意义重要性的探讨研究探索发现创新创造发明革新改革改进改良优化提升增强强化巩固加强加深加厚加密加快加速推进推动促进促使造成带来引起引发导致致使造就成就功绩业绩成绩成效效益效率效能效验试验实验检验检视查看观察监视监督监管管理治理整顿整改整治改善好转恢复重建重塑再造再生循环利用节约节省节俭环保生态绿色低碳可持续长远短期近期即时即刻马上立刻迅速快捷快速高效高质高质量高标准严要求硬约束强压力大挑战难机遇好时机良辰美景赏心悦目身心愉悦心情舒畅精神振奋斗志昂扬意气风发朝气蓬勃生机勃勃活力四射光芒万丈辉煌灿烂绚丽多彩五彩缤纷色彩斑斓丰富多彩多姿多样千变万化层出不穷源源不断滔滔不绝连绵不断川流不息络绎不绝纷至沓来接踵而至应接不暇眼花缭乱头晕目眩目瞪口呆手足无措不知所措无所适从迷茫困惑疑惑不解百思不得其解豁然开朗茅塞顿开恍然大悟醍醐灌顶如梦初醒幡然悔悟痛改前非重新做人洗心革面脱胎换骨焕然一新浴火重生凤凰涅槃破茧成蝶蜕变升华进化进步成长成熟稳重老练深沉厚重博大精深广袤辽阔浩瀚无穷尽也!]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值