欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
servlet2.5/jsp2.1的新特征
servlet 2.5
 
2005年9月26日,Sun公司和JSR154的專(zhuān)家組發(fā)布Servlet API的一個(gè)新的版本。在一般情況下,一個(gè)JSR的新版本僅僅包括對以前少數有名無(wú)實(shí)的規范進(jìn)行去除更新。但這次,新版本中增加新的特征和變化,他們對Servlets的產(chǎn)生重要影響,使得Servlet的版本升到了2.5。
在這篇文章里,我主要談?wù)凷ervlet2.5版本中的新特征。描述每一個(gè)變化,闡述那些必要變化產(chǎn)生的背景,并展示如何在基于Servlet的項目中利用這些變化?!?br>事實(shí)上,這是我為JavaWorld提供的第六篇關(guān)于Servlet API更新資料的文章。這篇文章意在兩個(gè)目的:從眼前來(lái)看,向你介紹Servlet的新特征。從長(cháng)遠來(lái)看,是展現Servlet變化的歷史概要,這樣當你基于老的Servlet API版本進(jìn)行編碼的時(shí)候,你可以正確地決定哪些特征和功能你可以使用,而哪些特征和功能你不應該使用。你可以參考我先前寫(xiě)的關(guān)于Servlet的文章。
注意:當你想實(shí)踐這些Servlet的新特征和功能時(shí),你要知道的是:并不是所有的Servlet容器和Java企業(yè)級應用服務(wù)器都能立即適用于最新版的Servlet API,寫(xiě)這篇文章時(shí)(2006年1月2日),Jetty 6 server和Sun公司的GlassFish server是公認最好的支持Servlet2.5的容器,而Apache Tomcat5.5和Jboss 4.0目前只支持Servlet2.4。
Servlet2.5一些變化的介紹:
1)    基于最新的J2SE 5.0開(kāi)發(fā)的。
2)    支持注釋。
3)    web.xml中的幾處配置更加方便。
4)    去除了少數的限制。
5)    優(yōu)化了一些實(shí)例
J2SE 5.0的產(chǎn)物:
從一開(kāi)始,Servlet 2.5 規范就列出J2SE 5.0 (JDK 1.5) 作為它最小的平臺要求。它使得Servlet2.5只能適用基于J2SE 5.0開(kāi)發(fā)的平臺,這個(gè)變動(dòng)意味著(zhù)所有J2SE5.0的新特性可以保證對Servlet2.5程序員有用。
傳統意義上,Servlet和JEE版本一直與JDK的版本保持同步發(fā)展,但是這次,Servlet的版本跳過(guò)1.4版本。專(zhuān)家組認為版本的加速增長(cháng)是正當的,因為J2SE5.0提出一個(gè)引人注目的,Servlet和JEE規范都要利用的特征??注釋。
注釋?zhuān)?/strong>
注釋是作為JSR175的一部分提出的(一種為Java語(yǔ)言設計提供便利的Metadata)一種新的語(yǔ)言特色。它是利用Metadata為Java編碼結構(類(lèi),方法,域等等)裝飾的一種機制。它不能像代碼那樣執行,但是可以用于標記代碼,這個(gè)過(guò)程是基于Metadata信息的代碼處理機,通過(guò)更新他們的事件行為來(lái)實(shí)現的。

我們可以憑借不同的技巧來(lái)注釋類(lèi)和方法,例如連續地標記接口或者是@deprecated Javadoc評論。這種新式的Metadata可以便利地提供了一種標準的機制來(lái)實(shí)現注釋功能,以及通過(guò)庫來(lái)創(chuàng )建用戶(hù)自己的注釋類(lèi)型的變量。
下面是一個(gè)簡(jiǎn)單的Web service 注釋例子:
import javax.jws.WebService;
import javax.jws.WebMethod;
@WebService
public class HelloWorldService {
  @WebMethod
  public String helloWorld() {
    return "Hello World!";
  }
}
@WebService和@WebMethod這兩個(gè)注釋類(lèi)型,在JSR181(為Java平臺提供的Web ServicesMetadata)有詳細說(shuō)明,可以像類(lèi)一樣的引用,標記這個(gè)類(lèi)作為一個(gè)Web service并且標記它的helloWorld()方法做為一個(gè)Web service方法。對于他們本身來(lái)說(shuō),注釋只是寫(xiě)在那里并沒(méi)有什么作用,好像在崗位上做記錄一樣,但是,一個(gè)容器一旦加載這個(gè)類(lèi)并對那些注釋進(jìn)行二進(jìn)制編碼,就可以把這個(gè)類(lèi)連到Web service上。
注釋可以接受屬性/值這些參數。它保存著(zhù)參數的信息并且可以利用這些參數來(lái)更改被請求的事件行為。例如下面更高級的注釋例子:
@WebService(
 name = "PingService",
  targetNamespace=http://acme.com/ping
)
@SOAPBinding(
  style=SOAPBinding.Style.RPC,
  use=SOAPBinding.Use.LITERAL
)
public class Ping {
  @WebMethod(operationName = "Foo")
  public void foo() { }
}
一旦加載了這個(gè)類(lèi),一個(gè)正確配置的容器就會(huì )識別出注釋及其參數,并將這個(gè)做為一個(gè)PingService通過(guò)利用remote-procedure-call/literal的編碼方式與一個(gè)Foo operation相連。實(shí)際上,注釋便指明了類(lèi)和類(lèi)的容器之間的聯(lián)系。

