導航:首頁 > 凈水問答 > java過濾器調用業務層

java過濾器調用業務層

發布時間:2024-01-15 08:03:24

① java中攔截器和過濾器的區別

過濾器來和攔截器的區別:
①攔截器自是基於java的反射機制的,而過濾器是基於函數回調。
②攔截器不依賴與servlet容器,過濾器依賴與servlet容器。
③攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。
④攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。
⑤在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。
⑥攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器里注入一個service,可以調用業務邏輯。

② 什麼是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過濾器! 它的功能和作用是什麼啊

Filter 技術是servlet 2.3 新增加的功能.servlet2.3是sun公司與2000年10月發布的,它的開發者包括許多個人和公司團體,充分體現了sun公司所倡導的代碼開放性原則.由於眾多的參與者的共同努力,servlet2.3比以往功能都強大了許多,而且性能也有了大幅提高.
它新增加的功能包括:
1. 應用程序生命周期事件控制;
2. 新的國際化;
3. 澄清了類的裝載規則;
4. 新的錯誤及安全屬性;
5. 不贊成使用HttpUtils 類;
6. 各種有用的方法;
7. 闡明並擴展了幾個servlet DTD;
8. filter功能.
其中最重要的就是filter功能.它使用戶可以改變一個request和修改一個 response. Filter 不是一個servlet,它不能產生一個response,它能夠在一個request到達servlet之前預處理request,也可以在離開 servlet時處理response.換種說法,filter其實是一個」servlet chaining」(servlet 鏈).一個filter 包括:
1. 在servlet被調用之前截獲;
2. 在servlet被調用之前檢查servlet request;
3. 根據需要修改request頭和request數據;
4. 根據需要修改response頭和response數據;
5. 在servlet被調用之後截獲.
你能夠配置一個filter 到一個或多個servlet;單個servlet或servlet組能夠被多個filter 使用.幾個實用的filter 包括:用戶辨認filter,日誌filter,審核filter,加密filter,符號filter,能改變xml內容的XSLT filter等.
一個filter必須實現javax.servlet.Filter介面並定義三個方法:
1.void setFilterConfig(FilterConfig config) //設置filter 的配置對象;
2. FilterConfig getFilterConfig() //返回filter的配置對象;
3. void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) //執行filter 的工作.
伺服器每次只調用setFilterConfig方法一次准備filter 的處理;調用doFilter方法多次以處理不同的請求.FilterConfig介面有方法可以找到filter名字及初始化參數信息.伺服器可以設置 FilterConfig為空來指明filter已經終結.
每一個filter從doFilter()方法中得到當前的request及 response.在這個方法里,可以進行任何的針對request及response的操作.(包括收集數據,包裝數據等).filter調用 chain.doFilter()方法把控制權交給下一個filter.一個filter在doFilter()方法中結束.如果一個filter想停止 request處理而獲得對response的完全的控制,那它可以不調用下一個filter.
一個filter可以包裝request 或response以改變幾個方法和提供用戶定製的屬性.Api2.3提供了HttpServletRequestWrapper 和HttpServletResponseWrapper來實現.它們能分派最初的request和response.如果要改變一個方法的特性,必須繼承wapper和重寫方法.下面是一段簡單的日誌filter用來記錄所有request的持續時間.
public class LogFilter implements Filter {
FilterConfig config;
public void setFilterConfig(FilterConfig config) {
this.config = config;
}
public FilterConfig getFilterConfig() {
return config;
}
public void doFilter(ServletRequest req,
ServletResponse res,
FilterChain chain) {
ServletContext context = getFilterConfig().getServletContext();
long bef = System.currentTimeMillis();
chain.doFilter(req, res); // no chain parameter needed here
long aft = System.currentTimeMillis();
context.log("Request to " + req.getRequestURI()
+ ": " + (aft-bef));
}
}
當server調用setFilterConfig(),filter保存config信息. 在doFilter()方法中通過config信息得到servletContext.如果要運行這個filter,必須去配置到web.xml中.以 tomcat4.01為例:
<filter>
<filter-name>
log //filter 名字
</filter-name>
<filter-class>
LogFilter //filter class(上例的servlet)
</filter-class>
</filter>
<filter-mapping>
<filter-name>log</filter-name>
<servletname>servletname</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>servletname</servletname>
<servletclass>servletclass</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletname</servlet-name>
<url-pattern>*</url-pattern>
</servlet-mapping>
把這個web.xml放到web-inf中(詳請參考tomcat幫助文檔).
當每次請求一個request時(如index.jsp),先到LogFilter中去並調用doFilter()方法,然後才到各自的servlet中去.如果是一個簡單的servlet(只是一個頁面,無任何輸出語句),那麼可能的輸出是:
Request to /index.jsp: 10
Filter是一個COM組件,由一個或多個Pin組成。Pin也是一個COM組件。 Filter文件的擴展名為.ax,但也可以是.dll。Filter根據其包含Input pin或Output pin的情況(或在Filter Graph的位置),大致可分為三類:Source Filter(僅有Output pin)、Transform Filter(同時具有Input pin和Output pin)和Renderer Filter(僅有Input pin)。
一般情況下,創建Filter使用一個普通的Win32 DLL項目。而且,一般Filter項目不使用MFC。這時,應用程序通過CoCreateInstance函數Filter實例;Filter與應用程序在二進制級別的協作。另外一種方法,也可以在MFC的應用程序項目中創建Filter。這種情況下,Filter不需注冊為COM組件,Filter與應用程序之間的協作是源代碼級別的;創建Filter實例,不再使用CoCreateInstance函數,而是直接new出一個Filter對象,如下:
m_pFilterObject = new CFilterClass();
// make the initial refcount 1 to match COM creation
m_pFilterObject ->AddRef();
因為Filter的基類實現了對象的引用計數,所以即使在第二種情況下,對創建後的Filter對象的操作也完全可以遵循COM標准。
Filter是一個獨立功能模塊,最好不要將Filter依賴於其他第三方的DLL。因為 Filter具有COM的位置透明性特點,Filter文件可以放在硬碟的任何位置,只要位置移動後重新注冊。但此時,如果Filter依賴其他DLL,則Filter對該DLL的定位就會出現問題。
Filter不能脫離Filter Graph單獨使用。所以,如果你想繞過Filter Graph直接使用Filter實現的模塊功能,請將你的Filter移植成DMO(DirectX MEdia Object)。對於DirectShow應用程序開發者來說,還有一點,請不要忘記使用OleInitialize進行初始化。
2. Filter的注冊
Filter是COM組件,所以在使用前一定要注冊。Filter的注冊程序為 regsvr32.exe。如果帶上命令行參數/u,表示注銷;如果帶上是/s,表示不彈出任何注冊/注銷成功與否的提示對話框。如果你想在Build Filter項目的時候進行自動注冊,請在VC的Project settings的Custom Build頁如下設置:
Description: Register filter
Commands: regsvr32 /s /c $(TargetPath)
echo regsvr32 exe.time > $(TargetDir)\$(TargetName).trg
Outputs: $(TargetDir)\$(TargetName).trg
Filter的注冊信息包括兩部分:基本的COM信息和Filter信息。注冊信息都存放在注冊表中。前者的位置為:HKEY_CLASSES_ROOT\CLSID\Filter Clsid\,後者的位置為:HKEY_CLASSES_ROOT\CLSID\Category\Instance\ Filter Clsid\。COM信息標示了Filter是一個標準的可以通過CoCreateInstance函數創建的COM組件,Filter信息標示了我們通過Graphedit看到的描述這個Filter的信息。如果你不想讓Graphedit看到(或者讓Filter枚舉器找到)你寫的Filter,你完全可以不注冊Filter信息。而且不用擔心,你這么做也完全不會影響Filter的功能。
屏蔽注冊Filter信息的方法也很簡單。因為CBaseFilter實現了IAMovieSetup介面的兩個函數:Register和Unregister。我們只需重載這兩個函數,直接return S_OK就行了。
Filter的Merit值。這個值是微軟的「智能連接」函數使用的。在Graphedit中,當我們加入一個Source Filter後,在它的pin上執行「Render」,會自動連上一些Filter。Merit的值參考如下:
MERIT_PREFERRED = 0x800000,
MERIT_NORMAL = 0x600000,
MERIT_UNLIKELY = 0x400000,
MERIT_DO_NOT_USE = 0x200000,
MERIT_SW_COMPRESSOR = 0x100000,
MERIT_HW_COMPRESSOR = 0x100050
Merit值只有大於MERIT_DO_NOT_USE的時候才有可能被「智能連接」使用;Merit的值越大,這個Filter的機會就越大。
3. Filter之間Pin的連接過程
Filter只有加入到Filter Graph中並且和其它Filter連接成完整的鏈路後,才會發揮作用。Filter之間的連接(也就是Pin之間的連接),實際上是連接雙方的一個 Media type的協商過程。連接的方向總是從Output pin指向Input pin。連接的大致過程為:如果調用連接函數時已經指定了完整的Media type,則用這個Media type進行連接,成功與否都結束連接過程;如果沒有指定或不完全指定了Media type,則進入下面的枚舉過程。枚舉欲連接的Input pin上所有的Media type,逐一用這些Media type與Output pin進行連接(如果連接函數提供了不完全Media type,則要先將每個枚舉出來的Media type與它進行匹配檢查),如果Output pin也接受這種Media type,則Pin之間的連接宣告成功;如果所有Input pin上枚舉的Media type,Output pin都不支持,則枚舉Output pin上的所有Media type,並逐一用這些Media type與Input pin進行連接。如果Input pin接受其中的一種Media type,則Pin之間的連接到此也宣告成功;如果Output pin上的所有Media type,Input pin都不支持,則這兩個Pin之間的連接過程宣告失敗。
每個Pin都可以實現GetMediaType函數來提供該Pin上支持的所有 Preferred Media type(但一般只在Output pin上實現,Input pin主要實現CheckMediaType看是否支持當前提供的Media type就行了)。連接過程中,Pin上枚舉得到的所有Media type就是這里提供的。
在CBasePin類中有一個protected的成員變數 m_bTryMyTypesFirst,默認值為false。在我們定製Filter的Output pin中改變這個變數的值為true,可以定製我們自己的連接過程(先枚舉Output pin上的Media type)。
當Pin之間的連接成功後,各自的pin上都會調用CompleteConnect函數。我們可以在這里取得一些連接上的Media type的信息,以及進行一些計算等。在Output pin的CompleteConnect實現中,還有一個重要的任務,就是協商Filter Graph運行起來後Sample傳輸使用的內存配置情況。這同樣是一個交互過程:首先要詢問一下Input pin上的配置要求,如果Input pin提供內存管理器(Allocator),則優先使用Input pin上的內存管理器;否則,使用Output pin自己生成的內存管理器。我們一般都要實現DecideBufferSize來決定存放Sample的內存大小。注意:這個過程協商完成之後,實際的內存並沒有分配,而要等到Output pin上的Active函數調用。
4. Filter Media type概述
Media type一般可以有兩種表示:AM_MEDIA_TYPE和CMediaType。前者是一個Struct,後者是從這個Struct繼承過來的類。
每個Media type有三部分組成:Major type、Subtype和Format type。這三個部分都使用GUID來唯一標示。Major type主要定性描述一種Media type,比如指定這是一個Video,或Audio或Stream等;Subtype進一步細化Media type,如果Video的話可以進一步指定是UYVY或YUY2或RGB24或RGB32等;Format type用一個Struct更進一步細化Media type。
如果Media type的三個部分都是指定了某個具體的GUID值,則稱這個Media type是完全指定的;如果Media type的三個部分中有任何一個值是GUID_NULL,則稱這個Media type 是不完全指定的。GUID_NULL具有通配符的作用。
常用的Major type:
MEDIATYPE_Video;
MEDIATYPE_Audio;
MEDIATYPE_AnalogVideo; // Analog capture
MEDIATYPE_AnalogAudio;
MEDIATYPE_Text;
MEDIATYPE_Midi;
MEDIATYPE_Stream;
MEDIATYPE_Interleaved; // DV camcorder
MEDIATYPE_MPEG1SystemStream;
MEDIATYPE_MPEG2_PACK;
MEDIATYPE_MPEG2_PES;
MEDIATYPE_DVD_ENCRYPTED_PACK;
MEDIATYPE_DVD_NAVIGATION;
常用的Subtype:
MEDIASUBTYPE_YUY2;
MEDIASUBTYPE_YVYU;
MEDIASUBTYPE_YUYV;
MEDIASUBTYPE_UYVY;
MEDIASUBTYPE_YVU9;
MEDIASUBTYPE_Y411;
MEDIASUBTYPE_RGB4;
MEDIASUBTYPE_RGB8;
MEDIASUBTYPE_RGB565;
MEDIASUBTYPE_RGB555;
MEDIASUBTYPE_RGB24;
MEDIASUBTYPE_RGB32;
MEDIASUBTYPE_ARGB32; // Contains alpha value
MEDIASUBTYPE_Overlay;
MEDIASUBTYPE_MPEG1Packet;
MEDIASUBTYPE_MPEG1Payload; // Video payload
MEDIASUBTYPE_MPEG1AudioPayload; // Audio payload
MEDIASUBTYPE_MPEG1System; // A/V payload
MEDIASUBTYPE_MPEG1VideoCD;
MEDIASUBTYPE_MPEG1Video;
MEDIASUBTYPE_MPEG1Audio;
MEDIASUBTYPE_Avi;
MEDIASUBTYPE_Asf;
MEDIASUBTYPE_QTMovie;
MEDIASUBTYPE_PCM;
MEDIASUBTYPE_WAVE;
MEDIASUBTYPE_dvsd; // DV
MEDIASUBTYPE_dvhd;
MEDIASUBTYPE_dvsl;
MEDIASUBTYPE_MPEG2_VIDEO;
MEDIASUBTYPE_MPEG2_PROGRAM;
MEDIASUBTYPE_MPEG2_TRANSPORT;
MEDIASUBTYPE_MPEG2_AUDIO;
MEDIASUBTYPE_DOLBY_AC3;
MEDIASUBTYPE_DVD_SUBPICTURE;
MEDIASUBTYPE_DVD_LPCM_AUDIO;
MEDIASUBTYPE_DVD_NAVIGATION_PCI;
MEDIASUBTYPE_DVD_NAVIGATION_DSI;
MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER;
常用的Format type:
FORMAT_None
FORMAT_DvInfo DVINFO
FORMAT_MPEGVideo MPEG1VIDEOINFO
FORMAT_MPEG2Video MPEG2VIDEOINFO
FORMAT_VideoInfo VIDEOINFOHEADER
FORMAT_VideoInfo2 VIDEOINFOHEADER2
FORMAT_WaveFormatEx WAVEFORMATEX
5. Filter之間的數據傳送
Filter之間的數據是通過Sample來傳送的。Sample是一個COM組件,擁有自己的一段數據緩沖。Sample由Allocator統一管理。如下圖所示:
Filter之間數據傳送的方式有兩種:Push模式和Pull模式。

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

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

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

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

