當前位置:首頁 » 編程語言 » java文件過濾

java文件過濾

發布時間: 2022-04-22 04:00:26

java中文件瀏覽對話框中怎麼過濾文件類型

代碼如下:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.sql.Date;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.table.DefaultTableModel;

public class ListCustomTypeFile extends JFrame {
/**
*
*/
private static final long serialVersionUID = -6263975104443132420L;

/**
* 自定義擴展名過濾器
*
* @author 李鍾尉
*/
private final class CustomFilter implements java.io.FileFilter {
@Override
public boolean accept(File pathname) {
// 獲取用戶設置的指定擴展名
String extName = extNameField.getText();
if (extName == null || extName.isEmpty())
return false;
if (!extName.startsWith("."))// 判斷擴展名前綴
extName = "." + extName;// 完事擴展名前綴
extName = extName.toLowerCase();
// 判斷擴展名與過濾文件名是否符合要求
if (pathname.getName().toLowerCase().endsWith(extName))
return true;
return false;
}
}

private JPanel contentPane;
private JTextField extNameField;
private JTable table;
private File dir;
private JLabel label;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ListCustomTypeFile frame = new ListCustomTypeFile();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public ListCustomTypeFile() {
setTitle("顯示指定類型的文件");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);

JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.NORTH);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[] { 93, 54, 0 };
gbl_panel.rowHeights = new int[] { 23, 0, 0 };
gbl_panel.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE };
gbl_panel.rowWeights = new double[] { 0.0, 0.0, Double.MIN_VALUE };
panel.setLayout(gbl_panel);

JButton button = new JButton("選擇文件夾");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_button_actionPerformed(e);

Ⅱ Java面試題:過濾器有哪些作用和用法

Servlet 過濾器可以動態地攔截請求和響應,以變換或使用包含在請求或響應中的信息。

可以將一個或多個 Servlet 過濾器附加到一個 Servlet 或一組 Servlet。Servlet 過濾器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 頁面。調用 Servlet 前調用所有附加的 Servlet 過濾器。

Servlet 過濾器是可用於 Servlet 編程的 Java 類,可以實現以下目的:

  • 在客戶端的請求訪問後端資源之前,攔截這些請求。

  • 在伺服器的響應發送回客戶端之前,處理這些響應。

Ⅲ java如何創建過濾器

弄過濾器,要實現filter介面
主要是用過濾器處理中文編碼,至於要用來做什麼,再自己寫比如許可權控制,登錄驗證,之類

//下面這是一個類。。。。
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;

public class EncodingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("GBK");//處理編碼
response.setCharacterEncoding("GBK");//處理編碼

chain.doFilter(request, response);//讓過濾器執行下一個請求
}

public void destroy() {}

public void init(FilterConfig arg0) throws ServletException {}
}

//下面這個是在web.xml下的配置

<filter>
<filter-name>encoding</filter-name>
<filter-class>
剛剛創建的那個實現filter介面的類的位置
例如:com.temp.filter.EncodingFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>*.jsp這個是以jsp為後綴的文件都攔截下來</url-pattern>
</filter-mapping>
可以寫多個的<filter-mapping>來配置你所要攔截的東西

Ⅳ java讀取txt文件,如何過濾掉注釋以及空格


importjava.io.RandomAccessFile;

/**
*格式
*
*
*<p>
*
*@authorcs121102018年11月16日
*@see
*@since1.0
*/
publicclassFormatText{

publicstaticvoidmain(String[]args){
try{
RandomAccessFileacf=newRandomAccessFile("d://FormatText.java","r");
Stringline;
booleanisComment=true;
while(null!=(line=acf.readLine())){
//去除前後空格
//line.trim();
StringnoneSpaceLine=removeAllSpace(line);

//簡單的註解
if(isSimpleComment(noneSpaceLine)){
continue;
}

//多行註解
if(noneSpaceLine.startsWith("/*")){
isComment=true;
}
if(isComment&&noneSpaceLine.endsWith("*/")){
isComment=false;
continue;
}

if(!isComment){
System.out.println(noneSpaceLine);
}
}

acf.close();
}catch(Exceptione){
e.printStackTrace();
}
}

(Stringline){
if(line.startsWith("//")){
returntrue;
}
returnfalse;
}

/**
*注意:這里移除所有的空格,如果只想移除前後兩端的,請使用:line.trim();
*
*@paramline
*行
*@returnString
*/
(Stringline){
StringBuilderb=newStringBuilder(line.length());
for(charch:line.toCharArray()){
intnum=(int)ch;
if(num!=9&&num!=32){
b.append(ch);
}
}
returnb.toString();
}

}