Java本身的規范(JSR175)僅僅有少量的注釋類(lèi)型變量。而這些有趣的注釋類(lèi)型變量主要來(lái)自于其他的JSRs:
"JSR 250: Java平臺的公共注釋
"JSR 220: 企業(yè)級JavaBeans 3.0 
"JSR 224: 基于XML的Java API Web Services (JAX-WS) 2.0 
"JSR 181: Java平臺的Web Services Metadata 
Servlet2.5中的注釋?zhuān)?br>回到Servlet2.5上來(lái),一種新的規范描述了幾種注釋在Servlet環(huán)境中是如何工作的。功能弱的Servlet容器忽略了這些規范,然而JEE容器中的Servlet卻嚴格遵守這些規范。

有的注釋提供了在XML注冊的可選擇性,否則就要注冊在配置文件web.xml中。有的作為容器的請求來(lái)執行其任務(wù),否則就由Servlet親自來(lái)執行。還有的注釋兩者都具備。

注釋準確的定義不是完全固定的,因為Servlet本身并沒(méi)有定義注釋。它僅僅解釋了它們如何影響Servlet環(huán)境,下面是注釋的一個(gè)簡(jiǎn)要的概述,你可以看到在JEE5中它們的用途:

"@Resource and @Resources:@Resource位于類(lèi)或變量中以對Servlet容器進(jìn)行“資源注入”。當容器識別出這個(gè)注釋時(shí),它會(huì )在獲得服務(wù)地位之前,用適當的值實(shí)現帶注釋的變量的重新注入。通過(guò)使用這種注釋?zhuān)悴槐乩肑NDI來(lái)查找命令和在配置文件web.xml中手動(dòng)聲明資源。服務(wù)器通過(guò)Servlet的自我調整來(lái)執行它的任務(wù)。變量的名稱(chēng)和類(lèi)型由映像機制自動(dòng)確定,盡管你可以利用注釋的參數來(lái)超越這一限制。一個(gè)注入的資源可以是數據源,Java信息服務(wù)目的文件或者是環(huán)境設置的標量。下面是一個(gè)例子:
@Resource javax.sql.DataSource catalog;
public getData() {
  Connection con = catalog.getConnection();
}
現在,在這段Servlet代碼變成服務(wù)之前,容器會(huì )定位JNDI變量,并對于目錄變量進(jìn)行手動(dòng)分配。
為了效率,僅僅某些類(lèi)支持資源注入,這些類(lèi)有:Servlets,Servlet過(guò)濾器,Servlet事件監聽(tīng)器,JSP標簽操作器,JSP庫事件監聽(tīng)器,用于處理beans的JSF,以及一些與Serlvets無(wú)關(guān)的類(lèi)。
"@Resources注釋與@Resource相似,但是它用于一組@Resource注釋。它們都來(lái)自JSR250,是Java平臺的公共注釋。
"@PostConstruct and @PreDestroy:可以使方法成為帶有生命周期的方法。@PostConstruct方法用于資源注入初始化之后。@PreDestroy方法用于Servlet脫離服務(wù)并釋放注入的資源的時(shí)候?;厥盏姆椒ū仨毷鞘聦?shí)的方法,返回void并且不可以?huà)伋鋈魏萎惓?。這些注釋本質(zhì)上使得任何方法都成為init()和destroy()的子方法,這些特征也來(lái)自與JSR250。
"@EJB:類(lèi)似于@Resource,設計用于注入企業(yè)級的JavaBeans。比起@Resource,它略有不同,在于@EJB的參數特定設計用來(lái)定位EJB的參數。這個(gè)注釋來(lái)自EJB3.0的規范。
"@WebServiceRef:與@Resource 和 @EJB相似,設計用于注入Web service參數。來(lái)自于JAX-WS2.0規范。
"@PersistenceContext, @PersistenceContexts, @PersistenceUnit, and @PersistenceUnits:這些注釋來(lái)自EJB3.0規范來(lái)支持Java對象的持久化。
"@DeclareRoles: 定義應用程序中安全角色的使用。當定義一個(gè)Servlet類(lèi)時(shí),在配置文件web.xml中<security-role>標簽中對它進(jìn)行設置,來(lái)自JSR250。
" @RunAs:用于聲明哪個(gè)類(lèi)應該執行。當定義一個(gè)Servlet類(lèi)時(shí),在配置文件web.xml中<run-as>標簽中對它進(jìn)行設置。來(lái)自于JSR250。

