您好,登錄后才能下訂單哦!
編寫好Servlet之后,接下來(lái)要告訴Web容器有關(guān)于這個(gè)Servlet的一些信息。在Servlet 3.0中,可以使用標(biāo)注(Annotation)來(lái)告知容器哪些Servlet會(huì)提供服務(wù)以及額外信息。例如在HelloServlet.java中: @WebServlet("/hello.view") public class HelloServlet extends HttpServlet { 只要在Servlet上設(shè)置@WebServlet標(biāo)注,容器就會(huì)自動(dòng)讀取當(dāng)中的信息。上面的@WebServlet告訴容器,如果請(qǐng)求的URL是“/hello.view”,則由HelloServlet的實(shí)例提供服務(wù)??梢允褂聾WebServlet提供更多信息。 @WebServlet( name="Hello", urlPatterns={"/hello.view"}, loadOnStartup=1 ) public class HelloServlet extends HttpServlet { 上 面的@WebServlet告知容器,HelloServlet這個(gè)Servlet的名稱是Hello,這是由name屬性指定的,而如果客戶端請(qǐng)求的 URL是/hello.view,則由具Hello名稱的Servlet來(lái)處理,這是由urlPatterns屬性來(lái)指定的。在Java EE相關(guān)應(yīng)用程序中使用標(biāo)注時(shí),可以記得的是,沒(méi)有設(shè)置的屬性通常會(huì)有默認(rèn)值。例如,若沒(méi)有設(shè)置@WebServlet的name屬性,默認(rèn)值會(huì)是 Servlet的類完整名稱。 當(dāng)應(yīng)用程序啟動(dòng)后,事實(shí)上并沒(méi)有創(chuàng)建所有的Servlet實(shí)例。容器會(huì)在首次請(qǐng)求需要某個(gè)Servlet服務(wù)時(shí),才 將對(duì)應(yīng)的Servlet類實(shí)例化、進(jìn)行初始化操作,然后再處理請(qǐng)求。這意味著第一次請(qǐng)求該Servlet的客戶端,必須等待Servlet類實(shí)例化、進(jìn)行 初始動(dòng)作所必須花費(fèi)的時(shí)間,才真正得到請(qǐng)求的處理。 如果希望應(yīng)用程序啟動(dòng)時(shí),就先將Servlet類載入、實(shí)例化并做好初始化動(dòng)作,則可以使用 loadOnStartup設(shè)置。設(shè)置大于0的值(默認(rèn)值為-1),表示啟動(dòng)應(yīng)用程序后就要初始化Servlet(而不是實(shí)例化幾個(gè)Servlet)。數(shù) 字代表了Servlet的初始順序,容器必須保證有較小數(shù)字的Servlet先初始化,在使用標(biāo)注的情況下,如果有多個(gè)Servlet在設(shè)置 loadOnStartup時(shí)使用了相同的數(shù)字,則容器實(shí)現(xiàn)廠商可以自行決定要如何載入哪個(gè)Servlet。
補(bǔ)充添加:標(biāo)注(Annotation)聲明后,則不需要在Web.xml中再次聲明servlet的相關(guān)信息了: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" metadata-complete="false" version="2.5"> <display-name>mavenWeb</display-name> <servlet> <servlet-name>HServlet</servlet-name>
<servlet-class>com.kim.demo.HelloServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HServlet</servlet-name> <url-pattern>/HServlet</url-pattern> </servlet-mapping> </web-app>
注意:
metadata-complete="false" 默認(rèn)的是
metadata-complete="true" 必須的修改掉
Servlet 3.0 的部署描述文件 web.xml 的頂層標(biāo)簽 <web-app> 有一個(gè) metadata-complete 屬性,該屬性指定當(dāng)前的部署描述文件是否是完全的。如果設(shè)置為 true,則容器在部署時(shí)將只依賴部署描述文件,忽略所有的注解(同時(shí)也會(huì)跳過(guò) web-fragment.xml 的掃描,亦即禁用可插性支持,);如果不配置該屬性,或者將其設(shè)置為 false,則表示啟用注解支持(和可插性支持)。 應(yīng)用注解方便很多,不過(guò)現(xiàn)在都用集成spring等基本原始的servlet也不會(huì)多寫了
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。