測試數據為上面的java文件,測試結果如下

publicclassFormatText{

publicstaticvoidmain(String[]args){
try{
RandomAccessFileacf=newRandomAccessFile("d://FormatText.java","r");
Stringline;
while(null!=(line=acf.readLine())){
StringnoneSpaceLine=removeAllSpace(line.trim());
if(isSimpleComment(noneSpaceLine)){
continue;
}
System.out.println(noneSpaceLine);
}

acf.close();
}catch(Exceptione){
e.printStackTrace();
}
}

(Stringline){
if(line.startsWith("//")){
returntrue;
}

returnfalse;
}

(Stringline){
StringBuilderb=newStringBuilder(line.length());
for(charch:line.toCharArray()){
if(ch!=''){
b.append(ch);
}
}
returnb.toString();
}

}

Ⅳ 什麼是java過濾器! 它的功能和作用是什麼啊

Servlet API 很久以前就已成為企業應用開發的基石,而 Servlet 過濾器則是對 J2EE 家族的相對較新的補充。在 J2EE 探索者 系列文章的最後一篇中,作者 Kyle Gabhart 將向您介紹 Servlet 過濾器體系結構,定義過濾器的許多應用,並指導您完成典型過濾器實現的三個步驟。他還會透露 bean 的一些激動人心的變化,預計剛發布的 Java Servlet 2.4 規范會引入這些變化。

Servlet 過濾器是可插入的 Web 組件,它允許我們實現 Web 應用程序中的預處理和後期處理邏輯。過濾器支持 servlet 和 JSP 頁面的基本請求處理功能,比如日誌記錄、性能、安全、會話處理、XSLT 轉換,等等。 過濾器最初是隨 Java Servlet 2.3 規范發布的,最近定稿的 2.4 規范對它進行了重大升級。在這 J2EE 探索者 系列文章的最後一篇中,我將向您介紹 Servlet 過濾器的基礎知識 —— 比如總體的體系結構設計、實現細節,以及在 J2EE Web 應用程序中的典型應用,還會涉及一些預計最新的 Servlet 規范將會提供的擴展功能。

Servlet 過濾器是什麼?
Servlet 過濾器是小型的 Web 組件,它們攔截請求和響應,以便查看、提取或以某種方式操作正在客戶機和伺服器之間交換的數據。過濾器是通常封裝了一些功能的 Web 組件,這些功能雖然很重要,但是對於處理客戶機請求或發送響應來說不是決定性的。典型的例子包括記錄關於請求和響應的數據、處理安全協議、管理會話屬性, 等等。過濾器提供一種面向對象的模塊化機制,用以將公共任務封裝到可插入的組件中,這些組件通過一個配置文件來聲明,並動態地處理。

Servlet 過濾器中結合了許多元素,從而使得過濾器成為獨特、強大和模塊化的 Web 組件。也就是說,Servlet 過濾器是:

聲明式的:過濾器通過 Web 部署描述符(web.xml)中的 XML 標簽來聲明。這樣允許添加和刪除過濾器,而無需改動任何應用程序代碼或 JSP 頁面。

動態的:過濾器在運行時由 Servlet 容器調用來攔截和處理請求和響應。

