當前位置:首頁 » 凈水方式 » 過濾器靜態化

過濾器靜態化

發布時間: 2021-03-05 09:02:32

1. 過濾器實現的filter介面是哪個

Filter簡介

Filter也稱之為過濾器,它是Servlet技術中最實用的技術,Web開發人員通過Filter技術,對web伺服器管理的所有web資源:例如Jsp,
Servlet, 靜態圖片文件或靜態 html
文件等進行攔截,從而實現一些特殊的功能。例如實現URL級別的許可權訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。

它主要用於對用戶請求進行預處理,也可以對HttpServletResponse進行後處理。使用Filter的完整流程:Filter對用戶請求進行預處理,接著將請求交給Servlet進行處理並生成響應,最後Filter再對伺服器響應進行後處理。

Filter功能

在HttpServletRequest到達 Servlet 之前,攔截客戶的HttpServletRequest 。根據需要檢查HttpServletRequest,也可以修改HttpServletRequest 頭和數據。
在HttpServletResponse到達客戶端之前,攔截HttpServletResponse 。根據需要檢查HttpServletResponse,也可以修改HttpServletResponse頭和數據。

如何藉助Filter實現攔截功能

Filter介面中有一個doFilter方法,當開發人員編寫好Filter,並配置對哪個web資源進行攔截後,Web伺服器每次在調用web資源的service方法之前,都會先調用一下filter的doFilter方法,因此,在該方法內編寫代碼可達到如下目的:

調用目標資源之前,讓一段代碼執行。
是否調用目標資源(即是否讓用戶訪問web資源)。
web伺服器在調用doFilter方法時,會傳遞一個filterChain對象進來,filterChain對象是filter介面中最重要的一個對象,它也提供了一個doFilter方法,開發人員可以根據需求決定是否調用此方法,調用該方法,則web伺服器就會調用web資源的service方法,即web資源就會被訪問,否則web資源不會被訪問。

Filter開發兩步走

編寫java類實現Filter介面,並實現其doFilter方法。
在web.xml文件中對編寫的filter類進行注冊,並設置它所能攔截的資源。

web.xml配置各節點介紹:

<filter>指定一個過濾器。
<filter-name>用於為過濾器指定一個名字,該元素的內容不能為空。
<filter-class>元素用於指定過濾器的完整的限定類名。
<init-param>元素用於為過濾器指定初始化參數,它的子元素<param-name>指定參數的名字,<param-value>指定參數的值。
在過濾器中,可以使用FilterConfig介面對象來訪問初始化參數。
<filter-mapping>元素用於設置一個 Filter 所負責攔截的資源。一個Filter攔截的資源可通過兩種方式來指定:Servlet 名稱和資源訪問的請求路徑
<filter-name>子元素用於設置filter的注冊名稱。該值必須是在<filter>元素中聲明過的過濾器的名字
<url-pattern>設置 filter 所攔截的請求路徑(過濾器關聯的URL樣式)
<servlet-name>指定過濾器所攔截的Servlet名稱。
<dispatcher>指定過濾器所攔截的資源被 Servlet 容器調用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默認REQUEST。用戶可以設置多個<dispatcher>子元素用來指定 Filter 對資源的多種調用方式進行攔截。
<dispatcher>子元素可以設置的值及其意義
REQUEST:當用戶直接訪問頁面時,Web容器將會調用過濾器。如果目標資源是通過RequestDispatcher的include()或forward()方法訪問時,那麼該過濾器就不會被調用。
INCLUDE:如果目標資源是通過RequestDispatcher的include()方法訪問時,那麼該過濾器將被調用。除此之外,該過濾器不會被調用。
FORWARD:如果目標資源是通過RequestDispatcher的forward()方法訪問時,那麼該過濾器將被調用,除此之外,該過濾器不會被調用。
ERROR:如果目標資源是通過聲明式異常處理機制調用時,那麼該過濾器將被調用。除此之外,過濾器不會被調用。

Filter鏈

在一個web應用中,可以開發編寫多個Filter,這些Filter組合起來稱之為一個Filter鏈。

