随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

简介:

JavaWeb三大组件:

  Servlet、Listener(2个感知监听不需要配置)、Filter。(都需要在web.xml中进行配置)

过滤器:

javax.servlet.Filter:

一般是在资源(Jsp,Servlet,.css,.html等等)之前执行;

可以使请求得到目标资源,也可以阻止请求得到目标资源;

  - 过滤器有拦截的功能!

 

过滤器的实现:

1、创建一个类实现Filter接口;

2、在web.xml中配置

 

Filter三个方法(生命周期):

   /**
     * 创建之后立即执行,用来做初始化,Filter在服务器启动时就创建
     */
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    /**
     * 每次过滤时都会执行
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

    }
    /**
     * 销毁之前执行,用来对非内存资源进行释放
     */
    public void destroy() {
    }

服务器启动就创建:

Filter是单例的,和Servlet一样!

 

web.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>day0412_1</display-name>
 <filter>
 <filter-name>AFilter</filter-name>    <!-- 自定义名称 -->
 <filter-class>demoFilter.AFilter</filter-class> <!-- Filter类所在路径 -->
 </filter>
 <filter-mapping>
 <filter-name>AFilter</filter-name> <!-- 自定义名称匹配 -->
 <url-pattern>/*</url-pattern> <!-- 拦截的文件路径 -->
 </filter-mapping>
</web-app>

创建一个AServlet来实验:

package demo1;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/AServlet")
public class AServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("------Aervlet-----");
    }
}

操作开始:

当我们访问创建的AServlet时,并不会输出AServlet中的内容,而是输出的AFilter中的内容:

Filter参数:

1、FilterConfig:等同Servlet的ServletConfig

一个过滤器配置对象,servlet容器在初始化期间使用它将信息传递给过滤器。

public interface FilterConfig
获取初始化参数:public java.util.Enumeration<java.lang.String> getInitParameter()
获取Filter名称:public java.lang.String getFilterName()
获取ServletContext对象:public ServletContext getServletContext()

2、FilterChain:

FilterChain是servlet容器提供给开发人员的一个对象,它提供了资源过滤请求的调用链的视图。筛选器使用FilterChain来调用链中的下一个筛选器,或者如果调用筛选器是链中的最后一个筛选器,则调用链末端的资源。

public interface FilterChain

FilterChain只有一个方法:

这个方法与Filter中的方法名称一样,但是参数不一样。

对拦截的目标进行放行通过:public void doFilter(ServletRequest request,ServletResponse response) throws java.io.IOException,ServletException

 

此时添加了chain.doFilter()方法后再访问AServlet:

 拦截成功,但是也放其通过。

放行就相当于调用了目标资源(Servlet)的service()方法。

 

访问其它资源:

这里有一个jsp文件:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="ISO-8859-1"%>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>my index.jsp</title>
</head>
<body>
<% System.out.println("This is a apple!!!!!"); %>
<h1>This is a JSP named index.jsp!!</h1>
</body>
</html>

随后在浏览器访问这个jsp文件:

这里有内容输出,但是是因为我们进行了放行操作,查看控制台:

放行Servlet相当于执行service()方法,那么放行JSP就相当于执行服务器中的一个index.jsp.class编译文件,这个文件中包含了jsp中的可执行代码。

 

posted on 2022-04-12 22:38  时间完全不够用啊  阅读(128)  评论(0编辑  收藏  举报