博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Filter概念与第一个Filter程序
阅读量:3965 次
发布时间:2019-05-24

本文共 3613 字,大约阅读时间需要 12 分钟。

1、Filter 什么是过滤器

1、Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器

2、Filter 过滤器它是 JavaEE 的规范。也就是接口
3、Filter 过滤器它的作用是:拦截请求,过滤响应

拦截请求常见的应用场景有:

1、权限检查
2、日记操作
3、事务管理 ……等
在这里插入图片描述

工作原理

在这里插入图片描述

接口中的方法

在这里插入图片描述

生命周期

在这里插入图片描述

2、Filter 的初体验

创建和配置

在这里插入图片描述

要求: 在你的 web 工程下,有一个 admin 目录。这个 admin 目录下的所有资源(html 页面、jpg 图片、jsp 文件、等等)都必 须是用户登录之后才允许访问。

思考:根据之前我们学过内容。我们知道,用户登录之后都会把用户登录的信息保存到 Session 域中。所以要检查用户是否 登录,可以判断 Session 中否包含有用户登录的信息即可!!

<%    Object user = session.getAttribute("user"); // 如 果 等 于 null , 说 明 还 没  登 录     if (user == null) {         request.getRequestDispatcher("/login.jsp").forward(request,response);         return;     }%>

Filter 的工作流程图:

在这里插入图片描述

Filter 的代码:

package loey.filter;import javax.servlet.*;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import java.io.IOException;public class AdminFilter implements Filter {
@Override public void init(FilterConfig filterConfig) throws ServletException {
// 1、获取 Filter 的名称 filter-name 的内容 System.out.println("filter-name的值是:" + filterConfig.getFilterName());//filter-name的值是:AdminFilter// 2、获取在 Filter 中配置的 init-param 初始化参数 System.out.println("初始化参数username的值是:" + filterConfig.getInitParameter("username"));//初始化参数username的值是:root System.out.println("初始化参数url的值是:" + filterConfig.getInitParameter("url"));//初始化参数url的值是:jdbc:mysql://localhost:3306/test// 3、获取 ServletContext 对象 System.out.println(filterConfig.getServletContext().getInitParameter("username"));//context } /** * doFilter方 法 , 专 门 用 于 拦 截 请 求 。 可 以 做 权 限 检 查 */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request; HttpSession session = httpServletRequest.getSession(); Object user = session.getAttribute("user");// 如果等于null,说明还没有登录 if(user == null){
request.getRequestDispatcher("/login.jsp").forward(request,response); return; }else{
//让 程 序 继 续 往 下 访 问 用 户 的 目 标 资 源 chain.doFilter(request,response); } } @Override public void destroy() {
}}

web.xml 中的配置:

AdminFilter
loey.filter.AdminFilter
AdminFilter
/admin/*

Filter 过滤器的使用步骤:

1、编写一个类去实现 Filter 接口
2、实现过滤方法 doFilter()
3、到 web.xml 中去配置 Filter 的拦截路径

完整的用户登录

login.jsp 页面 == 登录表单

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    登录页面

登录

用户名:
密 码:

LoginServlet 程序 :

public class LoginServlet extends HttpServlet {
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=utf-8"); String username = req.getParameter("username"); String password = req.getParameter("password"); if("admin".equals(username) && "123".equals(password)){
req.getSession().setAttribute("user",username); resp.getWriter().write("登录成功!"); }else{
req.getRequestDispatcher("/login.jsp").forward(req,resp); } }}

3、Filter 的生命周期

Filter 的生命周期包含几个方法

  • 1、构造器方法
  • 2、init 初始化方法
    第 1,2 步,在 web 工程启动的时候执行(Filter 已经创建)
  • 3、doFilter 过滤方法
    第 3 步,每次拦截到请求,就会执行
  • 4、destroy 销毁
    第 4 步,停止 web 工程的时候,就会执行(停止 web 工程,也会销毁 Filter 过滤器)

转载地址:http://kmuki.baihongyu.com/

你可能感兴趣的文章
Pandas 精萃
查看>>
[第19课] 二项分布1
查看>>
什么是 Pandas?
查看>>
Pandas 如何创建 DataFrame
查看>>
Pandas 查看数据
查看>>
[第20课] 二项分布2
查看>>
感 冒
查看>>
职业瓶颈
查看>>
有些问题不一定要一次完成,有时候可以增加中间步骤
查看>>
Eclipse 常用快捷键
查看>>
DB2 系列文章目录
查看>>
DB2 认证路线图
查看>>
在FedaroCore4下安装DB2 Express-C
查看>>
DB2 目录结构
查看>>
DB2 配置
查看>>
DB2 CHNGPGS_THRES 参数
查看>>
DB2安全性概述
查看>>
DB2 用户管理
查看>>
DB2 脚本
查看>>
DB2 锁升级失败将引起死锁
查看>>