靈活的:過濾器在 Web 處理環境中的應用很廣泛,涵蓋諸如日誌記錄和安全等許多最公共的輔助任務。過濾器還是靈活的,因為它們可用於對來自客戶機的直接調用執行預處理和後期處 理,以及處理在防火牆之後的 Web 組件之間調度的請求。最後,可以將過濾器鏈接起來以提供必需的功能。

模塊化的:通過把應用程序處理邏輯封裝到單個類文件中,過濾器從而定義了可容易地從請求/響應鏈中添加或刪除的模塊化單元。

可移植的:與 Java 平台的其他許多方面一樣,Servlet 過濾器是跨平台和跨容器可移植的,從而進一步支持了 Servler 過濾器的模塊化和可重用本質。

可重用的:歸功於過濾器實現類的模塊化設計,以及聲明式的過濾器配置方式,過濾器可以容易地跨越不同的項目和應用程序使用。

透明的:在請求/響應鏈中包括過濾器,這種設計是為了補充(而不是以任何方式替代)servlet 或 JSP 頁面提供的核心處理。因而,過濾器可以根據需要添加或刪除,而不會破壞 servlet 或 JSP 頁面。
所以 Servlet 過濾器是通過一個配置文件來靈活聲明的模塊化可重用組件。過濾器動態地處理傳入的請求和傳出的響應,並且無需修改應用程序代碼就可以透明地添加或刪除它 們。最後,過濾器獨立於任何平台或者 Servlet 容器,從而允許將它們容易地部署到任何相容的 J2EE 環境中。

在接下來的幾小節中,我們將進一步考察 Servlet 過濾器機制的總體設計,以及實現、配置和部署過濾器所涉及的步驟。我們還將探討 Servlet 過濾器的一些實際應用,最後簡要考察一下模型-視圖-控制器(MVC)體系結構中包含的 Servlet 過濾器,從而結束本文的討論。

Servlet 過濾器體系結構
正如其名稱所暗示的,Servlet 過濾器 用於攔截傳入的請求和/或傳出的響應,並監視、修改或以某種方式處理正在通過的數據流。過濾器是自包含、模塊化的組件,可以將它們添加到請求/響應鏈中, 或者在無需影響應用程序中其他 Web 組件的情況下刪除它們。過濾器僅只是改動請求和響應的運行時處理,因而不應該將它們直接嵌入 Web 應用程序框架,除非是通過 Servlet API 中良好定義的標准介面來實現。

Web 資源可以配置為沒有過濾器與之關聯(這是默認情況)、與單個過濾器關聯(這是典型情況),甚至是與一個過濾器鏈相關聯。那麼過濾器究竟做什麼呢? 像 servlet 一樣,它接受請求並響應對象。然後過濾器會檢查請求對象,並決定將該請求轉發給鏈中的下一個組件,或者中止該請求並直接向客戶機發回一個響應。如果請求被 轉發了,它將被傳遞給鏈中的下一個資源(另一個過濾器、servlet 或 JSP 頁面)。在這個請求設法通過過濾器鏈並被伺服器處理之後,一個響應將以相反的順序通過該鏈發送回去。這樣就給每個過濾器都提供了根據需要處理響應對象的機 會。

當過濾器在 Servlet 2.3 規范中首次引入時,它們只能過濾 Web 客戶機和客戶機所訪問的指定 Web 資源之間的內容。如果該資源然後將請求調度給其他 Web 資源,那就不能向幕後委託的任何請求應用過濾器。2.4 規范消除了這個限制。Servlet 過濾器現在可以應用於 J2EE Web 環境中存在請求和響應對象的任何地方。因此,Servlet 過濾器可以應用在客戶機和 servlet 之間、servlet 和 servlet 或 JSP 頁面之間,以及所包括的每個 JSP 頁面之間。這才是我所稱的強大能力和靈活性!

實現一個 Servlet 過濾器
他們說「好事多磨」。我不知道「他們」指的是誰,或者這句古老的諺語究竟有多真實,但是實現一個 Servlet 過濾器的確要經歷三個步驟。首先要編寫過濾器實現類的程序,然後要把該過濾器添加到 Web 應用程序中(通過在 Web 部署描述符 /web.xml 中聲明它),最後要把過濾器與應用程序一起打包並部署它。我們將詳細研究這其中的每個步驟。