web伺服器根據Filter在web.xml文件中的注冊順序,決定先調用哪個Filter,當第一個Filter的doFilter方法被調用時,web伺服器會創建一個代表Filter鏈的FilterChain對象傳遞給該方法。在doFilter方法中,開發人員如果調用了FilterChain對象的doFilter方法,則web伺服器會檢查FilterChain對象中是否還有filter,如果有,則調用第2個filter,如果沒有,則調用目標資源。

Filter的生命周期

public void init(FilterConfig filterConfig) throws ServletException;//初始化
和我們編寫的Servlet程序一樣,Filter的創建和銷毀由WEB伺服器負責。 web 應用程序啟動時,web 伺服器將創建Filter 的實例對象,並調用其init方法,讀取web.xml配置,完成對象的初始化功能,從而為後續的用戶請求作好攔截的准備工作(filter對象只會創建一次,init方法也只會執行一次)。開發人員通過init方法的參數,可獲得代表當前filter配置信息的FilterConfig對象。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;//攔截請求
這個方法完成實際的過濾操作。當客戶請求訪問與過濾器關聯的URL的時候,Servlet過濾器將先執行doFilter方法。FilterChain參數用於訪問後續過濾器。

public void destroy();//銷毀
Filter對象創建後會駐留在內存,當web應用移除或伺服器停止時才銷毀。在Web容器卸載 Filter 對象之前被調用。該方法在Filter的生命周期中僅執行一次。在這個方法中,可以釋放過濾器使用的資源。

FilterConfig介面

用戶在配置filter時,可以使用為filter配置一些初始化參數,當web容器實例化Filter對象,調用其init方法時,會把封裝了filter初始化參數的filterConfig對象傳遞進來。因此開發人員在編寫filter時,通過filterConfig對象的方法,就可獲得以下內容:

String getFilterName();//得到filter的名稱。
String getInitParameter(String name);//返回在部署描述中指定名稱的初始化參數的值。如果不存在返回null.
Enumeration getInitParameterNames();//返回過濾器的所有初始化參數的名字的枚舉集合。
public ServletContext getServletContext();//返回Servlet上下文對象的引用。

Filter使用案例

使用Filter驗證用戶登錄安全控制

前段時間參與維護一個項目,用戶退出系統後,再去地址欄訪問歷史,根據url,仍然能夠進入系統響應頁面。我去檢查一下發現對請求未進行過濾驗證用戶登錄。添加一個filter搞定問題!

先在web.xml配置

<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>com.action.login.SessionFilter</filter-class>
<init-param>
<param-name>logonStrings</param-name><!-- 對登錄頁面不進行過濾 -->
<param-value>/project/index.jsp;login.do</param-value>
</init-param>
<init-param>
<param-name>includeStrings</param-name><!-- 只對指定過濾參數後綴進行過濾 -->
<param-value>.do;.jsp</param-value>
</init-param>
<init-param>
<param-name>redirectPath</param-name><!-- 未通過跳轉到登錄界面 -->
<param-value>/index.jsp</param-value>
</init-param>
<init-param>
<param-name>disabletestfilter</param-name><!-- Y:過濾無效 -->
<param-value>N</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

接著編寫FilterServlet

package com.action.login;

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

/**
* 判斷用戶是否登錄,未登錄則退出系統
*/
public class SessionFilter implements Filter {

public FilterConfig config;

public void destroy() {
this.config = null;
}

public static boolean isContains(String container, String[] regx) {
boolean result = false;

for (int i = 0; i < regx.length; i++) {
if (container.indexOf(regx[i]) != -1) {
return true;
}
}
return result;
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest hrequest = (HttpServletRequest)request;
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);

String logonStrings = config.getInitParameter("logonStrings"); // 登錄登陸頁面
String includeStrings = config.getInitParameter("includeStrings"); // 過濾資源後綴參數
String redirectPath = hrequest.getContextPath() + config.getInitParameter("redirectPath");// 沒有登陸轉向頁面
String disabletestfilter = config.getInitParameter("disabletestfilter");// 過濾器是否有效

if (disabletestfilter.toUpperCase().equals("Y")) { // 過濾無效
chain.doFilter(request, response);
return;
}
String[] logonList = logonStrings.split(";");
String[] includeList = includeStrings.split(";");

if (!this.isContains(hrequest.getRequestURI(), includeList)) {// 只對指定過濾參數後綴進行過濾
chain.doFilter(request, response);
return;
}

if (this.isContains(hrequest.getRequestURI(), logonList)) {// 對登錄頁面不進行過濾
chain.doFilter(request, response);
return;
}

String user = ( String ) hrequest.getSession().getAttribute("useronly");//判斷用戶是否登錄
if (user == null) {
wrapper.sendRedirect(redirectPath);
return;
}else {
chain.doFilter(request, response);
return;
}
}

