亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解JavaWeb中的過(guò)濾器Filter

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

一、什么是過(guò)濾器

1.Filter過(guò)濾器的作用:攔截請(qǐng)求

2.攔截請(qǐng)求常見(jiàn)場(chǎng)景:

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

在這里插入圖片描述 

1.1 使用步驟

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

二、初體驗(yàn)

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

在這里插入圖片描述

2.1 mynav.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>導(dǎo)航</title>
</head>
<body>
<table>
    <tr>
        <td>
            百度<input type="text">
        </td>
    </tr>
    <tr>
        <td>
            Google<input type="text">
        </td>
    </tr>
    <tr>
        <td>
            必應(yīng)<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
 */
 //注意導(dǎo)包是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("來(lái)到Filter過(guò)濾器");
        HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
        HttpSession session = httpServletRequest.getSession();
        //如果session的屬性u(píng)ser為空,轉(zhuǎn)發(fā)到首頁(yè)
        if(session.getAttribute("user")==null){
            servletRequest.getRequestDispatcher("/index.jsp").forward(servletRequest,servletResponse);
        }
        else{//如果session的屬性u(píng)ser不為空,則放行
            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>

三、測(cè)試

1.啟動(dòng)服務(wù)器

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

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

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

四、Filter的生命周期

Filter 的生命周期包含幾個(gè)方法

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

2、init 初始化方法

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

3、doFilter 過(guò)濾方法

第3 步,每次攔截到請(qǐng)求,就會(huì)執(zhí)行

4、destroy 銷毀

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

五、FilterConfig類

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

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

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

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

<!--filter 標(biāo)簽用于配置一個(gè)Filter 過(guò)濾器-->
<filter>
<!--給filter 起一個(gè)別名-->
<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過(guò)濾器鏈

多個(gè)過(guò)濾器

在這里插入圖片描述

七、Filter 的攔截路徑

Filter 過(guò)濾器它只關(guān)心請(qǐng)求的地址是否匹配,不關(guān)心請(qǐng)求的資源是否存在?。?!

八、精確匹配

8.1 目錄匹配

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

8.2 后綴名匹配

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

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

相關(guān)文章

  • 解析springboot整合谷歌開(kāi)源緩存框架Guava Cache原理

    解析springboot整合谷歌開(kāi)源緩存框架Guava Cache原理

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

    java 異常的實(shí)例詳解

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

    SpringBoot詳細(xì)講解多個(gè)配置文件的配置流程

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

    Java代碼里如何拼接SQL語(yǔ)句到mybatis的xml

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

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

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

    通過(guò)spring注解開(kāi)發(fā),簡(jiǎn)單測(cè)試單例和多例區(qū)別

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

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

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

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

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

    @RequestBody的使用案例代碼

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

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

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

最新評(píng)論