1. 編寫實現類的程序
過濾器 API 包含 3 個簡單的介面(又是數字 3!),它們整潔地嵌套在 javax.servlet 包中。那 3 個介面分別是 Filter、FilterChain 和 FilterConfig。從編程的角度看,過濾器類將實現 Filter 介面,然後使用這個過濾器類中的 FilterChain 和 FilterConfig 介面。該過濾器類的一個引用將傳遞給 FilterChain 對象,以允許過濾器把控制權傳遞給鏈中的下一個資源。FilterConfig 對象將由容器提供給過濾器,以允許訪問該過濾器的初始化數據。

為了與我們的三步模式保持一致,過濾器必須運用三個方法,以便完全實現 Filter 介面:

init():這個方法在容器實例化過濾器時被調用,它主要設計用於使過濾器為處理做准備。該方法接受一個 FilterConfig 類型的對象作為輸入。

doFilter():與 servlet 擁有一個 service() 方法(這個方法又調用 doPost() 或者 doGet())來處理請求一樣,過濾器擁有單個用於處理請求和響應的方法——doFilter()。這個方法接受三個輸入參數:一個 ServletRequest、response 和一個 FilterChain 對象。

destroy():正如您想像的那樣,這個方法執行任何清理操作,這些操作可能需要在自動垃圾收集之前進行。展示了一個非常簡單的過濾器,它跟蹤滿足一個客戶機的 Web 請求所花的大致時間。

一個過濾器類實現
import javax.servlet.*;
import java.util.*;
import java.io.*;

public class TimeTrackFilter implements Filter {
private FilterConfig filterConfig = null;

public void init(FilterConfig filterConfig)
throws ServletException {

this.filterConfig = filterConfig;
}

public void destroy() {

this.filterConfig = null;
}

public void doFilter( ServletRequest request,
ServletResponse response, FilterChain chain )
throws IOException, ServletException {

Date startTime, endTime;
double totalTime;

startTime = new Date();

// Forward the request to the next resource in the chain
chain.doFilter(request, wrapper);

// -- Process the response -- \\

// Calculate the difference between the start time and end time
endTime = new Date();
totalTime = endTime.getTime() - startTime.getTime();
totalTime = totalTime / 1000; //Convert from milliseconds to seconds

StringWriter sw = new StringWriter();
PrintWriter writer = new PrintWriter(sw);

writer.println();
writer.println("===============");
writer.println("Total elapsed time is: " + totalTime + " seconds." );
writer.println("===============");

// Log the resulting string
writer.flush();
filterConfig.getServletContext().
log(sw.getBuffer().toString());

}
}
復制代碼
這個過濾器的生命周期很簡單,不管怎樣,我們還是研究一下它吧:

初始化
當容器第一次載入該過濾器時,init() 方法將被調用。該類在這個方法中包含了一個指向 FilterConfig 對象的引用。我們的過濾器實際上並不需要這樣做,因為其中沒有使用初始化信息,這里只是出於演示的目的。

過濾
過濾器的大多數時間都消耗在這里。doFilter() 方法被容器調用,同時傳入分別指向這個請求/響應鏈中的 ServletRequest、ServletResponse 和 FilterChain 對象的引用。然後過濾器就有機會處理請求,將處理任務傳遞給鏈中的下一個資源(通過調用 FilterChain 對象引用上的 doFilter()方法),之後在處理控制權返回該過濾器時處理響應。

析構
容器緊跟在垃圾收集之前調用 destroy() 方法,以便能夠執行任何必需的清理代碼。

2. 配置 Servlet 過濾器
過濾器通過 web.xml 文件中的兩個 XML 標簽來聲明。<filter> 標簽定義過濾器的名稱,並且聲明實現類和 init() 參數。<filter-mapping> 標簽將過濾器與 servlet 或 URL 模式相關聯。

