新聞中心
值得注意的是,部署描述符優(yōu)先于注釋。換句話(huà)說(shuō),部署描述符覆蓋通過(guò)注釋機(jī)制所規(guī)定的配置信息。Web 部署描述符的 3.0 版本在 web-app 元素上包含一種名為 metadata-complete 的新屬性。該屬性定義了 web 描述符是否完整,或者 web 應(yīng)用程序的類(lèi)文件是否針對(duì)指定部署信息的注釋而進(jìn)行檢查。如果該屬性被設(shè)置為 true,則部署工具必須忽略類(lèi)文件中所存在的任何 servlet注釋?zhuān)⒅皇褂妹枋龇兴峒暗呐渲眉?xì)節(jié)。否則,如果沒(méi)有指定該值或者該值被設(shè)置為 false,容器必須針對(duì)注釋而掃描應(yīng)用程序的所有類(lèi)文件。這個(gè)屬性提供了在應(yīng)用程序啟動(dòng)階段啟用或者禁用注釋掃描以及對(duì)注釋的處理。

創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)的成都網(wǎng)站建設(shè)公司,我們專(zhuān)注網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)絡(luò)營(yíng)銷(xiāo)、企業(yè)網(wǎng)站建設(shè),買(mǎi)鏈接,廣告投放為企業(yè)客戶(hù)提供一站式建站解決方案,能帶給客戶(hù)新的互聯(lián)網(wǎng)理念。從網(wǎng)站結(jié)構(gòu)的規(guī)劃UI設(shè)計(jì)到用戶(hù)體驗(yàn)提高,創(chuàng)新互聯(lián)力求做到盡善盡美。
在 Servlet 3.0 中所引入的所有注釋都可以在 javax.servlet.http.annotation 和 javax.servlet.http.annotation.jaxrs 軟件包中找到。以下章節(jié)闡述 Servlet注釋的完整集合:
@Servlet:javax.servlet.http.annotation.Servlet 是一個(gè)類(lèi)級(jí)別的注釋?zhuān)_認(rèn)經(jīng)過(guò)注釋的類(lèi)為一個(gè) servlet 并保存關(guān)于所聲明的 servlet 的元數(shù)據(jù)。urlMappings 屬性是指定 URL 模式(調(diào)用該 servlet)的 @Servlet 的強(qiáng)制屬性。當(dāng)接收到了一個(gè)請(qǐng)求時(shí),容器將請(qǐng)求中的 URL 與 servlet 的 urlMappings 進(jìn)行匹配,且如果 URL 模式匹配,則調(diào)用相應(yīng)的 servlet 以響應(yīng)該項(xiàng)請(qǐng)求。該注釋的所有其他屬性都是可選的,并帶有合理的默認(rèn)值。Servlet 類(lèi)中必須有一種使用像 GET、PUT、POST、HEAD 或者 DELETE 這樣的 HttpMethod 注釋進(jìn)行注釋的方法。這些方法應(yīng)將 HttpServletRequest 和 HttpServletResponse 作為方法參數(shù)。與以前的版本相反,servlets 3.0 的版本可以作為簡(jiǎn)單傳統(tǒng) Java 對(duì)象(Plain Old Java Objects,POJOs)而實(shí)現(xiàn);也就是 servlets 不必再擴(kuò)展像 HTTPServlet 或者 GenericServlet 這樣的基礎(chǔ) servlet 實(shí)現(xiàn)類(lèi)。
為了進(jìn)行比較,在此給出了使用傳統(tǒng) Servlet 2.5 API 編寫(xiě)的 Java servlet 代碼片段,如下所示。在 Servlet 2.5 中,只要在部署描述符中配置了 servlet 的詳細(xì)信息,web 容器就將初始化 servlet。
- public class MyServlet extends HttpServlet {
- public void doGet (HttpServletRequest req,
- HttpServletResponse res) {
- ....
- }
- }
Deployment descriptor (web.xml)
MyServlet samples.MyServlet MyServlet /MyApp - ...
這里給出的是使用 Servlet 3.0 API 編寫(xiě)的較為簡(jiǎn)化的版本。當(dāng) MyServlet 使用 @Servlet注釋而被注釋為一個(gè) servlet 時(shí),則在 web 容器的啟動(dòng)期間對(duì)其初始化。注意,在這種情況下部署描述符是可選的。
- @Servlet(urlMappings={"/MyApp"})
- public class MyServlet {
- @GET
- public void handleGet(HttpServletRequest req,
- HttpServletResponse res) {
- ....
- }
- }
- Deployment descriptor (web.xml)
- optional
@ServletFilter 和 @FilterMapping:您可以使用 javax.servlet.http.annotation.ServletFilter 注釋來(lái)注釋過(guò)濾器類(lèi),從而輕松創(chuàng)建一個(gè) servlet 過(guò)濾器。該注釋封裝正被聲明的過(guò)濾器的有關(guān)元數(shù)據(jù)。在過(guò)濾器類(lèi)上具有 @FilterMapping 注釋也是強(qiáng)制性的。@FilterMapping 注釋定義用于過(guò)濾器的 URL 模式。@ServletFilter 的所有其他屬性都是可選的,并帶有合理的默認(rèn)值。V3.0 過(guò)濾器類(lèi)現(xiàn)在類(lèi)似 POJO 類(lèi),并且沒(méi)有用于這些類(lèi)所需的 Filter 接口或者非參數(shù)公用構(gòu)造器。以下給出了使用 Servlet v2.5 API 的過(guò)濾器類(lèi)的代碼片段:
- public class MyFilter implements Filter {
- public void doFilter(ServletRequest req,
- ServletResponse res,
- FilterChain chain)
- throws IOException, ServletException {
- ......
- }
- }
- Deployment descriptor (web.xml)
My Filter samples.MyFilter My Filter /foo - ...
使用 Servlet 3.0 編寫(xiě)的一個(gè)示例過(guò)濾器類(lèi)如下所示。因?yàn)樵擃?lèi)使用 ServletFilter 注釋?zhuān)匀萜鲗?MyFilter 標(biāo)記為一個(gè)過(guò)濾器類(lèi)。MyFilter 截取所有收到的請(qǐng)求,其中該請(qǐng)求的 URL 匹配模式 /foo。Servlet 3.0 為過(guò)濾器配置提供了可選的部署描述符。
- @ServletFilter
- @FilterMapping("/foo")
- public class MyFilter {
- public void doFilter(HttpServletRequest req,
- HttpServletResponse res) {
- .....
- }
- }
- Deployment descriptor (web.xml)
- optional
@InitParam:該注釋可以用來(lái)定義必須傳遞給 servlet 或者過(guò)濾器類(lèi)的任意初始化參數(shù)。它是 @Servlet 和 @ServletFilter 注釋的一個(gè)屬性。以下代碼示例解釋了如何將具有 english 值、稱(chēng)作 lang 的初始化參數(shù)傳遞給一個(gè) servlet 類(lèi)。
- @Servlet(urlMappings={"/MyApp"}, initParams ={@InitParam
(name="lang", value="english")})- public class MyServlet {
- @GET
- public void handleGet(HttpServletRequest req,
- HttpServletResponse res) {
- ....
- }
- }
@ServletContextListener:javax.servlet.http.annotation.ServletContextListener 注釋將該類(lèi)聲明為一個(gè) servlet 上下文偵聽(tīng)器。當(dāng) web 容器創(chuàng)建或者銷(xiāo)毀 ServletContext 時(shí),該上下文偵聽(tīng)器接收注釋。上下文偵聽(tīng)器是一個(gè) POJO 類(lèi),且不必實(shí)現(xiàn) ServletContextListener 接口。使用 Servlet 2.5 API 編寫(xiě)的偵聽(tīng)器類(lèi)如下所示。當(dāng)且僅當(dāng)您在部署描述符中配置了該偵聽(tīng)器類(lèi),容器才識(shí)別它。
- public class MyListener implements ServletContextListener {
- public void contextInitialized(ServletContextEvent sce) {
- }
- .....
- }
- Deployment Descriptor (web.xml)
samples.MyListener - ....
使用 Servlet 3.0 API 編寫(xiě)的一個(gè)得到極大簡(jiǎn)化的偵聽(tīng)器類(lèi),如下所示。
- @ServletContextListener
- public class MyListener {
- public void contextInitialized (ServletContextEvent sce) {
- }
- .....
- }
- Deployment Descriptor (web.xml)
- optional
新聞名稱(chēng):Servlet注釋與部署描述符
文章來(lái)源:http://www.5511xx.com/article/djipigj.html


咨詢(xún)
建站咨詢(xún)