⑤ 常見的十五種Java開發工具是什麼,有什麼特點

1、JDK (Java Development Kit)Java開發工具集

從初學者角度來看,採用JDK開發Java程序能夠很快理解程序中各部分代碼之間的關系,有利於理解Java面向對象的設計思想。JDK的另一個顯著特點是隨著Java (J2EE、J2SE以及J2ME)版本的升級而升級。但它的缺點也是非常明顯的就是從事大規模企業級Java應用開發非常困難,不能進行復雜的Java軟體開發,也不利於團體協同開發。

2、Java Workshop

3、NetBeans 與Sun Java Studio 5

NetBeans是開放源碼的Java集成開發環境(IDE),適用於各種客戶機和Web應用。
Sun Java Studio是Sun公司最新發布的商用全功能Java IDE,支持Solaris、Linux和Windows平台,適於創建和部署2層Java Web應用和n層J2EE應用的企業開發人員使用。

NetBeans是業界第一款支持創新型Java開發的開放源碼IDE。開發人員可以利用業界強大的開發工具來構建桌面、Web或移動應用。同時,通過NetBeans和開放的API的模塊化結構,第三方能夠非常輕松地擴展或集成NetBeans平台。

NetBeans3.5.1主要針對一般Java軟體的開發者,而Java One Studio5則主要針對企業做網路服務等應用的開發者。Sun不久還將推出Project Rave,其目標是幫助企業的開發者進行軟體開發。NetBeans 3.5.1版本與其他開發工具相比,最大區別在於不僅能夠開發各種台式機上的應用,而且可以用來開發網路服務方面的應用,可以開發基於J2ME的移動設備上的應用等。在NetBeans 3.5.1基礎上,Sun開發出了JavaOne Studio5,為用戶提供了一個更加先進的企業編程環境。在新的JavaOne Studio5里有一個應用框架,開發者可以利用這些模塊快速開發自己在網路服務方面的各種應用程序。