public void init(FilterConfig filterConfig) throws ServletException {
config = filterConfig;
}
}

這樣既可完成對用戶所有請求,均要經過這個Filter進行驗證用戶登錄。

防止中文亂碼過濾器

項目使用spring框架時。當前台JSP頁面和Java代碼中使用了不同的字元集進行編碼的時候就會出現表單提交的數據或者上傳/下載中文名稱文件出現亂碼的問題,那就可以使用這個過濾器。

<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name><!--用來指定一個具體的字元集-->
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name><!--true:無論request是否指定了字元集,都是用encoding;false:如果request已指定一個字元集,則不使用encoding-->
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

2. JSP 頁面靜態化 的幾種方式 哪個比較好

1.保存數據,然後馬上生成頁面,在頁面生成前,用戶是無法訪問到的。
這個方法最簡單,也最常見。
2.可以過濾器,可以用freemarker等

3. 問關於JSP頁面靜態化的幾個問題

1 保存數據,然後來馬上生成自頁面,在頁面生成前,用戶是無法訪問到的。
這個方法最簡單,也最常見

2 靜態頁面可以刪除,這樣會造成用戶不能訪問,但是後台可以重新生成所有的靜態頁面,其實就是更新一下。刪了再建。 這個操作要慎重。

合並之類的,都是先在後台數據處理完畢,再重新生成就行了。
至於一些老的頁面無法訪問,沒有辦法,誰讓你合並的。

3 靜態化方法就不說了,可以過濾器,可以用freemarker等。

4 如果靜態頁面能半動態化,比如用js,ajax等動態裝載頁面的部分,你就可以只更新那個部分就行了。 如果是完整靜態化,你只能重新生成了。

其實css之類的,是外部文件。所以靜態化頁面的設計很重要。要兼顧以後的維護和更新,不是簡單的堆砌一個頁面就行了。

4. 如何struts2中靜態化jsp

struts2框架用的不再使用過濾器了,使用攔截器interceptor
和過濾器一樣的使用方法,建議去看看

5. java web 過濾器跟攔截器的區別和使用

java web 過濾器跟攔截器的區別和使用分別介紹如下:

1、過濾器的使用

Filter主要對客戶端的請求和伺服器的響應進行過濾,使用場景:

  • 客戶端的請求到達伺服器,伺服器真正開始處理這個請求之前,要經過Filter的過濾

  • 伺服器真正的處理完這個請求,生成響應之後,要經過Filter的過濾,才能將響應發送給客戶端

作用:可以通過Filter技術,對web伺服器管理的所有web資源,例如JSP、Servlet、靜態圖片文件或靜態 html文件等進行攔截,從而實現一些特殊的功能。例如實現URL級別的許可權訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。

  • 配置Filter

同開發Servlet一樣,寫完了類,接下來就是配置了,我們需要在web.xml文件中配置Filter。具體的配置和Servlet配置如出一轍。

<filter>
<filter-name>log</filter-name>
<filter-class>com.jellythink.practise.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

上面配置中比較重要的就是url-pattern和dispatcher了。

過濾類:

public class LogFilter implements Filter
{
private FilterConfig config;

public void init(FilterConfig config)
{
this.config = config;
}

public void destroy()
{
this.config = null;
}

// 這個方法是Filter的核心方法
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
// 對用戶的請求進行處理
ServletContext context = this.config.getServletContext();
long begin = System.currentTimeMillis();

// 輸出過濾信息
System.out.println("開始過濾...");
HttpServletRequest hRequest = (HttpServletRequest)request;
System.out.println("Filter已經截獲到用戶請求的地址:" + hRequest.getServletPath());
// 處理完以後,將請求交給下一個Filter或者Servlet處理
chain.doFilter(request, response);
// 對伺服器的響應進行處理
long end = System.currentTimeMillis();
System.out.println("過濾結束");
System.out.println("請求被定為到:" + hRequest.getRequestURI() + "; 所花費的時間為:" + (end - begin));
}
}

2、攔截器的使用:

攔截器的主要作用是攔截用戶的請求並進行相應的處理。比如通過它來進行許可權驗證,或者是來判斷用戶是否登陸,或者是像12306那樣子判斷當前時間是否是購票時間。

1.在SpringMVC的配置文件中加上支持MVC的schema

xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation=" http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
下面是聲明示例:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

這樣在SpringMVC的配置文件中就可以使用mvc標簽了,mvc標簽中有一個mvc:interceptors是用於聲明SpringMVC的攔截器的。

6. 家用前置調壓凈水器能降低靜態水壓嗎

您是要用在哪裡,前置過濾器是有穩壓的作用,並且可以測水壓(帶水壓表),但好版像不能調壓。
您如果是要購權買凈水器,建議您先了解一下凈水器行業的兩大技術:1、反滲透。2、超濾。反滲透是全球公認的最安全、最科學的水處理技術,通過反滲透膜出來的水基本是純水,就是只有水分子,所以是最安全的。超濾的過濾精度緊次於反滲透,但出的不是純水,因為超濾膜的孔徑比反滲透大一些,所以有些廠家就宣傳超濾凈水器是可以保留礦物質的凈水器,其實是避重就輕,既然不是純水,那麼水裡就可能會有直徑小於超濾膜孔徑的細菌、病毒、化學污染物存在,當然也可能會有一些是對人體有益的元素,但在現在的水環境下,安全都沒有保證,何以談健康?所以我認為還是反滲透的凈水器比較好。
目前凈水行業凈水器的標准配置:
第一級:PP棉,作用:過濾大顆粒的污染物
第二級:顆粒活性炭GAC,作用:吸附水中的化學污染物
第三級:燒結活性炭CTO,作用:進一步吸附水中的化學污染物
第四級:RO反滲透膜/超濾膜,作用:徹底截留前三級未處理的污染物
第五級:後置活性炭T33,作用:改善純水/凈水的口感

請看私信

7. 為什麼重要頁面要靜態化

1
保存數據,然後馬上生成頁面,在頁面生成前,用戶是無法訪問到的。
這個方法最簡回單,也最常見
2
靜態答頁面可以刪除,這樣會造成用戶不能訪問,但是後台可以重新生成所有的靜態頁面,其實就是更新一下。刪了再建。
這個操作要慎重。
合並之類的,都是先在後台數據處理完畢,再重新生成就行了。
至於一些老的頁面無法訪問,沒有辦法,誰讓你合並的。
3
靜態化方法就不說了,可以過濾器,可以用freemarker等。
4
如果靜態頁面能半動態化,比如用js,ajax等動態裝載頁面的部分,你就可以只更新那個部分就行了。
如果是完整靜態化,你只能重新生成了。
其實css之類的,是外部文件。所以靜態化頁面的設計很重要。要兼顧以後的維護和更新,不是簡單的堆砌一個頁面就行了。

8. 手術室高效過濾器如何確定更換時間,手術室高效過濾器都有那些標准