注釋的執行:
不論你使用注釋與否??尤其在你不使用時(shí)??它對于理解服務(wù)器上程序的執行有著(zhù)重要意義。為了讓服務(wù)器識別類(lèi)中的注釋?zhuān)仨毤虞d這些類(lèi),這就意味著(zhù)服務(wù)器必須是啟動(dòng)著(zhù)的,服務(wù)器通過(guò)WEB-INF/classes目錄下和WEB-INF/lib目錄下的所有類(lèi)文件來(lái)查找注釋。(每個(gè)規范下,服務(wù)器不必查找這兩個(gè)目錄以外的目錄。)你可以通過(guò)下面的方法指明<web-app>根的屬性而不必使用如何進(jìn)行注釋?zhuān)?br><web-app xmlns="http://java.sun.com/xml/ns/javaee"
             version="2.5" full="true">
</web-app>
web.xml的便利:
Servlet2.5對于web.xml引入幾個(gè)小的變動(dòng),使得它更加方便。
Servlet名稱(chēng)的通配符化:
首先,當你寫(xiě)<filter-mapping>,你現在可以在<Servlet-name>標簽中使用*號來(lái)代表所有的Servlets。而以前,你必須一次把一個(gè)Servlet綁定到過(guò)濾器上,像這樣:

<filter-mapping>
  <filter-name>Image Filter</filter-name>
  <Servlet-name>ImageServlet</Servlet-name>
</filter-mapping> 

現在,你可以一次綁定所有的Servlets:

<filter-mapping>
  <filter-name>Image Filter</filter-name>
  <Servlet-name>*</Servlet-name>  <!?新特征 -->
</filter-mapping>

這有著(zhù)很大用途,例如:

<filter-mapping>
  <filter-name>Dispatch Filter</filter-name>
  <Servlet-name>*</Servlet-name>
  <dispatcher>FORWARD</dispatcher>
</filter-mapping>