4、Borland 的JBuilder

Jbuilder進入了Java集成開發環境的王國,它滿足很多方面的應用,尤其是對於伺服器方以及EJB開發者們來說。下面簡單介紹一下Jbuilder的特點:

1)Jbuilder支持最新的Java技術,包括Applets、JSP/Servlets、JavaBean以及EJB(Enterprise JavaBeans)的應用。

2)用戶可以自動地生成基於後端資料庫表的EJB Java類,Jbuilder同時還簡化了EJB的自動部署功能.此外它還支持CORBA,相應的向導程序有助於用戶全面地管理IDL(分布應用程序所必需的介面定義語言Interface Definition Language)和控制遠程對象。

3)Jbuilder支持各種應用伺服器。Jbuilder與Inprise Application Server緊密集成,同時支持WebLogic erver,支持EJB 1.1和EJB 2.0,可以快速開發J2EE的電子商務應用。

4)Jbuilder能用Servlet和JSP開發和調試動態Web 應用。

5)利用Jbuilder可創建(沒有專有代碼和標記)純Java2應用。由於Jbuilder是用純Java語言編寫的,其代碼不含任何專屬代碼和標記,它支持最新的Java標准。

6)Jbuilder擁有專業化的圖形調試介面,支持遠程調試和多線程調試,調試器支持各種JDK版本,包括J2ME/J2SE/J2EE。

