国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Javaweb | 過濾器、配置、過濾器鏈、優(yōu)先級

這篇具有很好參考價值的文章主要介紹了Javaweb | 過濾器、配置、過濾器鏈、優(yōu)先級。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Javaweb | 過濾器、配置、過濾器鏈、優(yōu)先級

??wei_shuo的個人主頁

??wei_shuo的學(xué)習(xí)社區(qū)

??Hello World !


過濾器

Javaweb | 過濾器、配置、過濾器鏈、優(yōu)先級

概念

過濾器(Filter)是處于客戶端與服務(wù)器目標(biāo)資源之間的一道過濾技術(shù)

  • 用戶的請求和響應(yīng)都需要經(jīng)過過濾器

過濾器作用

  • 執(zhí)行地位在Servlet之前,客戶端發(fā)送請求是,會先經(jīng)過Filter,再到達(dá)目標(biāo)Servlet中;響應(yīng)時,會根據(jù)執(zhí)行流程再次反向執(zhí)行Filter
  • 可以解決多個Servlet共性代碼的冗余問題
  • 過濾器可以對請求前和請求后進(jìn)行邏輯處理

編寫過濾器

Servlet API中提供了一個Filter接口,開發(fā)人員編寫一個Java類實現(xiàn)了這個接口即可,這個Java類稱為過濾器

實現(xiàn)過程

  • 編寫Java類實現(xiàn)Filter接口
  • 在doFilter方法中編寫攔截邏輯
  • 設(shè)置攔截路徑

FilterChain 過濾鏈 作用:

它可以指向下一個資源,如果還有過濾器,則繼續(xù)進(jìn)行下一次的過濾,如果沒有過濾器,則會指向資源

  • MyFilter類
package com.woniu.Filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter(value = "/t")
public class MyFilter implements Filter {

    //初始化方法
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    //doFilter方法中編寫攔截邏輯
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("---MyFilter---");

        //FilterChain過濾鏈,讓請求繼續(xù)
        filterChain.doFilter(servletRequest, servletResponse);
       
        System.out.println("---End---");

        /*
        輸出結(jié)果:
        ---MyFilter---
        ---Target---
        ---End---
        */
    }

    //銷毀方法
    @Override
    public void destroy() {

    }
}
  • TargetServlet類
package com.woniu.Filter;

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

//注解過濾器,指定過濾目標(biāo)資源
@WebServlet(name = "TargetServlet", value = "/t")
public class TargetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("---Target---");
       
        /*
        輸出結(jié)果:
        ---MyFilter---
        ---Target---
        */
    }
}

過濾器配置

注解過濾器

在自定義的Filter類上使用注解

@WebServlet(value="/過濾目標(biāo)資源");

@WebServlet(name = "TargetServlet", value = "/t")

xml配置

<!--<!DOCTYPE web-app PUBLIC-->
<!--        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"-->
<!--        "http://java.sun.com/dtd/web-app_2_3.dtd" >-->

<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_3_1.xsd"
         version="3.1"
         metadata-complete="false">


    <!--起始頁面-->
    <!--<welcome-file-list>-->
    <!--<welcome-file></welcome-file>-->
    <!--</welcome-file-list>-->

    <filter>
        <filter-name>xml</filter-name>
        <filter-class>com.woniu.Filter.XmlFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>xml</filter-name>
        <url-pattern>/test</url-pattern>
    </filter-mapping>


</web-app>

過濾器鏈 & 優(yōu)先級

過濾器鏈

  • 概念:

客戶端對服務(wù)器請求之后,服務(wù)器調(diào)用Servlet之前會執(zhí)行一組過濾器(多個過濾器),那么這組過濾器就稱為一條過濾器鏈

  • 流程:

每個過濾器實現(xiàn)某個特定的功能,當(dāng)?shù)谝粋€Filter的doFilter方法被調(diào)用時,Web服務(wù)器會創(chuàng)建一個代表Filter鏈的FilterChain對象傳遞給該方法,在doFilter方法中,開發(fā)人員如果調(diào)用了FilterChain對象的doFilter方法,則Web服務(wù)器會檢查FilterChain對象中是否還有Filter,如果有,則調(diào)用第二個Filter,如果沒有,則調(diào)用目標(biāo)資源

