国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > 大數(shù)據(jù)從入門到深入:JavaEE 之 動態(tài)網(wǎng)頁開發(fā)基礎(chǔ) 過濾器的簡單使用

大數(shù)據(jù)從入門到深入:JavaEE 之 動態(tài)網(wǎng)頁開發(fā)基礎(chǔ) 過濾器的簡單使用

時間:2023-05-24 22:18:02 | 來源:網(wǎng)站運(yùn)營

時間:2023-05-24 22:18:02 來源:網(wǎng)站運(yùn)營

大數(shù)據(jù)從入門到深入:JavaEE 之 動態(tài)網(wǎng)頁開發(fā)基礎(chǔ) 過濾器的簡單使用:

第六章 JSP拓展 : 過濾器的簡單使用

6.1 過濾器概述

6.1.1 什么是過濾器?

Java中的Filter 并不是一個標(biāo)準(zhǔn)的Servlet ,它不能處理用戶請求,也不能對客戶端生成響應(yīng)。 主要用于對HttpServletRequest 進(jìn)行預(yù)處理,也可以對HttpServletResponse 進(jìn)行后處理,是個典型的 處理鏈。

優(yōu)點(diǎn):過濾鏈的好處是,執(zhí)行過程中任何時候都可以打斷,只要不執(zhí)行chain.doFilter()就不會再執(zhí)行后 面的過濾器和請求的內(nèi)容。

而在實際使用時,就要特別注意過濾鏈的執(zhí)行順序問題;

6.1.2 主要作用

在HttpServletRequest 到達(dá)Servlet 之前,攔截客戶的HttpServletRequest 。

根據(jù)需要檢查HttpServletRequest ,也可以修改HttpServletRequest 頭和據(jù)。

在HttpServletResponse 到達(dá)客戶端之前,攔截HttpServletResponse 。

根據(jù)需要檢查HttpServletResponse ,可以修改HttpServletResponse 頭和數(shù)據(jù)。

所以我們可以利用過濾器,在我們每次真正處理頁面請求之前,設(shè)定request的編碼這樣我們就 不用挨個servlet設(shè)置編碼了;

6.2 過濾器概述

6.2.1 創(chuàng)建一個過濾器

在項目的util包中點(diǎn)擊鼠標(biāo)右鍵,選擇 "new" --> "other"

在彈出的窗口中 輸入 filter,選擇Filter 點(diǎn)擊 "next"

在彈出的頁面中輸入過濾器名稱

輸入名稱后點(diǎn)擊 "Finish" 即可

package com.hnxy.web;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;/** * Servlet Filter implementation class EncodingFitler */public class EncodingFitler implements Filter { /** * Default constructor. */ public EncodingFitler() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub // place your code here // pass the request along the filter chain chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub }}

6.2.2 過濾器方法介紹

1.public void init(FilterConfig filterConfig) throws ServletException
由 Web 容器調(diào)用,指示將放入服務(wù)中的過濾器。servlet 容器只在實例化過濾器之后調(diào)用一次 init 方法。 在要求過濾器做任何過濾工作之前,init 方法必須成功完成。如果 init 方法拋出 ServletException或沒有 在 Web 容器定義的時間段內(nèi)返回,則 Web 容器無法將過濾器放入服務(wù)中。這個和Servlet的生命周期有 點(diǎn)類似,也是只初始化一次,destroy()也是執(zhí)行一次。

2.public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException
每次由于對鏈末尾的某個資源的客戶端請求而通過鏈傳遞請求/響應(yīng)對時,容器都會調(diào)用 Filter 的 doFilter 方法。傳入此方法的 FilterChain 允許 Filter 將請求和響應(yīng)傳遞到鏈中的下一個實體。
此方法的典型實現(xiàn)遵循以下模式:
1. 檢查請求
2. 有選擇地將帶有自定義實現(xiàn)的請求對象包裝到用于輸入過濾的過濾器內(nèi)容或頭中
3. 有選擇地將帶有自定義實現(xiàn)的響應(yīng)對象包裝到用于輸出過濾的過濾器內(nèi)容或頭中
4. a) 既可以使用 FilterChain 對象 (chain.doFilter()) 調(diào)用鏈中的下一個實體,
4. b) 也可以不將請求/響應(yīng)對傳遞給過濾器鏈中的下一個實體,從而阻塞請求處理
5. 在調(diào)用過濾器鏈中的下一個實體之后直接設(shè)置響應(yīng)上的頭。

3.public void destroy()
由 Web 容器調(diào)用,指示將從服務(wù)中取出的過濾器。此方法僅在過濾器的 doFilter 方法中的所有線程都已 退出之后調(diào)用一次,或者在過了超時期之后調(diào)用。在調(diào)用此方法之后,Web 容器不會再對此過濾器實例 調(diào)用 doFilter 方法。此方法為過濾器提供了一個清除持有的所有資源(比如內(nèi)存、文件句柄和線程)的 機(jī)會,并確保任何持久狀態(tài)都與內(nèi)存中該過濾器的當(dāng)前狀態(tài)保持同步。

6.2.3 過濾器簡單使用

1) 修改攔截規(guī)則,打開web.xml找到過濾器的配置部分(和servlet很像就是名稱不一樣)