JBuilder環境開發程序方便,它是純的Java 開發環境,適合企業的J2EE開發;缺點是往往一開始人們難於把握整個程序各部分之間的關系,對機器的硬體要求較高,比較吃內存,這時運行速度顯得較慢。

5、Oracle 的JDeveloper

oracle9i JDeveloper(定為9.0版,最新為10g)為構建具有J2EE功能,XML和Webservices的復雜的,多層的Java應用程序提供了一個完全集成的開發環境。它為運用Oracle9i資料庫和應用伺服器的開發人員提供特殊的功能和增強性能,除此以外,它也有資格成為用於多種用途Java開發的一個強大的工具。

oracle9i JDeveloper的主要特點如下:

① 具有UML(Unified Modeling Language,一體化建模語言)建模功能。可以將業務對象及e-business應用模型化。

② 配備有高速Java調試器(Debuger)、內置Profiling工具、提高代碼質量的工具「CodeCoach」等。

③ 支持SOAP(Simple Object Access Protocol)「簡單對象訪問協議」、UDDI(Universal Description, Discovery and Integration)「統一描述、發現和集成協議」、WSDL(Web Services Description Language)「WEB服務描述語言」等Web服務標准。

JDeveloper 不僅僅是很好的 Java 編程工具,而且是 oracle Web 服務的延伸,支持 Apache SOAP,以及 9iAS ,可擴充的環境和 XML 和 WSDL 語言緊密相關。Oracle9iJdeveloper完全利用Java編寫,能夠與以前的Oracle伺服器軟體以及其他廠商支持J2EE的應用伺服器產品相兼容,而且在設計時著重針對Oracle9i,能夠無縫化跨平台之間的應用開發,提供了業界第一個完整的、集成了J2EE和XML的開發環境,允許開發者快速開
發可以通過Web、無線設備及語音界面訪問的Web服務和交易應用,以往只能通過將傳統Java編程技巧與最新模塊化方式結合到一個單一集成的開發環境中之後才能完成J2EE應用開發生命周期管理的事實,從根本上得到改變。缺點就是對於初學者來說,較復雜,也比較難。

6、IBM的Visual Age for Java