摘自一個 web.xml 文件,它展示了如何聲明過濾器的包含關系:

在 web.xml 中聲明一個過濾器
<filter>
<filter-name>Page Request Timer</filter-name>
<filter-class>TimeTrackFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Page Request Timer</filter-name>
<servlet-name>Main Servlet</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>Main Servlet</servlet-name>
<servlet-class>MainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Main Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
復制代碼
上 面的代碼示例聲明了一個過濾器("Page Request Timer"),並把它映射到一個 servlet("Main Servlet")。然後為該 servlet 定義了一個映射,以便把每個請求(由通配符指定)都發送到該 servlet。這是控制器組件的典型映射聲明。您應該注意這些聲明的順序,因為千萬不能背離這些元素的順序。

3. 部署 Servlet 過濾器
事實上,與 Web 應用程序一起部署過濾器絕對不涉及任何復雜性。只需把過濾器類和其他 Web 組件類包括在一起,並像您通常所做的那樣把 web.xml 文件(連同過濾器定義和過濾器映射聲明)放進 Web 應用程序結構中,servlet 容器將處理之後的其他所有事情。

過濾器的許多應用
您在 J2EE Web 應用程序中利用過濾器的能力,僅受到您自己的創造性和應用程序設計本領的限制。在適合使用裝飾過濾器模式或者攔截器模式的任何地方,您都可以使用過濾器。過濾器的一些最普遍的應用如下:

載入:對於到達系統的所有請求,過濾器收集諸如瀏覽器類型、一天中的時間、轉發 URL 等相關信息,並對它們進行日誌記錄。

性能:過濾器在內容通過線路傳來並在到達 servlet 和 JSP 頁面之前解壓縮該內容,然後再取得響應內容,並在將響應內容發送到客戶機機器之前將它轉換為壓縮格式。

安全:過濾器處理身份驗證令牌的管理,並適當地限制安全資源的訪問,提示用戶進行身份驗證和/或將他們指引到第三方進行身份驗證。過濾器甚至能夠管理訪問 控制列表(Access Control List,ACL),以便除了身份驗證之外還提供授權機制。將安全邏輯放在過濾器中,而不是放在 servlet 或者 JSP 頁面中,這樣提供了巨大的靈活性。在開發期間,過濾器可以關閉(在 web.xml 文件中注釋掉)。在生產應用中,過濾器又可以再次啟用。此外還可以添加多個過濾器,以便根據需要提高安全、加密和不可拒絕的服務的等級。

會話處理:將 servlet 和 JSP 頁面與會話處理代碼混雜在一起可能會帶來相當大的麻煩。使用過濾器來管理會話可以讓 Web 頁面集中精力考慮內容顯示和委託處理,而不必擔心會話管理的細節。

XSLT 轉換:不管是使用移動客戶端還是使用基於 XML 的 Web 服務,無需把邏輯嵌入應用程序就在 XML 語法之間執行轉換的能力都絕對是無價的。

使過濾器適應 MVC 體系結構
模型-視圖-控制器(Model-View-Controller,MVC)體系結構是一個有效的設計,它現在已作為最重要的設計方法學,整合到了諸如 Jakarta Struts 和 Turbine 等大多數流行的 Web 應用框架中。過濾器旨在擴充 MVC 體系結構的請求/響應處理流。不管請求/響應發生在客戶機和伺服器之間,還是發生在伺服器上的其他組件之間,過濾器在處理流中的應用都是相同的。從 MVC 的觀點看,調度器組件(它或者包括在控制器組件中,或者配合控制器組件工作)把請求轉發給適當的應用程序組件以進行處理。這使得控制器層成為包括 Servlet 過濾器的最佳位置。通過把過濾器放在控制器組件本身的前面,過濾器可以應用於所有請求,或者通過將它放在控制器/調度器與模型和控制器之間,它可以應用於 單獨的 Web 組件。

