欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解JavaWeb中的過濾器Filter

 更新時間:2021年05月17日 11:11:26   作者:梓阡  
今天給大家講一下JavaWeb中的過濾器Filter,文中有非常詳細的代碼示例,對正在學習java的小伙伴們很有幫助,需要的朋友可以參考下

一、什么是過濾器

1.Filter過濾器的作用:攔截請求

2.攔截請求常見場景:

(1)權(quán)限檢查
(2)日記操作
(3)事務管理

在這里插入圖片描述 

1.1 使用步驟

Filter 過濾器的使用步驟:
1、編寫一個類去實現(xiàn)Filter 接口
2、實現(xiàn)過濾方法doFilter()
3、到web.xml 中去配置Filter 的攔截路徑

二、初體驗

web工程下新建一個admin目錄,作為需要權(quán)限才能訪問的目錄,其中有兩個文件

在這里插入圖片描述

2.1 mynav.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>導航</title>
</head>
<body>
<table>
    <tr>
        <td>
            百度<input type="text">
        </td>
    </tr>
    <tr>
        <td>
            Google<input type="text">
        </td>
    </tr>
    <tr>
        <td>
            必應<input type="text">
        </td>
    </tr>
</table>
</body>
</html>

2.2 FilterServlet程序

package com.filter.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * @author ningqian
 * @create -05-16 20:17
 */
 //注意導包是javax
public class FilterServlet implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("來到Filter過濾器");
        HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
        HttpSession session = httpServletRequest.getSession();
        //如果session的屬性user為空,轉(zhuǎn)發(fā)到首頁
        if(session.getAttribute("user")==null){
            servletRequest.getRequestDispatcher("/index.jsp").forward(servletRequest,servletResponse);
        }
        else{//如果session的屬性user不為空,則放行
            filterChain.doFilter(servletRequest,servletResponse);
        }
    }

    @Override
    public void destroy() {

    }
}

2.3 HelloServlet程序

package com.filter.filter;

import java.io.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
    private String message;

    public void init() {
        message = "Hello World!";
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");

        // Hello
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body></html>");
        HttpSession session = request.getSession();
        session.setAttribute("user","ningqian");
    }

    public void destroy() {
    }
}

2.4 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>FilterServlet</filter-name>
        <filter-class>com.filter.filter.FilterServlet</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterServlet</filter-name>
         <!--表示受限的文件-->
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.filter.filter.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

2.5 index.jsp

<?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>FilterServlet</filter-name>
        <filter-class>com.filter.filter.FilterServlet</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterServlet</filter-name>
         <!--表示受限的文件-->
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.filter.filter.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

三、測試

1.啟動服務器

2.在瀏覽器地址欄輸入:http:localhost:8080/filter/admin/1.jpg
表示直接訪問admin目錄下的圖片
由于此目錄下的文件在web.xml中配置為受限,所以此時請求被FilterServlet收到,使用doFilter方法進行請求過濾檢查,發(fā)現(xiàn)會話session中沒有user屬性,所以將該請求轉(zhuǎn)發(fā)到index.jsp

3.在瀏覽器地址欄輸入:http:localhost:8080/filter/
首頁不在受限的目錄下,所以可以直接訪問,點擊頁面上的鏈接Hello Servlet,此時,將請求發(fā)到服務器,HelloServlet程序接收,通過doGet()方法,給會話session的user賦值

4.再次在瀏覽器輸入:http:localhost:8080/filter/admin/1.jpg,此時就可以正常訪問。

四、Filter的生命周期

Filter 的生命周期包含幾個方法

1、構(gòu)造器方法

2、init 初始化方法

第1,2 步,在web 工程啟動的時候執(zhí)行(Filter 已經(jīng)創(chuàng)建)

3、doFilter 過濾方法

第3 步,每次攔截到請求,就會執(zhí)行

4、destroy 銷毀

第4 步,停止web 工程的時候,就會執(zhí)行(停止web 工程,也會銷毀Filter 過濾器)

五、FilterConfig類

FilterConfig 類見名知義,它是Filter 過濾器的配置文件類。
Tomcat 每次創(chuàng)建Filter 的時候,也會同時創(chuàng)建一個FilterConfig 類,這里包含了Filter 配置文件的配置信息。
FilterConfig 類的作用是獲取filter 過濾器的配置內(nèi)容