Visual Age for Java是一個非常成熟的開發工具,它的特性以於IT開發者和業余的Java編程人員來說都是非常用有用的。它提供對可視化編程的廣泛支持,支持利用CICS連接遺傳大型機應用,支持EJB的開發應用,支持與Websphere的集成開發,方便的bean創建和良好的快速應用開發(RAD)支持和無文件式的文件處理。

IBM為建設Web站點所推出的WebSphere Studio Advanced Edition及其包含的VisualAge for Java Professional Edition軟體已全面轉向以Java為中心,這樣,Java開發人員對WebSphere全套工具的感覺或許會好了許多。Studio所提供的工具有:Web站點管理、快速開發 JDBC頁向導程序、HTML編輯器和HTML語法檢查等。這確實是個不錯的HTML站點頁面編輯環境。Studio和VisualAge集成度很高,菜單中提供了在兩種軟體包之間快速移動代碼的選項。這就讓使用Studio的Web頁面設計人員和使用VisualAge的Java程序員可以相互交換文件、協同工作。

Visual Age for Java支持團隊開發,內置的代碼庫可以自動地根據用戶做出改動而修改程序代碼,這樣就可以很方便地將目前代碼和早期版本做出比較。與Visual Age緊密結合的Websphere Studio本身並不提供源代碼和版本管理的支持,它只是包含了一個內置文件鎖定系統,當編輯項目的時候可以防止其他人對這些文件的錯誤修改,軟體還支持諸如Microsoft Visual SourceSafe這樣的第三方源代碼控制系統。Visual Age forJava完全面向對象的程序設計思想使得開發程序非常快速、高效。你可以不編寫任何代碼就可以設計出一個典型的應用程序框架。Visual Age for Java作為IBM電子商務解決方案其中產品之一,可以無縫地與其他IBM產品,如WebSphere、DB2融合, 迅速完成從設計、開發到部署應用的整個過程。

Visual Age for Java獨特的管理文件方式使其集成外部工具非常困難,你無法讓Visual Age for Java與其他工具一起聯合開發應用。

7、BEA 的 WebLogic Workshop

BEA WebLogic Workshop是一個統一、簡化、可擴展的開發環境,使所有的開發人員都能在 BEA WebLogic Enterprise Platform之上構建基於標準的企業級應用,從而提高了開發部門的生產力水平,加快了價值的實現。

WebLogic Workshop除了提供便捷的Web服務之外,它能夠用於創建更多種類的應用。作為整個BEA WebLogic Platform的開發環境。不管是創建門戶應用、編寫工作流、還是創建Web應用,Workshop 8.1都可以幫助開發人員更快更好地完成。

WebLogic Workshop的主要特點如下:

① 使 J2EE 開發切實可行,提高開發效率

BEA WebLogic Workshop 使開發人員遠離 J2EE 內在的復雜性,集中精力專注業務邏輯,無須操心單調乏味的基礎結構代碼。這種創新意味著,已被企業驗證的 J2EE 的強大功能,最終被大多數不熟悉 Java 和 J2EE 的應用開發人員所掌握,從而使 IT 部門的工作效率提高一個數量級。

可視化設計器以及直觀的概念,如事件、屬性和控制項等,實現了基於事件的開發。Workshop 簡化的程序設計模型,使開發人員不必掌握復雜的 J2EE API 和面向對象的程序設計原理。所有開發人員,包括 J2EE 專家和具有可視化和過程化語言技能的應用開發人員在內,都可以共同工作在 BEA WebLogic Enterprise Platform 之上。Workshop的可視化開發環境,創建帶有代碼注釋的標准 Java 文件,用來說明由運行時框架實施的企業級需求。J2EE 和其他高級開發人員,藉助功能強大的代碼編輯功能,可以訪問Java 源代碼,從而彌補了可視化設計器的不足。

② 構建企業級應用

通過在可伸縮、安全可靠的企業級架構上實施各種應用,BEA WebLogicWorkshop 大大降低了開發風險。而且,所有應用的創建都使用標準的 J2EE 組件,既保護了您的技術投資,又保持了最大的靈活性。
BEA WebLogic Workshop 運行框架,是統一整個架構的匯聚層,使單一、簡化的程序設計模型擴展到所有的 BEA WebLogic Enterprise Platform 應用類型。通過解釋設計時創建的注釋代碼,運行時框架可以實現必要的 J2EE 組件,並且提取出與 J2EE 應用開發有關的所有底層細節。

③ 降低 IT 復雜性

BEA WebLogic Workshop 提供各種 Java 控制項,使得與 IT 資源的連接更輕而易舉。另外,在構建任何 BEA WebLogic Platform 的應用中,Java 控制項不僅可擴展而且完全相同。這種強大、有效的方法能夠:降低 IT 技術的復雜性,優化信息的可用性,推動包含"最佳業務方案"的可重用服務的開發,使開發人員能以更低的成本、更短的時間實現更大的產出。

利用 BEA WebLogic Workshop,任何開發人員都能以最大的生產效率,構建各種Web 服務、Web 應用、門戶和集成項目。BEA WebLogic Workshop是BEA的產品戰略核心,它幫助客戶接觸和利用面向服務架構SOA)的強大功能。BEA Weblogic Workshop8.1極大簡化了當前實際企業集成環境中企業級應用和服務的構建,並成為全面支持關鍵企業級應用(如非同步、真正松耦合和粗粒度消息傳送等)的自然選擇。它的缺點就是過於復雜,對於初學者來說,理解起來較為困難。

