本文共 2372 字,大约阅读时间需要 7 分钟。
1.1 案例一:自动登录案例.1.1.1 需求:
在各式网站都会看到自动登录的功能,在登录页面中勾选了自动登录的复选框,那么下次访问网站首页的时候,可以不需要进行登录.
1.1.2 分析:1.1.2.1 技术分析:
【Cookie技术】
- 利用Cookie记住用户的用户名和密码.【Filter:过滤器的概述】Ø 什么是过滤器Filter:可以过滤从客户端向服务器发送的请求.Ø 过滤器的使用:
- 进行IP的过滤,脏话过滤,自动登录,响应压缩...Ø 使用过滤器:
- 编写一个类实现Filter接口:
- 配置过滤器:【过滤器的生命周期】:了解Ø 过滤器的创建和销毁:
- 创建:服务器启动的时候.
- 销毁:服务器关闭的时候.【FilterConfig:过滤器的配置对象】:代码:public void init(FilterConfig filterConfig) throws ServletException { // 获得当前的Filter的名称:String filterName = filterConfig.getFilterName();System.out.println(filterName);// 获得初始化参数:String username = filterConfig.getInitParameter("username");String password = filterConfig.getInitParameter("password");System.out.println(username+" "+password);// 获得所有的初始化参数的名称:Enumeration<String> en = filterConfig.getInitParameterNames();while(en.hasMoreElements()){ String name = en.nextElement();String value = filterConfig.getInitParameter(name);System.out.println(name+" "+value);}}【FilterChain:过滤器链】过滤器链中的过滤器的执行的顺序与<filter-mapping>的配置顺序有关.
- doFilter(request,response); -- 放行,放行到下一个过滤器中,如果没有下一个过滤器,到达目标资源.【Filter相关的配置】Ø <url-pattern>的配置:
- 完全路径匹配 :以 / 开始 /demo4/demo1.jsp
- 目录匹配 :以 / 开始 以 结束. / /demo1/*
- 扩展名匹配 :不能以 / 开始 以 开始. .do *.actionØ <servlet-name>的配置:根据Servlet的名称拦截Servlet.Ø <dispatcher>的配置:
- REQUEST :默认值.
- FORWARD :转发.
- INCLUDE :包含.
- ERROR :错误页面跳转.(全局错误页面)1.1.3 代码实现:【步骤一】:创建数据库和表:create database web_16;use web_16;create table user(id int primary key auto_increment,username varchar(20),password varchar(20),nickname varchar(20),type varchar(10));insert into user values (null,'aaa','111','张凤','user');insert into user values (null,'bbb','111','如花','user');insert into user values (null,'ccc','111','张芙蓉','user');【步骤二】:导入jar包和工具类:【步骤三】:创建包结构及常用类:【步骤四】:登录功能.【步骤五】:利用COokie记住用户名和密码【步骤六】:实现自动登录的过滤器1.2 案例二:通用的字符集编码的过滤器.1.2.1 需求:在一个网站上,通常会提交带有中文的数据,GET/POST请求都有可能提交中文数据.通常情况下在Servlet中处理中文乱码.现在能不能将乱码的处理交给过滤器完成.只需要在Servlet中关心参数的接收就可以了.只需要在Servlet中调用request.getParameter();接收参数就可以,而不去关心到底get/post如何处理乱码.1.2.2 分析:【增强request中的getParameter方法】Ø 继承 :控制这个类构造.Ø 装饰者模式 :增强的类和被增强类实现相同的接口,增强的类中获得到被增强的类的引用.
- 缺点:接口中方法太多.Ø 动态代理 :被增强的类实现接口就可以.1.2.3 代码实现:public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper{ private HttpServletRequest request;public MyHttpServletRequestWrapper(HttpServletRequest request) { super(request);this.request = request;
}
转载于:https://blog.51cto.com/13517854/2124619