JAVA WEB篇4——Filter、Listener

1、Filter

  • Filter本意为”过滤“的含义,是JavaWeb的三大组件之一,三大组件为:Servlet、Filter、 Listener
  • 过滤器是向 Web 应用程序的请求和响应处理添加功能的 Web 服务组件
  • 过滤器相当于浏览器与Web资源之间的一道过滤网,在访问资源之前通过一系列的过滤器对请求 进行修改、判断以及拦截等,也可以对响应进行修改、判断以及拦截等

1.1、简单的登录案例

<%--Created by IntelliJ IDEA.User: yoyaDate: 2021/7/18Time: 10:36To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>$Title$</title></head><body><form action="${pageContext.request.contextPath}/RuoyrServlet"><input type="text" name="pwd"><input type="submit" value="提交"></form></body>
</html>
@WebServlet("/RuoyrServlet")
public class RuoyrServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {System.out.println("22222222222222222222222");String pwd = request.getParameter("pwd");request.getSession().setAttribute("pwd",pwd);if (pwd.equalsIgnoreCase("123"))response.sendRedirect(request.getContextPath()+"/success.jsp");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}
<%--Created by IntelliJ IDEA.User: yoyaDate: 2021/7/19Time: 19:41To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%if (session.getAttribute("pwd")==null)response.sendRedirect(request.getContextPath()+"/index.jsp");
%>
<h1>登陆成功</h1>
</body>
</html>

每次都在jsp里写判断有点麻烦

1.2、Filter使用方式

如果有多个过滤器都满足过滤的条件,则容器依据映射的先后顺序来调用各个过滤器

1.2.1、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><filter><filter-name>RuoyeFilter</filter-name><filter-class>RuoyeFilter</filter-class></filter><filter-mapping><filter-name>RuoyeFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>
@WebFilter(urlPatterns = { "/*" })
public class RuoyeFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("11111111111111111");//放行HttpServletRequest httpServletRequest= (HttpServletRequest) servletRequest;HttpServletResponse httpServletResponse= (HttpServletResponse) servletResponse;System.out.println(httpServletRequest.getServletPath());if (httpServletRequest.getSession().getAttribute("pwd")!=null||httpServletRequest.getServletPath().equals("/RuoyrServlet")||httpServletRequest.getServletPath().equals("/index.jsp"))filterChain.doFilter(servletRequest,servletResponse);elsehttpServletResponse.sendRedirect(httpServletRequest.getContextPath());System.out.println("3333333333333333333333");}
}

注意导的包 import javax.servlet.annotation.WebFilter;

1.2.2、@WebFilter

@WebFilter(urlPatterns = { "/*" })
public class RuoyeFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("11111111111111111");//放行HttpServletRequest httpServletRequest= (HttpServletRequest) servletRequest;HttpServletResponse httpServletResponse= (HttpServletResponse) servletResponse;System.out.println(httpServletRequest.getServletPath());if (httpServletRequest.getSession().getAttribute("pwd")!=null||httpServletRequest.getServletPath().equals("/RuoyrServlet")||httpServletRequest.getServletPath().equals("/index.jsp"))filterChain.doFilter(servletRequest,servletResponse);elsehttpServletResponse.sendRedirect(httpServletRequest.getContextPath());System.out.println("3333333333333333333333");}
}

1.3、多过滤器

1.4、过滤器的优点

  • 实现代码的“可插拔性”,即增加或减少某个功能模块,不会影响程序的正常执行
  • 可以将多个相同处理逻辑的模块集中写在过滤器里面,可实现重复利用、也方便代码的维护

2、 Listener

用来监听Servlet容器产生的事件并进行相应的处理

这玩意很强,但是没看出来有什么用,待补