MVC 體系結構廣為傳播,並具有良好的文檔。請通過 參考資料 中的鏈接了解關於 MVC 和 MVC 體系結構中的 Servlet 實現的更多信息。

結束語
雖然過濾器才出現幾年時間,但它們本身已作為一個關鍵組件嵌入到了所有敏捷的、面向對象的 J2EE Web 應用程序中。本文向您介紹了 Servlet 過濾器的使用。本文討論了過濾器的高級設計,比較了當前規范(2.4)和以前(2.3)的模型,講述了實現過濾器所涉及的精確步驟,以及如何在 Web 應用程序中聲明過濾器,然後與應用程序一起部署它。本文還闡述了 Servlet 過濾器的一些最普遍應用,並提到了過濾器如何適應傳統的 MVC 體系結構。

這是 J2EE 探索者 系列的最後一篇文章。我們在年初通過粗略研究 Enterprise JavaBean 組件來開始我們的旅程,並提到了何時使用這些組件才真正有意義,以及何時這些組件才會變得大材小用的問題。然後我們將目光轉向了 Web 層,繪制了一條通過 Servlet、JSP 頁面、JavaBean 技術以及 Java Servlet API 中的無數選擇和功能的路徑。在這個系列文章中與您一起艱苦跋涉真是一件快樂的事情。我享受著編寫這個系列文章的樂趣,並且我從大家的反饋中知道,這對您也 是一個很有價值的過程。
Java 過濾器的作用

Ⅵ java項目和web項目中的過濾器文件怎麼使用

過濾器是一個程序,它先於與之相關的servlet或JSP頁面運行在伺服器上。過濾器可附加到一個或多個servlet或JSP頁面上,並且可以檢查進入這些資源的請求信息。在這之後,過濾器可以作如下的選擇:

1. 以常規的方式調用資源(即,調用servlet或JSP頁面)。
2.利用修改過的請求信息調用資源。
3. 調用資源,但在發送響應到客戶機前對其進行修改
4. 阻止該資源調用,代之以轉到其他的資源,返回一個特定的狀態代碼或生成替換輸出。

1. 建立基本過濾器
建立一個過濾器涉及下列五個步驟:
1)建立一個實現Filter介面的類。這個類需要三個方法,分別是:doFilter、init和destroy。
doFilter方法包含主要的過濾代碼(見第2步),init方法建立設置操作,而destroy方法進行清楚。
2)在doFilter方法中放入過濾行為。doFilter方法的第一個參數為ServletRequest對象。此對象給過濾器提供了對進入的信息(包括表單數據、cookie和HTTP請求頭)的完全訪問。第二個參數為ServletResponse,通常在簡單的過濾器中忽略此參數。最後一個參數為FilterChain,如下一步所述,此參數用來調用servlet或JSP頁。
3)調用FilterChain對象的doFilter方法。Filter介面的doFilter方法取一個FilterChain對象作為它的一個參數。在調用此對象的doFilter方法時,激活下一個相關的過濾器。如果沒有另一個過濾器與servlet或JSP頁面關聯,則servlet或JSP頁面被激活。
4)對相應的servlet和JSP頁面注冊過濾器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。
5)禁用激活器servlet。防止用戶利用預設servlet URL繞過過濾器設置。
1.1 建立一個實現Filter介面的類
所有過濾器都必須實現javax.servlet.Filter。這個介麵包含三個方法,分別為doFilter、init和destroy。

public void doFilter(ServletRequset request,
ServletResponse response,
FilterChain chain)
thows ServletException, IOException

每當調用一個過濾器(即,每次請求與此過濾器相關的servlet或JSP頁面)時,就執行其doFilter方法。正是這個方法包含了大部分過濾邏輯。第一個參數為與傳入請求有關的ServletRequest。對於簡單的過濾器,大多數過濾邏輯是基於這個對象的。如果處理HTTP請求,並且需要訪問諸如getHeader或getCookies等在ServletRequest中無法得到的方法,就要把此對象構造成HttpServletRequest。