8、WebGain 的Visual Cafe for Java

Visual Cafe 是只能在Symantec公司的Java虛擬機、Netscape公司的Java虛擬機和Microsoft虛擬機上工作的調試器。這對於開發者來講是一個重要的特性,因為用戶開發的Java代碼中的許多軟體bug就可能中會在某種特定的虛擬機上起作用。

在修改後進行編譯基繼續進行調試時,Visual Cafe會自動將文件存檔,使用VisualCafe創建的原生應用具有許多特點。除了明顯的速度提高之外,Symantec使類庫的二進制方式比正常的JDK小Visual Cafe為所指定的關系自動生成或更新必要的Java代碼。利用Visual Cafe,用戶可以從一個標准對象資料庫中集合完整的Java應用程序和Applet,而不必再編寫源代碼。Visual Cafe還提供了一個擴充的源代碼開發工具集。

Visual Cafe綜合了Java軟體的可視化源程序開發工具,它允許開發人員在可視化視圖和源視圖之間進行有效地轉換。在可視化視圖中進行的修改立即反映在源代碼中。對源代碼的改變自動更新可視化視圖。

Visual Cafe具有許多源文件方面的特性,如全局檢索和替換。絕大多數Java開發工具的文獻的問題在於簡單地挨個介紹開發工具的每部分組件,但用戶在開應用時還需要一個面向任務的手冊,利用這個手冊你可以不必知道工具每一部分的特定功能就可以開始創建自己的應用。Visual Cafe提供了非常全面的用戶指南,它對最開始的安裝到創建第一個Java應用和Applet都提供了全面的幫助,Visual Cafe將自動生成所指明關系的必要Java代碼。Visual Cafe可以在Windows 95和Windows NT平台下運行,Symantec公司為Java開發工作提供一個在Macintosh操作系統下可以運行的RAD工具。Visual Cafe編譯器速度很快,在國際化支持方面比較突出;缺點就是對於初學者來說,較復雜,也比較難。

9、Macromedia的JRUN

Macromedia公司的JRun是一個具有最廣闊適用性的Java引擎,用於開發及實施由Java Servlets和JavaServer Pages編寫的伺服器端Java應用。JRun是第一個完全支持JSP1.0 規格書的商業化產品,全球有超過80,000名開發人員使用JRun在他們已有的Web伺服器上添加伺服器端Java的功能。其中Web伺服器包括了Microsoft IIS,Netscape Enterprise Server,Apache等。

JRun是開發實施伺服器端Java的先進引擎。如果我們希望在我們的Web應用中添加伺服器端Java功能,那麼JRun將成為我們的正確選擇。

JRun目前有3個版本,它是第一個支持Java Server Pages(JSP)規格書1.0的商業化產品。JSP是一種強大的伺服器端技術,它是用於創建復雜Web應用的一整套快速應用開發系統。JRun可以使我們開始開發並測試Java應用。它最多接受5個並發的連接並且包括全部Java Servlet API,支持JavaServer Pages(JSP),支持所有主要的Web servers和計算機平台。 JRun Pro能夠在生產環境下承受大訪問量的負載,幫助我們實施應用、服務或Web站點(包括內聯網)。JRun Pro 支持無限量並發式連接運行多個Java虛擬機,包括多個並發的Java虛擬機(JVM)。提供一個遠程管理applet以及一個遠程可再分布式的管理applet。JRun Pro Unlimited包括了所有JRun Pro的功能,除次以外,還可以運行無限量的,並發的JVM。

JRun依靠其內置的JRun Web Server可以單獨運行。使用伺服器端Java,用戶可以開發出復雜的商業應用系統。最重要的一點是,由於servlets的平台獨立性,以及更加簡單的開發、更快速的實施、更經濟的維護成本,它是CGI(Common Gateway Interface)或Perl scripts的極佳的替代產品。缺點就是對於初學者來說,較復雜,也比較難。

10、JCreator

JCreator 是一個Java程序開發工具,也是一個Java集成開發環境(IDE)。無論你是要開發Java應用程序或者網頁上的Applet元件都難不倒它。在功能上與Sun公司所公布的JDK等文字模式開發工具相較之下來得容易,還允許使用者自訂義操作窗口界面及無限Undo/Redo等功能。

JCreator為用戶提供了相當強大的功能,例如項目管理功能,項目模板功能,可個性化設置語法高亮屬性、行數、類瀏覽器、標簽文檔、多功能編繹器,向導功能以及完全可自定義的用戶界面。通過JCreator,我們不用激活主文檔而直接編繹或運行我們的JAVA程序。

JCreator能自動找到包含主函數的文件或包含Applet的Html文件,然後它會運行適當的工具。在JCreator中,我們可以通過一個批處理同時編繹多個項目。JCreator的設計接近Windows界面風格,用戶對它的界面比較熟悉。其最大特點是與我們機器中所裝的JDK完美結合,是其它任何一款IDE所不能比擬的。它是一種初學者很容易上手的java開發工具,缺點是只能進行簡單的程序開發,不能進行企業J2EE的開發應用。