JAVA WEB篇4——Filter、Listener相关推荐

  1. java web开发中Filter使用Annotation配置 (转载)

    为什么80%的码农都做不了架构师?>>>    为了在java中得到request和response对象,搜索到了 <如何在Java的普通类中获取Session以及reques ...

  2. JAVA WEB篇3——JSP

    JAVA WEB篇3--JSP 1.JSP是什么 JSP是Java Server Pages的简称,跟Servlet一样可以动态生成HTML响应, JSP文件命名为 xxx.jsp 与Servlet不 ...

  3. JAVA WEB篇2——Servlet

    JAVA WEB篇2--Servlet Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,是Java语言编写 的服务器端程序,换句话说,Serv ...

  4. JAVA WEB篇1——初识JAVAWEB

    JAVA WEB篇1--初识JAVAWEB JavaWeb主要指使用Java语言进行动态Web资源开发技术的统称,是解决相关Web互联网领域的技术总和 1.Http协议 HTTP协议(HyperTex ...

  5. java web 全局_JavaWeb - 【Listener】初始化全局资源

    JavaWeb - [Listener]初始化全局资源 JavaWeb - [Listener]初始化全局资源 Listener使用步骤 Listener功能 初始化全局资源(读取配置文件) Serv ...

  6. Java web—Servlet过滤器(Filter)

    前言:         过滤器是Servlet中一个非常重要的组成部分,进行WEB开发时无不用到过滤器:因此这篇blog来单独总结下关于过滤器的知识点. 一.首先来了解一下什么是过滤器: 下面这句话引 ...

  7. JAVA基础(16) Servlet/Filter/Listener/Interceptor区别与联系

    一.概念: 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层.最早支持 Serv ...

  8. Java Web中的Filter和Interceptor的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.问题的来源 项目中使用了Filter,进行白名单的控制,同时使用了Filter进行了跨域请求的控制,使用了Intercep ...

  9. java web filter标签是什么,Java Web:5.Filter

    目录 什么是Filter? Filter是由Servlet容器进行调用,对 Servlet容器请求java服务端程序(调用资源:JSP,Servlet,静态HTML),java服务端程序响应Servl ...

最新文章

  1. oracle group by效率问题,性能优化-group by的优化
  2. [js] 一个api接口从请求数据到请求结束共与服务器进行了几次交互?
  3. 自组网中继台_同频自组网基站
  4. tail 显示文件最后若干行内容
  5. 单片机片外程序存储器数据存储器操作命令
  6. 大数据Hadoop集群中常用的任务调度框架
  7. .h5是什么文件_PPT转H5丨再也不用担心忘带U盘怎么办了
  8. 金融评分卡项目—9.违约预测模型的后续工作
  9. 大一c语言编程上机题库,C语言上机题库Word版
  10. adb连接 红米5手机
  11. Office基础操作:Word、PPT 表格文字居中
  12. Docker 镜像批量导入导出脚本
  13. Chrome 开发者工具 network 显示 Provisional headers are shown 的几种原因
  14. uniapp主题切换
  15. 【支付架构】跨境支付
  16. Windows下批量删除空文件夹
  17. 计算机毕业设计Java智能超市导购系统(源码+系统+mysql数据库+lw文档)
  18. SiamFC代码配置复现 matlab版本
  19. 【英语口语】01 - 原子介绍
  20. DDR,DDR2,DDR3,DDR4,LPDDR区别讲解

热门文章

  1. android scrollview焦点,scrollview里面的edittext,当它获得焦点时如何滚动到edittext
  2. linux lp 打印中文,Linux基础命令---lp打印文件
  3. java数据类型_JAVA基础篇(数据类型)
  4. 什么是Apple Desktop Bus? 亚行代表什么?
  5. stl vector 函数_vector :: front()函数以及C ++ STL中的示例
  6. oracle怎样修改表名、列名、字段类型、添加表列、删除表列
  7. js 自己试验 创建对象例子
  8. www(apache)服务器的基本设置
  9. p标题/p能设置字体的大小和颜色
  10. 2019最新C语言知识整理小白进来看看??