第二個參數為ServletResponse。除了在兩個情形下要使用它以外,通常忽略這個參數。首先,如果希望完全阻塞對相關servlet或JSP頁面的訪問。可調用response.getWriter並直接發送一個響應到客戶機。其次,如果希望修改相關的servlet或JSP頁面的輸出,可把響應包含在一個收集所有發送到它的輸出的對象中。然後,在調用serlvet或JSP頁面後,過濾器可檢查輸出,如果合適就修改它,之後發送到客戶機。

DoFilter的最後一個參數為FilterChain對象。對此對象調用doFilter以激活與servlet或JSP頁面相關的下一個過濾器。如果沒有另一個相關的過濾器,則對doFilter的調用激活servlet或JSP本身。

public void init(FilterConfig config) thows ServletException

init方法只在此過濾器第一次初始化時執行,不是每次調用過濾器都執行它。對於簡單的過濾器,可提供此方法的一個空體,但有兩個原因需要使用init。首先,FilterConfig對象提供對servlet環境及web.xml文件中指派的過濾器名的訪問。因此,普遍的辦法是利用init將FilterConfig對象存放在一個欄位中,以便doFilter方法能夠訪問servlet環境或過濾器名.其次,FilterConfig對象具有一個getInitParameter方法,它能夠訪問部署描述符文件(web.xml)中分配的過濾器初始化參數。

public void destroy( )
大多數過濾器簡單地為此方法提供一個空體,不過,可利用它來完成諸如關閉過濾器使用的文件或資料庫連接池等清除任務。

1.2 將過濾行為放入doFilter方法
doFilter方法為大多數過濾器地關鍵部分。每當調用一個過濾器時,都要執行doFilter。對於大多數過濾器來說,doFilter執行的步驟是基於傳入的信息的。因此,可能要利用作為doFilter的第一個參數提供的ServletRequest。這個對象常常構造為HttpServletRequest類型,以提供對該類的更特殊方法的訪問。

1.3 調用FilterChain對象的doFilter方法
Filter介面的doFilter方法以一個FilterChain對象作為它的第三個參數。在調用該對象的doFilter方法時,激活下一個相關的過濾器。這個過程一般持續到鏈中最後一個過濾器為止。在最後一個過濾器調用其FilterChain對象的doFilter方法時,激活servlet或頁面自身。
但是,鏈中的任意過濾器都可以通過不調用其FilterChain的doFilter方法中斷這個過程。在這樣的情況下,不再調用JSP頁面的serlvet,並且中斷此調用過程的過濾器負責將輸出提供給客戶機。

1.4 對適當的servlet和JSP頁面注冊過濾器
部署描述符文件的2.3版本引入了兩個用於過濾器的元素,分別是:filter和filter-mapping。filter元素向系統注冊一個過濾對象,filter-mapping元素指定該過濾對象所應用的URL。

下面是一個完整的例子:
//建立一個實現Filter介面的類。這個類需要三個方法,分別是:doFilter、init和destroy。
//doFilter方法包含主要的過濾代碼,init方法建立設置操作,而destroy方法進行清
package filterpkg;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class testFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException
{
}
//在doFilter方法中放入過濾行為。doFilter方法的第一個參數為ServletRequest對象。
//此對象給過濾器提供了對進入的信息(包括表單數據、cookie和HTTP請求頭)的完全訪問。
//第二個參數為ServletResponse,通常在簡單的過濾器中忽略此參數。
//最後一個參數為FilterChain,如下一步所述,此參數用來調用servlet或JSP頁。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain)
{
PrintWriter wout=null;
try
{
wout=response.getWriter();
}
catch(IOException e)
{
}
HttpServletRequest req=(HttpServletRequest)request;//將request轉化為它的子類HttpServletRequest
String uri=req.getRequestURI();//獲得傳入的URI
if (uri.indexOf("MyJsp.jsp")>0 ||uri.indexOf("MainForm.do")>0 )//如果是我們指定的登錄頁面或驗證頁面
{
try
{
//調用FilterChain對象的doFilter方法。Filter介面的doFilter方法取一個FilterChain對象作為它的一個參數。
//在調用此對象的doFilter方法時,激活下一個相關的過濾器。如果沒有另一個過濾器與servlet或JSP頁面關聯,則servlet或JSP頁面被激活。
filterChain.doFilter(request, response);
}
catch(Exception e)
{
}
return;
}

if (req.getSession()!=null)
if (req.getSession().getAttribute("USERID")==null)
{
wout.write("<HTML><BODY> Check error! <br/> </BODY> </HTML>");
wout.flush();
return;
}
try
{
filterChain.doFilter(request, response);
}
catch(Exception e)
{
}
}