11、Microsoft VJ++

Visual J++ 是Microsoft 公司推出的可視化的Java 語言集成開發環境(IDE),為Java 編程人員提供了一個新的開發環境,是一個相當出色的開發工具。無論集成性、編譯速度、調試功能、還是易學易用性,都體現了Microsoft 的一慣風格。Visual J++ 具有下面的特點:

1)Visual J++ 把Java 虛擬機(JVM)作為獨立的操作系統組件放入Windows,使之從瀏覽器中獨立出來。

2)Microsoft 的應用基本類庫(AFC,Application Foundation Class Library)對SUN 公司的JDK 作了擴展,使應用基本類庫更加適合在Windows 下使用。

3) Visual J++ 的調試器支持動態調試,包括單步執行、設置斷點、觀察變數數值等。

4) Visual J++ 提供了一些程序向導(Wizards)和生成器(Builders),它們可以方便地幫助用戶快速地生成Java 程序,幫助你在自己的工程中創建和修改文件。

5) Visual J++ 界面友好,其代碼編輯器具有智能感知、聯機編譯等功能,使程序編寫十分方便。Visual J++ 中建立了Java 的WFC,這一新的應用程序框架能夠直接訪問Windows 應用程序介面(API),使你能夠用Java 語言編寫完全意義上的Windows 應用程序。

6)Visual J++ 中表單設計器的快速應用開發特性使用WFC 創建基於表單的應用程序變得輕松、簡單。通過WFC 可以方便地使用ActiveX 數據對象(ADO,ActiveX Data Objects)來檢索數據和執行簡單數據的綁定。通過在表單設計器中使用ActiveX 數據對象,可以快速地在表單中訪問和顯示數據。

Visual J++能結合微軟的一貫的編程風格,很方便進行Java 的應用開發,但它的移植性較差,不是純的Java 開發環境。

12、Eclipse

Eclipse是一種可擴展的開放源代碼IDE。2001年11月,IBM公司捐出價值4,000萬美元的源代碼組建了Eclipse聯盟,並由該聯盟負責這種工具的後續開發。集成開發環境(IDE)經常將其應用范圍限定在「開發、構建和調試」的周期之中。為了幫助集成開發環境(IDE)克服目前的局限性,業界廠商合作創建了Eclipse平台。Eclipse允許在同一IDE中集成來自不同供應商的工具,並實現了工具之間的互操作性,從而顯著改變了項目工作流程,使開發者可以專注在實際的嵌入式目標上。

Eclipse框架的這種靈活性來源於其擴展點。它們是在XML中定義的已知介面,並充當插件的耦合點。擴展點的范圍包括從用在常規表述過濾器中的簡單字元串,到一個Java類的描述。任何Eclipse插件定義的擴展點都能夠被其它插件使用,反之,任何Eclipse插件也可以遵從其它插件定義的擴展點。除了解由擴展點定義的介面外,插件不知道它們通過擴展點提供的服務將如何被使用。

利用Eclipse,我們可以將高級設計(也許是採用UML)與低級開發工具(如應用調試器等)結合在一起。如果這些互相補充的獨立工具採用Eclipse擴展點彼此連接,那麼當我們用調試器逐一檢查應用時,UML對話框可以突出顯示我們正在關注的器件。事實上,由於Eclipse並不了解開發語言,所以無論Java語言調試器、C/C++調試器還是匯編調試器都是有效的,並可以在相同的框架內同時瞄準不同的進程或節點。

Eclipse的最大特點是它能接受由Java開發者自己編寫的開放源代碼插件,這類似於微軟公司的Visual Studio和Sun微系統公司的NetBeans平台。Eclipse為工具開發商提供了更好的靈活性,使他們能更好地控制自己的軟體技術。Eclipse聯盟已經宣布將在2004年中期發布其3.0版軟體。這是一款非常受歡迎的java開發工具,這國內的用戶越來越多,實際上實用它java開發人員是最多的。缺點就是較復雜,對初學者來說,理解起來比較困難。

13、Ant

Another Neat Tool(Ant)是一種基於Java的build工具。理論上來說,它有些類似於(Unix)C中的make ,但沒有make的缺陷。因為Ant的原作者在多種(硬體)平台上開發軟體時,無法忍受這些工具的限制和不便。類似於make的工具本質上是基於shell(語言)的:他們計算依賴關系,然後執行命令(這些命令與你在命令行敲的命令沒太大區別)。這就意味著你可以很容易地通過使用OS特有的或編寫新的(命令)程序擴展該工具;
然而,這也意味著你將自己限制在了特定的OS,或特定的OS類型上,如Unix。Ant就不同了。與基於shell命令的擴展模式不同,Ant用Java的類來擴展。(用戶)不必編寫shell命令,配置文件是基於XML的,通過調用target樹,就可執行各種task。每個task由實現了一個實現了特定Task介面的對象來運行。

