Eclipse15:Filter

您所在的位置:网站首页 eclipse怎么创建一个接口 Eclipse15:Filter

Eclipse15:Filter

2024-02-22 20:46| 来源: 网络整理| 查看: 265

一、Filter概述

Filter称为过滤器,它是Servlet技术中最实用的技术,web开发人员通过Filter技术,对web服务器所管理的资源(JSP,Servlet,静态图片或静态html文件)进行拦截,从而实现一些特殊的功能。

Filter就是过滤从客户端向服务器发送的请求。

二、过滤器原理

 三、Filter入门 3.1 第一步:编写一个类实现Filter接口

 3.2 第二步:对过滤器进行配置

3.3 第三步:编写JSP页面

访问JSP页面,发现不加放行语句时,前端页面不显示。加上后显示正常。

四、FilterChain对象 4.1 概述

FilterChain过滤器链:在一个web应用中,可以开发编写多个Filter,这些Filter组合起来称为是一个过滤器链。

Web服务器根据Filter在web.xml文件中的注册顺序(mapping的配置顺序)决定先调用那个Filter。依次调用后面的过滤器,如果没有下一个过滤器,调用目标资源

 4.2 FilterChain的演示

 

执行结果:(发出请求时xml配置顺序,响应时候按照xml逆序)

 4.3 Filter的生命周期

Filter的创建和销毁是由web服务器负责。Web应用程序启动的时候,web服务器创建Filter的实例对象。并调用其init方法进行初始化(filter对象只会创建一次,init方法也只会执行一次)。

每次filter进行拦截的时候,都会执行doFilter的方法。

当服务器关闭的时候,应用从服务器中移除的时候,服务器会销毁Filter对象

4.4 FilterConfig对象的概述 4.4.1 FilterConfig对象的作用

用来获得Filter的相关的配置的对象

4.4.2 FilterConfig对象的API

 4.4.4 FilterConfig的演示

 4.5 过滤器的相关配置

的配置

完全路径匹配           :以/开始   比如/aaa  /aaa/bbb目录匹配                    :以/开始 以*结束  比如/*  /aaa/*  /aaa/bbb/*扩展名匹配               :不能以/开始 以*开始 比如*.jsp  *.do   *.action

的配置

专门以Servlet的配置的名称拦截Servlet。

的配置

默认的情况下过滤器会拦截请求。如果进行转发(需要拦截这次转发)。dispatcher的取值 REQUEST :默认值。默认过滤器拦截的就是请求。FORWARD:转发。INCLUDE  :页面包含的时候进行拦截ERROR      :页面出现全局错误页面跳转的时候进行拦截

4.6 代码案例:权限验证过滤器

现在一个网站上需要有登录的功能,在登录成功后,重定向到后台的成功页面(后台的页面有很多)。如果现在没有登录直接在地址栏上输入后台页面地址。

编写一个过滤器:可以对没有登录的用户进行拦截。(没有登录,回到登录页面。如果已经登录,放行。

4.6.1 创建表 create database web05; use web05; create table user( id int primary key auto_increment, username varchar(20), password varchar(20) ); insert into user values (null,'aaa','123'); 4.6.2 创建项目并引入jar包

4.6.3 引入数据库配置文件

4.6.4  创建 util包并导入工具类

4.6.4 新建三层架构:domain/model/controller 

4.6.5 实体类的创建

 4.6.6 新建模型层和控制层

 4.6.7 数据库连接配置

4.6.8 登录页面

注意:小技巧

Insert title here 登录页面 ${msg} 用户名 密码  4.6.9 登录成功的页面 Insert title here 登录成功,欢迎${existUser.username} 4.6.10 访问

http://localhost/demo6/UserServlet

4.7 权限过滤器二 4.7.1 新建filter包和类

4.7.2 filter代码 package com.itheima.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import com.itheima.domain.User; import com.sun.deploy.nativesandbox.comm.Request; import com.sun.net.httpserver.Filter.Chain; public class filter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub // 判断用户是否登录,登录就放行,没登录跳转到登录页面 HttpServletRequest req = (HttpServletRequest) arg0; User existUser = (User) req.getSession().getAttribute("existUser"); if(existUser == null) { req.setAttribute("msg", "未登录,无权限访问!"); req.getRequestDispatcher("/login.jsp").forward(arg0, arg1); }else { arg2.doFilter(req, arg1); } } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } } 4.7.3 xml配置

 

 4.8 案例:通用的字符集编码过滤器的分析

4.8.1 案例需求

网站,需要向后台提交中文的数据(有可能是GET也有可能是POST)。中文处理根据不同的请求方式,处理的方式也是不一样的。

需要调用request.getParameter();方法接收数据,但是这个时候无论是get还是post接收的数据都是存在乱码。现在调用request.getParameter()方法无论是get还是post请求提交的中文,都没有乱码。

4.8.2 增强一个类的方法

通过上面的分析,现在增强request的getParameter的方法。增强的过程要写在过滤器中。

如何增强一个类中的方法? 继承 必须要能够控制这个类的构造。装饰者 被增强的类和增强的类需要实现相同的接口。在增强的类中获得被增强的类的引用。缺点:接口中的方法过多,重写很多其他的方法。动态代理

                       1.类需要实现接口

过滤器的代码

增强类的代码

 



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3