<filter> <display-name>EncodingFitler</display-name> <filter-name>EncodingFitler</filter-name> <filter-class>com.hnxy.web.EncodingFitler</filter-class> </filter> <filter-mapping> <filter-name>EncodingFitler</filter-name> <url-pattern>/EncodingFitler</url-pattern> </filter-mapping>url-Pattern 設(shè)置攔截過則 /* 代表任何對servlet的請求 過濾器都要先攔截處理后再交給具體 servlet

<filter> <display-name>EncodingFitler</display-name> <filter-name>EncodingFitler</filter-name> <filter-class>com.hnxy.web.EncodingFitler</filter-class> </filter> <filter-mapping> <filter-name>EncodingFitler</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>2) 編寫doFilter方法

/** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 設(shè)置請求流編碼 request.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); }完成效果

package com.hnxy.web;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;/** * Servlet Filter implementation class EncodingFitler */public class EncodingFitler implements Filter { /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 設(shè)置請求流編碼 request.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub }}3) 測試

頁面 :

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><div> <form action="Test1Action" method="post"> <p> 請輸入名稱 : <input type="text" name="userName" /> </p> <p> <button type="submit">提交</button> </p> </form></div></body></html>servlet :

package com.hnxy.web;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;/** * Servlet implementation class Test1Action */public class Test1Action extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(request.getParameter("userName")); }}我們可以看到,現(xiàn)在servlet沒有對數(shù)據(jù)做任何參數(shù)上的處理,如果沒有過濾器是這樣的:

設(shè)置過濾器前

設(shè)置過濾器后

6.3 過濾器實戰(zhàn)-druid的web監(jiān)控頁面配置

其實我們學(xué)習(xí)過濾器主要是學(xué)過濾器的原理與配置,以后需要我們自己寫過濾器的時候很少, 都是別的技術(shù)寫好過濾器我們引用即可,就好比我們現(xiàn)在使用的數(shù)據(jù)源

druid就是其中之一,druid數(shù)據(jù)源不光有出色的數(shù)據(jù)庫連接的管理功能,它還有很強(qiáng)悍的web管 理功能!現(xiàn)在我們就來簡單配置一個druid的web管理功能

很簡單一共修改兩個地方即可

1) 修改數(shù)據(jù)庫連接類打開SQLweb統(tǒng)計功能

package com.hnxy.utils;import java.sql.SQLException;import com.alibaba.druid.pool.DruidDataSource;/** * 數(shù)據(jù)庫連接工具類 * @author My * */public class JdbcUtil { // 創(chuàng)建數(shù)據(jù)庫的連接對象 private static final String CONN_DRIVER = "com.mysql.jdbc.Driver"; private static final String CONN_URL = "jdbc:mysql://127.0.0.1:3306/userdb?characterEncoding=UTF-8"; private static final String CONN_USER = "root"; private static final String CONN_PASSWORD = "root"; // 創(chuàng)建數(shù)據(jù)源對象 private static DruidDataSource dataSource = new DruidDataSource(); // 賦值 static{ dataSource.setDriverClassName(CONN_DRIVER); dataSource.setUrl(CONN_URL); dataSource.setUsername(CONN_USER); dataSource.setPassword(CONN_PASSWORD); // 開啟SQL語句的統(tǒng)計功能 try { dataSource.addFilters("stat"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 添加獲取數(shù)據(jù)源的方法 * @return */ public static DruidDataSource getDataSource() { return dataSource; }}2) web.xml中加入druid的核心servlet和過濾器即可

<!-- Druid,監(jiān)控數(shù)據(jù)庫,以及WEB訪問連接信息 --> <filter> <filter-name>DruidWebStatFilter</filter-name> <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class> </filter> <filter-mapping> <filter-name>DruidWebStatFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置 Druid 監(jiān)控信息顯示頁面 --> <servlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> <init-param> <!-- 允許清空統(tǒng)計數(shù)據(jù) --> <param-name>resetEnable</param-name> <param-value>true</param-value> </init-param> <init-param> <!-- 用戶名 --> <param-name>loginUsername</param-name> <param-value>admin</param-value> </init-param> <init-param> <!-- 密碼 --> <param-name>loginPassword</param-name> <param-value>admin123</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mapping>配置好之后正常開啟tomcat,正常訪問項目,你會發(fā)現(xiàn)加不加都沒有什么問題!你可以先玩一會 兒項目,然后在訪問下面的地址

http://127.0.0.1:8080/javaweb_class3_tp2/druid

你就會發(fā)現(xiàn)druid的管理界面了

我們設(shè)置的是 用戶名 admin 密碼 admin123 輸入即可登錄

登錄后顯示druid的監(jiān)控主頁面,主頁面中可以查看當(dāng)前數(shù)據(jù)源,SQL語句性能監(jiān)控,web 請求 URL和HttpSession的監(jiān)控

SQL監(jiān)控頁面

HTTP URL監(jiān)控:

到此,我們JavaEE的web基礎(chǔ)階段全部完事!

關(guān)鍵詞:基礎(chǔ),過濾,使用,簡單,入門,數(shù)據(jù),深入,動態(tài)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