映射的復合模式:
其次,當我們寫(xiě)<Servlet-mapping> 或者 <filter-mapping>時(shí),你現在可以在同一的標簽中采用復合匹配的標準。以前一個(gè)<Servlet-mapping>只支持一個(gè)<url-pattern>元素,現在它不只支持一個(gè),例如:
<Servlet-mapping>
  <Servlet-name>color</Servlet-name>
  <url-pattern>/color/*</url-pattern>
  <url-pattern>/colour/*</url-pattern>
</Servlet-mapping>

同樣地,以前<filter-mapping>也是只支持一個(gè)<url-pattern> 或者一個(gè) <Servlet-name>?,F在它對于每個(gè)元素都可以支持任意多個(gè):

<filter-mapping>
  <filter-name>Multipe Mappings Filter</filter-name>
  <url-pattern>/foo/*</url-pattern>
  <Servlet-name>Servlet1</Servlet-name>
  <Servlet-name>Servlet2</Servlet-name>
  <url-pattern>/bar/*</url-pattern>
</filter-mapping>

HTTP方法名:

最近,你可以將合法的HTTP/1.1方法名放進(jìn)<http-method>元素中。當你使用這些方法時(shí),<http-method>將指明<security-constraint>標記里的方法應該被應用。從以前來(lái)看,它僅限于HTTP/1.1的7個(gè)標準方法:GET,POST,PUT,DELETE,HEAD,OPTIONS和TRACE。但是,HTTP/1.1允許對方法進(jìn)行擴展,WebDAV是用于這種擴展的普遍技術(shù)。在Servlet2.5中,你可以安全地約束任何可能的HTTP方法名,標準及擴展,包括WebDAV方法,例如:LOCK,UNLOCK,COPY及MOVE。
如果你寫(xiě)一個(gè)WebDAV的Servlet,你不必使用doLock()和doCopy()方法。你必須寫(xiě)自己的service()方法及分派request.getMethod()方法。正由于這種變化,你不必管理系統的安全性。
去除限制:

Servlet2.5去除了關(guān)于錯誤處理和回話(huà)跟蹤的一些限制。對于錯誤處理,Servlet2.5之前,配置在<error-page>中的錯誤處理頁(yè)面不能通過(guò)調用setStatus()方法來(lái)修改觸發(fā)他們的錯誤代碼,而Servlet2.5減弱了這一規范。這樣的規范的產(chǎn)生于這樣的觀(guān)點(diǎn),就是錯誤頁(yè)面的工作是指出每個(gè)錯誤而不是修改錯誤。但是,實(shí)際使用中,錯誤頁(yè)面不只是用于指出錯誤,而是還能做更多的事情,或許可以代替在線(xiàn)幫助來(lái)幫助用戶(hù)解決問(wèn)題。這個(gè)規范將不再限制錯誤頁(yè)面所產(chǎn)生的反饋信息。

對于會(huì )話(huà)跟蹤,Servlet2.5之前,調用RequestDispatcher.include()的Servlet不能設置響應的標題頭,而Servlet2.5減弱了這一規范。原規范的目的是使內部的Servlets限制在自己的頁(yè)面空間中,不可以影響外部的頁(yè)面?,F在這個(gè)規范已經(jīng)減弱,允許在內部的Servlet中使用request.getSession()命令,這個(gè)命令可以悄悄地創(chuàng )建一個(gè)會(huì )話(huà)跟蹤cookie的標題頭。邏輯上要求限制內部的資源,但邏輯上也要求這些限制不應該取消其啟動(dòng)session的這一功能。這個(gè)變動(dòng)對于Portlet規范來(lái)說(shuō)顯得尤其重要。作用是:如果響應已經(jīng)有效,則getSession()命令就會(huì )拋出一個(gè)IllegalStateException(異常),而在此之前,就沒(méi)有這個(gè)功能。

優(yōu)化:
最近,新的規范優(yōu)化了一些實(shí)例,使得Servlets更加方便而且保證了更好地按要求工作。

終止響應:
第一處優(yōu)化細小又深奧,但做為規范中的一個(gè)例子還有蠻有趣的。Servlet2.4規范規定響應在這幾種情況下應該是有效的,包括:在響應的setContentLength方法中內容已經(jīng)明確說(shuō)明,以及內容已經(jīng)寫(xiě)進(jìn)了響應中。這種情況只有你的代碼像下面這樣才可以使響應重新定向:

response.setHeader("Host", "localhost");
response.setHeader("Pragma", "no-cache");
response.setHeader("Content-Length", "0");
response.setHeader("Location", "http://www.apache.org");

Servlet技術(shù)忽略特定區域的標題頭,因為內容滿(mǎn)足0字節長(cháng)度,響應就會(huì )立即生效。而在它開(kāi)始之前,響應就已失效了!Servlet容器通常拒絕執行這種行為,而Servlet2.5版本增加了“長(cháng)度必須大于0”這個(gè)原則。
實(shí)例編碼:

Servlet2.4規范規定必須在調用request.getReader()方法之前調用request.setCharacterEncoding()方法。但是,如果你忽略這個(gè)原則而在其之后去調用request.setCharacterEncoding()方法,那么會(huì )產(chǎn)生什么后果,這個(gè)問(wèn)題規范里并沒(méi)有說(shuō)。為了簡(jiǎn)便,現在消除這種情況!
Cross-context sessions(不同上下文目錄間的會(huì )話(huà)):
最近,關(guān)于Cross-context會(huì )話(huà)處理的規則已經(jīng)明確說(shuō)明。當Servlets指派從一個(gè)上下文到其他上下文的請求時(shí),這個(gè)規則就發(fā)揮了作用??在目標調用過(guò)程中,包括哪些會(huì )話(huà)。這個(gè)版本的出現使得一個(gè)上下文目錄的主頁(yè)里的portlets可以通過(guò)幾種內部的命令來(lái)對別的上下文目錄里的portlets起作用。Servlet2.5明確指出一個(gè)上下文目錄里的資源可以訪(fǎng)問(wèn)其他上下文目錄的session(會(huì )話(huà)),而不用考慮這個(gè)請求從哪里開(kāi)始的。這意味著(zhù)portlets可以脫離主頁(yè)的范圍而在自己的范圍里運行,而且這個(gè)規范還會(huì )應用在不兼容的Serlvet容器中。
期待:

由于Servlet2.5版本要保持一些舊的性質(zhì),幾個(gè)大的概念不得不延后到下一個(gè)階段。它們包括:
"新的輸入/輸出(NIO)支持:使NIO通道更有利于Servlets進(jìn)行客戶(hù)端通信成為可能。
"過(guò)濾器wrap-under或wrap-over語(yǔ)義:有時(shí)用過(guò)濾器包裝請求,和/或者響應對象去修改方法行為或者啟用新的方法。當把這種包裝和服務(wù)器對請求和響應的包裝結合起來(lái)時(shí),又應該怎么包裝在一起?
"用于歡迎的Servlets文件:做為索引應該充當歡迎作用的文件嗎?在此之前,這個(gè)回答是肯定的。但是規范沒(méi)有明確說(shuō)明如何使用這個(gè)功能,尤其在沒(méi)有索引的情況下。
"用于歡迎的文件的分派規則:如何分派歡迎文件,這個(gè)細節并沒(méi)有完全說(shuō)明,而是遺留了一些開(kāi)放的缺口來(lái)應對不兼容問(wèn)題。
"登陸后選擇默認頁(yè)面:如果用戶(hù)通過(guò)他們的書(shū)簽訪(fǎng)問(wèn)Servlet的登陸頁(yè)面,那么在成功登陸后頁(yè)面應該轉向哪里呢?這個(gè)問(wèn)題至今尚未明確說(shuō)明。
"用戶(hù)的主題日志:在通過(guò)網(wǎng)站正確地注冊之后,不通過(guò)傳統地登陸方式?jīng)]有辦法使Servlet信任用戶(hù)。
結束語(yǔ):
如果拋開(kāi)注釋來(lái)看Servlet2.5的變化,可見(jiàn)在配置文件web.xml中去除了一些限制,是有利的,同時(shí)又優(yōu)化了實(shí)例行為使其更適合更便于開(kāi)發(fā)Web系統(網(wǎng)頁(yè))。
Servlet2.5中注釋的作用更加戲劇化。Servlets本身不能聲明注釋類(lèi)型的變量,甚至性能弱的Servlet容器都不支持注釋。然而在JEE5環(huán)境下的Servlets編寫(xiě)者可以看到,通過(guò)公共的注釋及EJB3.0和JAX-WS2.0規范而引入的注釋類(lèi)型會(huì )對代碼產(chǎn)生很大變化,并且這也將對Servlet如何管理外部資源,對象的持久化及EJB的構成產(chǎn)生重大影響

J2EE的兩種重要的表現層技術(shù)JSP和JSF發(fā)布了新技術(shù)規范的預覽版本,其中最重要的一點(diǎn)是兩者將表達式語(yǔ)言(ExpressionLanguage,EL)部分合二為一。在不久的將來(lái),這兩種技術(shù)有可能更進(jìn)一步地彼此融合,成為一種統一的表現層技術(shù)。然而在J2EE社群的普遍觀(guān)點(diǎn)中,如果單單作為一種視圖技術(shù),JSP并不是最佳的選擇,Velocity和XSLT等基于模板的視圖技術(shù)通常比JSP更方便;而基于組件的JSF也面臨廣泛的信任危機。兩者的組合是否能得到業(yè)界的認可,還需要時(shí)間的檢驗。

jsp 2.1


    我們很高興向大家宣告,JavaServer Pages、JSR-245下開(kāi)發(fā)的Faces.JavaServerPages(JSP)2.1和JSR-252下開(kāi)發(fā)的JavaServer Faces(Faces)1.2的新版規范的Early DraftReview發(fā)布。

    JSP 2.1把ExpressionLanguage(EL)輸出到它自己各自分離的文檔中,在技術(shù)上,這些文檔是JSP規范的子文檔。這些統一的EL規范定義了一個(gè)更高層的java包,javax.el。這個(gè)包與使用它的技術(shù)之間完全獨立,并且允許此技術(shù)將自身插入EL處理過(guò)程。更改的JSP規范遵從使用標準化EL的規范。

    對于前面提到的JSR-252,這個(gè)規范并沒(méi)什么新特性。Faces 1.2支持新的標準化EL,還包含一些bug修復的相關(guān)規范。

   Faces和JSP在JSRs下的結盟帶來(lái)了一些新功能,也為將來(lái)的發(fā)展打下了堅實(shí)的基礎。例如,在同時(shí)使用Faces和JSP的web應用中,網(wǎng)頁(yè)僅使用JSP(不包含任何faces內容)來(lái)訪(fǎng)問(wèn)ManagedBeans成為可能。在JSP規范的附錄E中和Faces規范的前言中都可以看到更改內容的細節。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久