public void destroy()
{
}
}

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>CHECKCODE</filter-name>
<filter-class>filterpkg.testFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CHECKCODE</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>ControlServlet</servlet-name>
<servlet-class>filterpkg.ControlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ControlServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>

Ⅶ java 文件過濾器怎麼實現。

java中有一個FilenameFilter的介面,能夠過濾得到指定類型的文件或者目錄,可以實現文件過濾器,如下代碼:

accept(Filefile,Stringpath)方法
{
privateStringtype;
publicDirFilter(Stringtp){
this.type=tp;
}

publicbooleanaccept(Filefl,Stringpath)throwsException{
Filefile=newFile(path);
Stringfilename=file.getName();
returnfilename.indexOf(type)!=-1;
}
}

Ⅷ 過濾f盤下所有.Java文件並顯示文件夾

File f=new File("f:/");

File[] file=f.listFiles();//這是讀取f盤下所有目錄將這包裝成方法用遞歸多次讀取之後用if判斷用下列方法

Ⅸ 在JAVA中filter有什麼作用

Filter也稱之為過濾器,它是Servlet技術中最實用的技術,Web開發人員通過Filter技術,對web伺服器管理的所有web資源。

例如實現URL級別的許可權訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。例如對Jsp, Servlet, 靜態圖片文件或靜態 html 文件等進行攔截,從而實現一些特殊的功能。

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

(9)java文件過濾擴展閱讀

Filter的生命周期

和我們編寫的Servlet程序一樣,Filter的創建和銷毀由WEB伺服器負責。 web 應用程序啟動時,web 伺服器將創建Filter 的實例對象,並調用其init方法,讀取web.xml配置,完成對象的初始化功能,從而為後續的用戶請求作好攔截的准備工作

filter對象只會創建一次,init方法也只會執行一次。開發人員通過init方法的參數,可獲得代表當前filter配置信息的FilterConfig對象。

這個方法完成實際的過濾操作。當客戶請求訪問與過濾器關聯的URL的時候,Servlet過濾器將先執行doFilter方法。FilterChain參數用於訪問後續過濾器。

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

Ⅹ java 中的過濾器filter 都有什麼作用

java裡面有多種過濾器,有文件過濾器、請求過濾器等等。。,主要作用是過濾掉用戶不需要的東西或者設置請求編碼的格式等等。。

熱點內容
落櫻小屋哪裡下載安卓 發布:2025-01-27 12:35:13 瀏覽:71
微信伺服器IP跳轉 發布:2025-01-27 12:26:54 瀏覽:73
oracle自動備份腳本linux 發布:2025-01-27 12:21:40 瀏覽:936
pop伺服器密碼怎麼填 發布:2025-01-27 12:20:02 瀏覽:968
oraclesqlnumber 發布:2025-01-27 12:04:22 瀏覽:849
如何看三才配置數理暗示力 發布:2025-01-27 12:04:15 瀏覽:811
我的世界離線2b2t的伺服器 發布:2025-01-27 11:51:25 瀏覽:144
網站被異常篡改訪問有風險 發布:2025-01-27 11:50:01 瀏覽:431
光遇國際服腳本全部圖 發布:2025-01-27 11:47:40 瀏覽:139
ios資源加密 發布:2025-01-27 11:36:33 瀏覽:816