你好!這種是無隔板高效過濾器,一般用於潔凈等級比較高的車間,比如百級手術室和千級的手術室,無隔板高效過濾器的效率為99.999%,手術室的高效空氣過濾器必須為H14級的,因為手術室不比其它的場合,要求會很嚴格.
以下是更換手術室高效過濾器時注意的事項:
一、做好人員及各種物品在手術室的出入管理。
二、層流手術室不得使用有粉手套。
三、一切清潔工作,均要在凈化系統運行過程中採用濕布擦拭。
四、進入手術間的各種儀器設備,應在進入前安裝完畢,擦拭乾凈。
五、每周對粗過濾器、中效過濾器、回風口裝置清洗1次。
六、每2周對粗過濾器、中效過濾器、回風網用500 mg/L含氯消毒劑濕拭消毒一次。
七、每月對潔凈手術部空氣、器材表面進行采樣做細菌培養,對溫濕度進行檢測一次。並將結果登記備案。
八、每6個月將初效、中效過濾器更換1次。每年更換高效過濾網。
九、手術室感染控制小組每月做空氣、手、物表、消毒劑等的監測抽檢和監控工作整改小結。
十、空氣潔凈度監測採用「多點布控采樣"檢測法。靜態法為主,動態法為輔。
手術室高效空氣過濾器的安裝應符合下列規定:
一、手術室高效空氣過濾器經外觀檢查合格後,應立即進行安裝。
二、安裝高效過濾器的框架應平整、清潔,每台過濾器的安裝框架的平整度偏差,不得超過1~2mm。
三、過濾器安裝方向必須正確,安裝後過濾器四周和介面,應嚴密不漏。
四、高效過濾器採用機械密封時,應採用氣密墊密封,其厚度為6~8mm,並緊貼在過濾器邊框上;安裝後墊料的壓縮應均勻,壓縮率為25~50%;安裝後應進行掃描檢漏。
五、高效過濾器採用液壓密封時,槽架安裝水平,並不得有滲漏現象;槽內無污物和水分。槽內密封液高度宜為槽深的2/3,密封液的熔點宜高於50℃。
希望以上回答能幫助你,如需要了解更多手術室高效過濾器或者其它高效過濾器請瀏覽http://detail.1688.com/offer/1069458743.html

9. 如何靜態化JSP頁面

很多網站上,例如來 blog-index-14521.html ,這里看起後綴是源靜態的。其實非也。
他是通過過濾器或一些框架把url給偽裝的。
blog-index-14521.html 其實真正訪問的是
blog.do?action=index&id=14521

10. 新版GMP的D級區中高效空氣過濾器潔凈度的要求是多少

GMP中A、B、C、D級控制上有動靜態之分,而百級、萬級、十萬級則基本無動靜態之分,兩者之間有著明顯的差異,新版GMP參照ISO14644中規定具體標准:
空氣懸浮粒子的標准規定如下:
潔凈度級別 懸浮粒子最大允許數/立方米
靜態 動態(3)
≥0.5μm ≥5.0μm(2) ≥0.5μm ≥5.0μm
D級 3520000 29000 不作規定 不作規定
潔凈區微生物監測的動態標准(1)如下:
潔凈度級別 浮游菌 沉降菌(90mm) 表面微生物
cfu/m3 cfu /4小時(2) 接觸(55mm)cfu /碟 5指手套cfu /手套
D級 200 100 50 -
以上就是「新版GMP的D級區中高效空氣過濾器潔凈度的要求是多少?」的相關介紹,有疑問可詢安徽人和凈化。

熱點內容
丁度巴拉斯情人電影推薦 發布:2024-08-19 09:13:07 瀏覽:886
類似深水的露點電影 發布:2024-08-19 09:10:12 瀏覽:80
《消失的眼角膜》2電影 發布:2024-08-19 08:34:43 瀏覽:878
私人影院什麼電影好看 發布:2024-08-19 08:33:32 瀏覽:593
干 B 發布:2024-08-19 08:30:21 瀏覽:910
夜晚看片網站 發布:2024-08-19 08:20:59 瀏覽:440
台灣男同電影《越界》 發布:2024-08-19 08:04:35 瀏覽:290
看電影選座位追女孩 發布:2024-08-19 07:54:42 瀏覽:975
日本a級愛情 發布:2024-08-19 07:30:38 瀏覽:832
生活中的瑪麗類似電影 發布:2024-08-19 07:26:46 瀏覽:239