Javaweb | 過濾器、配置、過濾器鏈、優(yōu)先級

過濾器優(yōu)先級

一個Web應(yīng)用中,可以開發(fā)編寫多個Filter,這些Filter組合起來稱為一個Filter鏈

優(yōu)先級:

  • 如果為注解的話,是按照類全名稱的字符串順序決定作用順序
  • 如果web.xml,按照filter-mapping注冊順序,從上往下
  • web.xml配置高于注解方式
  • 如果注解和web.xml同時配置,會創(chuàng)建多個過濾器對象,造成過濾多次

過濾器攔截路徑

  • 精確攔截匹配:/index.jsp
  • 后綴攔截匹配:*.jsp
  • 通配符攔截匹配:/* 表示攔截所有

過濾器解決編碼問題

  • Login.html頁面
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<form action="/Servlet_Projects_war/login" method="post">
    用戶名:<input type="text" name="username"/><br>
    密碼:<input type="password" name="password"/><br>
    <input type="submit" value="登錄">
</form>
</body>
</html>
  • LoginServlet類
package com.woniu.Filter;

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

@WebServlet(name = "LoginServlet", value = "/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //根據(jù)表單組件名稱獲取提交數(shù)據(jù)
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        System.out.println(username + "\t" + password);
    }
}
  • EncodingFilter過濾器類
package com.woniu.Filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter(value = "/login")
public class EncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //統(tǒng)一處理請求和響應(yīng)的亂碼
        servletRequest.setCharacterEncoding("UTF-8");
        servletResponse.setContentType("text/html;charset=utf-8");

        //FilterChain過濾鏈,讓請求繼續(xù)
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {

    }
}
  • 結(jié)果
張三	123456

?? 結(jié)語:創(chuàng)作不易,如果覺得博主的文章賞心悅目,還請——點贊??收藏??評論??


Javaweb | 過濾器、配置、過濾器鏈、優(yōu)先級文章來源地址http://www.zghlxwxcb.cn/news/detail-416117.html

到了這里,關(guān)于Javaweb | 過濾器、配置、過濾器鏈、優(yōu)先級的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • JavaWeb三大組件之一Filter(過濾器)

    JavaWeb三大組件之一Filter(過濾器)

    攔截所有訪問web資源的請求或者響應(yīng)(servlet、Jsp頁面、HTML頁面),從而實現(xiàn)我們自己的業(yè)務(wù)邏輯,這些邏輯可以是實現(xiàn)訪問權(quán)限的控制、過濾敏感詞、壓縮響應(yīng)等功能。 過濾器是\\\"鏈接\\\"在容器的處理過程中的,它會在servlet處理器之前訪問進(jìn)入的請求,并且在響應(yīng)信息返回客服

    2024年02月07日
    瀏覽(30)
  • Idea JavaWeb項目,繼承自HttpFilter的過濾器,啟動Tomcat時部署工件出錯

    Idea JavaWeb項目,繼承自HttpFilter的過濾器,啟動Tomcat時部署工件出錯

    JDK版本:1.8 Tomcat版本:8.5 解決: 打開文件 - 項目結(jié)構(gòu) - 工件,找到WEB - INF下的lib目錄,右鍵 添加副本 - 庫文件 全部選中 點擊應(yīng)用 - 確定 重啟Tomcat服務(wù)器即可。

    2024年02月07日
    瀏覽(31)
  • JavaWEB學(xué)習(xí)筆記(二)------HTTP、Servlet、會話、過濾器、監(jiān)聽器、Ajax、前端工程化

    JavaWEB學(xué)習(xí)筆記(二)------HTTP、Servlet、會話、過濾器、監(jiān)聽器、Ajax、前端工程化

    目錄 HTTP HTTP1.1 請求和響應(yīng)的報文格式 請求報文 響應(yīng)報文 常見狀態(tài)響應(yīng)碼 Servlet? 靜態(tài)資源和動態(tài)資源 ?編輯 ?Servlet簡介? Servlet開發(fā)流程 導(dǎo)入和響應(yīng)頭問題 url-pattern不同寫法 url-pattern工作方式 Servlet注解方式配置 Servlet生命周期? Servlet繼承結(jié)構(gòu) Servlet接口 GenerisServlet類 Ht

    2024年01月21日
    瀏覽(28)
  • springboot-配置優(yōu)先級

    springboot-配置優(yōu)先級

    類型 1.properties(三者同時存在,優(yōu)先級最高) 2.yml 3.yaml(最低) 除此之外,可以在啟動配置處修改 在jar包中修改配置屬性 1.pom文件需要導(dǎo)入打包的插件 2.使用package命令 3.用打開目錄的方式打開 4.在存放jar包的文件夾下打開命令行 5.java -jar jar包名,就能啟動springboot項目 6.jav

    2024年02月12日
    瀏覽(21)
  • nacos配置文件優(yōu)先級

    nacos配置文件優(yōu)先級

    當(dāng)前配置文件如下: 優(yōu)先級:userservice-dev.yml(當(dāng)前環(huán)境配置) userservice.yml(nacos上的) application.yml(本地的) 擴(kuò)展配置(extension-configs) 共享配置(shared-configs) 同為擴(kuò)展配置,存在如下優(yōu)先級關(guān)系:extension-configs[3] extension-configs[2] extension-configs[1] extension-configs[0] 同為共享配置

    2024年02月12日
    瀏覽(20)
  • springboot 配置文件優(yōu)先級

    springboot配置文件可以使用properties、yaml,一個系統(tǒng)中最好只使用一種格式,如果在同一個位置使用了properties、yaml,那么properties會覆蓋yaml,個人推薦使用yaml,支持結(jié)構(gòu)化,層次更清晰。 如果系統(tǒng)中有application.yml,application-specific.yml,jar包外也有application.yml,application-specif

    2024年02月13日
    瀏覽(20)
  • SpringBoot 配置文件加載優(yōu)先級

    SpringBoot 配置文件加載優(yōu)先級

    最近在使用k8s部署項目的時候,發(fā)現(xiàn)Dockerfile文件中的命令后面跟的參數(shù),無法覆蓋nacos中的參數(shù),今天有時間正好來整理一下Springboot配置的加載順序 整理加載順序第一個肯定看官方文檔:https://docs.spring.io/spring-boot/docs/2.2.9.RELEASE/reference/htmlsingle/#boot-features-external-config 看不懂我們直

    2024年02月02日
    瀏覽(25)
  • SpringBoot項目配置方式及優(yōu)先級

    SpringBoot項目配置方式及優(yōu)先級

    說明:SpringBoot支持以下五種方式配置方式,例如將項目的Tomcat端口從8080,更改為9000,可以使用如下方式配置 在啟動窗口,鼠標(biāo)右鍵,選擇“Edit Configurations”,在彈出來的窗口中,在Program arguments,里面填“–server.port=9000”,配置格式為兩個小橫杠(–)開頭 這種方式,可

    2024年02月08日
    瀏覽(21)
  • Spring Boot 配置屬性設(shè)置優(yōu)先級

    文章首發(fā)地址 Spring Boot設(shè)計了非常特殊的加載指定屬性文件(PropertySource)的順序,以允許對屬性值進(jìn)行合理的覆蓋。屬性值會以下面的優(yōu)先級進(jìn)行設(shè)置。 home目錄下的Devtools全局設(shè)置屬性(~/.spring-boot-devtools.properties,條件是當(dāng)devtools激活時)。 @TestPropertySource注解的測試用例

    2024年02月16日
    瀏覽(25)
  • SpringBoot啟動過程探究及配置文件優(yōu)先級解析

    如果項目依賴中存在org.springframework.web.reactive.DispatcherHandler,并且不存在org.springframework.web.servlet.DispatcherServlet,那么應(yīng)用類型為WebApplicationType.REACTIVE 如果項目依賴中不存在org.springframework.web.reactive.DispatcherHandler,也不存在org.springframework.web.servlet.DispatcherServlet,那么應(yīng)用類型為

    2024年02月09日
    瀏覽(48)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包