Servlet与FilterWord格式.docx
- 文档编号:5288209
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:16
- 大小:23.63KB
Servlet与FilterWord格式.docx
《Servlet与FilterWord格式.docx》由会员分享,可在线阅读,更多相关《Servlet与FilterWord格式.docx(16页珍藏版)》请在冰点文库上搜索。
1.<
servlet>
2.
<
servlet-name>
advExtract<
/servlet-name>
3.
servlet-class>
4.
com.anne.servlet.AdvExtractServlet
5.
/servlet-class>
6.
init-param>
7.
param-name>
encoding<
/param-name>
8.
param-value>
UTF-8<
/param-value>
9.
/init-param>
10.
load-on-startup>
1<
/load-on-startup>
11.<
/servlet>
12.<
servlet-mapping>
13.
14.
url-pattern>
/ad/<
/url-pattern>
15.<
/servlet-mapping>
<
<
com.anne.servlet.AdvExtractServlet
<
Servlet的配置一定要有<
与<
。
的作用:
配置了初始化servlet需要用到的参数。
1.public
class
AdvExtractServlet
extends
HttpServlet{
private
String
encoding;
@Override
public
void
init(ServletConfig
config)
throws
ServletException
{
super.init(config);
encoding
=
config.getInitParameter("
encoding"
);
……
}
9.}
publicclassAdvExtractServletextendsHttpServlet{
privateStringencoding;
@Override
publicvoidinit(ServletConfigconfig)throwsServletException{
super.init(config);
encoding=config.getInitParameter("
……
}
}
如上面<
中配置了encoding为UTF-8,那么在overrideHttpServlet类的init()方法的时候,就可以从config中取出”encoding”的值”UTF-8”。
4、Filter。
Filter与servlet是密不可分的。
Tomcat在接收到一个来自客户端(如浏览器)的请求之后,在这个请求被传递给servlet之前,需要经过层层Filter的过滤。
它能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response。
一个filter必须实现javax.servlet.Filter接口并定义三个方法:
1.voidsetFilterConfig(FilterConfigconfig)//设置filter的配置对象
2.FilterConfiggetFilterConfig()//返回filter的配置对象;
3.voiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)//执行filter的工作
Filter与servlet是一个层层包裹的关系,如下图:
对于每个request,将会先进入Filter1的doFilter()方法,在这个方法中会调用chain.doFilter()方法把控制权交给Filter2,然后在Filter2的doFilter()方法中会调用servlet的servici()方法,进入servlet,在离开servlet一层之后,依次退回到Filter2与Filter1,进行doFilter()中的后续处理,这里可以对从servlet返回来的response进行处理。
因此filter的实质就是拦截器(interceptor),它与SpringAOP中的包围通知(MethodInterceptor)类似,层层的包围住servlet。
常见的filter的应用有:
权限控制(如Acegi的实现),记录日志,转换编码格式,加密等。
Filter技术是servlet2.3新增加的功能.servlet2.3是sun公司与2000年10月发布的,它的开发者包括许多个人和公司团体,充分体现了sun公司所倡导的代码开放性原则.由于众多的参与者的共同努力,servlet2.3比以往功能都强大了许多,而且性能也有了大幅提高.
它新增加的功能包括:
1.应用程序生命周期事件控制;
2.新的国际化;
3.澄清了类的装载规则;
4.新的错误及安全属性;
5.不赞成使用HttpUtils类;
6.各种有用的方法;
7.阐明并扩展了几个servletDTD;
8.filter功能.
其中最重要的就是filter功能.它使用户可以改变一个request和修改一个response.Filter不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response.换种说法,filter其实是一个”servletchaining”(servlet链).一个filter包括:
1.在servlet被调用之前截获;
2.在servlet被调用之前检查servletrequest;
3.根据需要修改request头和request数据;
4.根据需要修改response头和response数据;
5.在servlet被调用之后截获.
你能够配置一个filter到一个或多个servlet;
单个servlet或servlet组能够被多个filter使用.几个实用的filter包括:
用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLTfilter等.
1.voidsetFilterConfig(FilterConfigconfig)//设置filter的配置对象;
3.voiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)//执行filter的工作.
服务器每次只调用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用来记录所有request的持续时间.
publicclassLogFilterimplementsFilter{
FilterConfigconfig;
publicvoidsetFilterConfig(FilterConfigconfig){
this.config=config;
}
publicFilterConfiggetFilterConfig(){
returnconfig;
publicvoiddoFilter(ServletRequestreq,
ServletResponseres,
FilterChainchain){
ServletContextcontext=getFilterConfig().getServletContext();
longbef=System.currentTimeMillis();
chain.doFilter(req,res);
//nochainparameterneededhere
longaft=System.currentTimeMillis();
context.log("
Requestto"
+req.getRequestURI()
+"
:
"
+(aft-bef));
当server调用setFilterConfig(),filter保存config信息.在doFilter()方法中通过config信息得到servletContext.如果要运行这个filter,必须去配置到web.xml中.以tomcat4.01为例:
filter>
filter-name>
log//filter名字
/filter-name>
filter-class>
LogFilter//filterclass(上例的servlet)
/filter-class>
/filter>
filter-mapping>
log<
servletname>
servletname<
/filter-mapping>
/servletname>
servletclass>
servletclass<
*<
把这个web.xml放到web-inf中(详请参考tomcat帮助文档).
当每次请求一个request时(如index.jsp),先到LogFilter中去并调用doFilter()方法,然后才到各自的servlet中去.如果是一个简单的servlet(只是一个页面,无任何输出语句),那么可能的输出是:
Requestto/index.jsp:
10
Filter技术是servlet2.3新增加的功能.servlet2.3是sun公司与2000年10月发布的,它的开发者包括许多个人和公司团体,充分体现了sun公司所倡导的代码开放性原则.由于众多的参与者的共同努力,servlet2.3比以往功能都强大了许多,而且性能也有了大幅提高.
8.filter功能.
其中最重要的就是filter功能.它使用户可以改变一个request和修改一个response.Filter不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response.换种说法,filter其实是一个”servletchaining”(servlet链).一个filter包括:
5.在servlet被调用之后截获.
用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLTfilter等.
3.voiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)//执行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用来记录所有request的持续时间.
publicclassLogFilterimplementsFilter{
publicvoidsetFilterConfig(FilterConfigconfig){
publicFilterConfiggetFilterConfig(){
publicvoiddoFilter(ServletRequestreq,
ServletResponseres,
FilterChainchain){
//nochainparameterneededhere
+req.getRequestURI()
当server调用setFilterConfig(),filter保存config信息.在doFilter()方法中通过config信息得到servletContext.如果要运行这个filter,必须去配置到web.xml中.以tomcat4.01为例:
log//filter名字
LogFilter//filterclass(上例的servlet)
把这个web.xml放到web-inf中(详请参考tomcat帮助文档).
10
下面是几个运用实例
Filter过滤器的使用
本篇文章是介绍javax.servlet包中Filter的几个功能,一是字符编码过滤,二是拦截指文件夹中的文件,实现登录验证.实现以上两个功能需以下几个步骤:
1、实现javax.servlet.Filter接口,编写两个类,如下:
/**
*作用:
过滤编码
*/
packagefilter;
importjava.io.IOException;
importjavax.servlet.*;
importjavax.servlet.http.HttpServletRequest;
publicclassEncodingFilterimplementsFilter
{
protectedFilterConfigfilterConfig;
privateStringtargetEncoding;
publicEncodingFilter()
{
targetEncoding="
gb2312"
;
//直接初始化0912
publicvoidinit(FilterConfigfilterconfig)throwsS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Servlet Filter
![提示](https://static.bingdoc.com/images/bang_tan.gif)