1、獲取Filter 的名稱filter-name 的內(nèi)容:filterConfig.getFilterName()

2、獲取在Filter 中配置的init-param 初始化參數(shù)(在web.xml中配置):filterConfig.getInitParameter(“username”)

3、獲取ServletContext 對象:filterConfig.getServletContext()

<!--filter 標簽用于配置一個Filter 過濾器-->
<filter>
<!--給filter 起一個別名-->
<filter-name>AdminFilter</filter-name>
<!--配置filter 的全類名-->
<filter-class>com.atguigu.filter.AdminFilter</filter-class>
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost3306/test</param-value>
</init-param>
</filter>

六、FilterChain過濾器鏈

多個過濾器

在這里插入圖片描述

七、Filter 的攔截路徑

Filter 過濾器它只關(guān)心請求的地址是否匹配,不關(guān)心請求的資源是否存在?。。?/strong>

八、精確匹配

8.1 目錄匹配

<url-pattern>/admin/*</url-pattern>

8.2 后綴名匹配

<url-pattern>*.html</url-pattern>

到此這篇關(guān)于詳解JavaWeb中的過濾器Filter的文章就介紹到這了,更多相關(guān)JavaWeb Filter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解析springboot整合谷歌開源緩存框架Guava Cache原理

    解析springboot整合谷歌開源緩存框架Guava Cache原理

    本文主要為大家解析了springboot整合谷歌開源緩存框架Guava Cache的原理以及在實際開發(fā)過程中的使用,附含源碼,有需要的朋友可以參考下
    2021-08-08
  • java 異常的實例詳解

    java 異常的實例詳解

    這篇文章主要介紹了java 異常的實例詳解的相關(guān)資料,希望通過本文大家能徹底掌握java異常的使用方法,需要的朋友可以參考下
    2017-09-09
  • SpringBoot詳細講解多個配置文件的配置流程

    SpringBoot詳細講解多個配置文件的配置流程

    SpringBoot項目是一個標準的Maven項目,它的配置文件需要放在src/main/resources/下,其文件名必須為application,其存在兩種文件形式,分別是properties和yaml(或者yml)文件
    2022-06-06
  • Java代碼里如何拼接SQL語句到mybatis的xml

    Java代碼里如何拼接SQL語句到mybatis的xml

    這篇文章主要介紹了Java代碼里拼接SQL語句到mybatis的xml操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java實現(xiàn)Promise.all()的示例代碼

    Java實現(xiàn)Promise.all()的示例代碼

    這篇文章主要介紹了Java實現(xiàn)Promise.all()的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 通過spring注解開發(fā),簡單測試單例和多例區(qū)別

    通過spring注解開發(fā),簡單測試單例和多例區(qū)別

    這篇文章主要介紹了通過spring注解開發(fā),簡單測試單例和多例區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 在SpringBoot中使用YourKit進行性能調(diào)優(yōu)的教程詳解

    在SpringBoot中使用YourKit進行性能調(diào)優(yōu)的教程詳解

    在應用程序的開發(fā)過程中,性能調(diào)優(yōu)是一個重要的環(huán)節(jié),在SpringBoot應用程序中,我們可以使用YourKit來進行性能調(diào)優(yōu),YourKit是一款非常強大的Java性能調(diào)優(yōu)工具,在本文中,我們將介紹如何在 SpringBoot應用程序中使用YourKit進行性能調(diào)優(yōu)
    2023-06-06
  • Java8實現(xiàn)FTP及SFTP文件上傳下載

    Java8實現(xiàn)FTP及SFTP文件上傳下載

    這篇文章主要介紹了Java8實現(xiàn)FTP及SFTP文件上傳下載,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • @RequestBody的使用案例代碼

    @RequestBody的使用案例代碼

    @RequestBody主要用來接收前端傳遞給后端的json字符串中的數(shù)據(jù)的,這篇文章主要介紹了@RequestBody的使用,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • springboot 無法掃描到父類模塊中Bean的原因及解決

    springboot 無法掃描到父類模塊中Bean的原因及解決

    這篇文章主要介紹了springboot 無法掃描到父類模塊中Bean的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論