A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 谷粒姐姐 于 2018-6-5 11:41 编辑

1.1 案例一:自动登录案例.1.1.1 需求:
在各式网站都会看到自动登录的功能,在登录页面中勾选了自动登录的复选框,那么下次访问网站首页的时候,可以不需要进行登录.
1.1.2 分析:1.1.2.1 技术分析:
【Cookie技术】
* 利用Cookie记住用户的用户名和密码.
【Filter:过滤器的概述】
Ø 什么是过滤器Filter:可以过滤从客户端向服务器发送的请求.
Ø 过滤器的使用:
* 进行IP的过滤,脏话过滤,自动登录,响应压缩...
Ø 使用过滤器:
* 编写一个类实现Filter接口:
* 配置过滤器:
【过滤器的生命周期】:了解
Ø 过滤器的创建和销毁:
* 创建:服务器启动的时候.
* 销毁:服务器关闭的时候.
【FilterConfig:过滤器的配置对象】:
代码:
        
[AppleScript] 纯文本查看 复制代码
public void init(FilterConfig filterConfig) throws ServletException {[/align]                // 获得当前的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 代码实现:
[AppleScript] 纯文本查看 复制代码
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper{
        private HttpServletRequest request;
        public MyHttpServletRequestWrapper(HttpServletRequest request) {
                super(request);
                this.request = request;
        }
        @Override
        public String getParameter(String name) {
                // 根据请求方式不同,去处理:
                // 获得请求方式:
                String method = request.getMethod();
                if("get".equalsIgnoreCase(method)){
                        String value = null;
                        try {
                                value = new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");
                        } catch (UnsupportedEncodingException e) {
                                e.printStackTrace();
                        }
                        return value;
                }else if("post".equalsIgnoreCase(method)){
                        try {
                                request.setCharacterEncoding("UTF-8");
                        } catch (UnsupportedEncodingException e) {
                                e.printStackTrace();
                        }
                }
                return super.getParameter(name);
        }
        
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马