Ant支持一些可選task,一個可選task一般需要額外的庫才能工作。可選task與Ant的內置task分開,單獨打包。這個可選包可以從你下載Ant的同一個地方下載。ANT本身就是這樣一個流程腳本引擎,用於自動化調用程序完成項目的編譯,打包,測試等。除了基於JAVA是平台無關的外,腳本的格式是基於XML的,比make腳本來說還要好維護一些。Ant是Apache提供給Java開發人員的構建工具,它可以在Windows OS和Unix OS下運行,它不僅開放源碼並且還是一個非常好用的工具。Ant是Apache Jakarta中一個很好用的Java開發工具,Ant配置文件採用XML文檔編寫,所以Java程序員對其語法相當熟悉,Ant是專用於Java項目平台,能夠用純Java來開發,它能夠運行於Java安裝的平台,即體現了它的跨平台功能。它的缺點顯示執行結果只能是DOS字元界面,不能進行復雜的java程序開發。

14、IntelliJ

Intellij IDEA是一款綜合的Java 編程環境,被許多開發人員和行業專家譽為市場上最好的IDE。它提供了一系列最實用的的工具組合:智能編碼輔助和自動控制,支持J2EE,Ant,JUnit和CVS集成,非平行的編碼檢查和創新的GUI設計器。IDEA把Java開發人員從一些耗時的常規工作中解放出來,顯著地提高了開發效率。具有運行更快速,生成更好的代碼;持續的重新設計和日常編碼變得更加簡易,與其它工具的完美集成;很高的性價比等特點。在4.0版本中支持Generics,BEA WebLogic集成,改良的CVS集成以及GUI設計器。

IntelliJ IDEA能盡可能地促進程序員的編程速度。它包括了很多輔助的功能,並且與Java結合得相當好。不同的工具窗口圍繞在主編程窗口周圍,當滑鼠點到時即可打開,無用時也可輕松關閉,使用戶得到了最大化的有效屏幕范圍。以技術為導向的IDEA集成了調試器,支持本地和遠程的調試,即使我們需要修改一些設置上的東西使我們的工作順利進展。另外,它還提供了通常的監視,分步調試以及手動設置斷點功能,在這種斷點模式下,我們可以自動地在斷點之外設置現場訪問,甚至可以瀏覽不同的變數的值。IDE支持多重的JVM設置,幾個編譯程序和Ant建造系統,並且,它使得設置多重的自定義的類途徑變得簡單。

IntelliJ Idea是一個相對較新的Java IDE。它是Java開發環境中最為有用的一個。高度優化的IntelleJ Idea使普通任務變得相當容易,Idea支持很多整合功能,更重要的使它們設計的好容易使用。Idea支持XML中的代碼實現,Idea同時還會校正XML,Idea支持JSP的結構。作用於普通Java代碼的眾多功能同樣適用於JSP(比如整合功能),同時支持JSP調試;支持EJB,盡管它不包括對個別應用伺服器的特殊支持。Idea支持Ant建立工具,不僅是運行目標它還支持編譯與運行程序前後運行目標,另外也支持綁定鍵盤快捷鍵。在編輯一個Ant建立XML文件時,Idea還對組成Ant工程的XML部分提供支持。IntelliJ IDEA 被稱為是最好的JAVA IDE開發平台,這套軟體就是以其聰明的即時分析和方便的 refactoring 功能深獲大家所喜愛。缺點是較復雜,對初學者來說,理解起來比較困難。

小結

現在常用的Java項目開發環境有:JBuilder、VisualAge for Java、Forte forJava, Visual Cafe、Eclipse、NetBeans IDE、JCreator +J2SDK、jdk+記事本、EditPlus+ J2SDK等等。一般開發J2EE項目時都需要安裝各公司的應用伺服器(中間件)和相應的開發工具,在使用這些開發工具之前,我們最好能熟知這些軟體的優點和缺點,以便根據實際情況選擇應用。編程工具只是工具,為了方便人們工作而開發的,各有特點,因此,選工具主要的依據自己將要從事的領域是什麼,而不是盲目的認為那種工具好,那種工具不好。最後希望大家都能找到自己合適的java 開發工具。

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

閱讀全文

與java過濾器調用業務層相關的資料

熱點內容
怎麼對鋰電電解液進行除水處理 瀏覽:965
史密斯凈水器沒有廢水怎麼辦 瀏覽:847
小米空氣凈化器怎麼設置自動關機 瀏覽:161
美的過濾器飲水機四蕊 瀏覽:955
傷口泡了下水道的污水怎麼辦 瀏覽:463
新奧拓用曼牌什麼型號機油濾芯 瀏覽:900
edi水處理系統啟動注意事項 瀏覽:680
凈水機和廢水泵怎麼連接 瀏覽:195
水楊酸洗面奶幾天用一回 瀏覽:467
飲水機不熱怎麼維修 瀏覽:250
圖昂機油濾芯在什麼位置 瀏覽:540
魚缸過濾桶介紹 瀏覽:854
格蘭富家用污水提升器 瀏覽:549
ro膜發展前景 瀏覽:490
反滲透膜介面2分 瀏覽:699
魚寶凈水劑是什麼顏色的 瀏覽:592
污水處理常規19項包括哪些 瀏覽:636
醫院開水房飲水機叫什麼 瀏覽:548
怎樣叫污水變清水 瀏覽:470
正大海爾凈水器多少錢 瀏覽:940