溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

我對(duì)Servlet的理解

發(fā)布時(shí)間:2020-07-15 09:40:17 來源:網(wǎng)絡(luò) 閱讀:419 作者:智者無疆 欄目:開發(fā)技術(shù)

Servlet是java web中的動(dòng)態(tài)資源,是三大組件(Servlet,Filter,Listener)之一,用于處理客戶端的請(qǐng)求,并作出相應(yīng),具體用法為:

一,實(shí)現(xiàn)Servlet的三種方式:

1.實(shí)現(xiàn)javax.servlet.Servlet接口

    public class ServletOne implements Servlet{

        public void destroy(){}

        public ServletConfig getServletConfig(){}

        public String getServletInfo(){}   

        public void init(ServletConfig arg0) throws ServletException {}

        public void service(ServletRequest request, ServletResponse response) 

               throws ServletException, IOException {}

    }

   (1).init()方法在Servlet創(chuàng)建時(shí)被調(diào)用

   (2).destroy()方法在Servlet銷毀時(shí)創(chuàng)建

   (3).service()方法每請(qǐng)求一次servelt調(diào)用一次

2.繼承javax.servlet.GenericServlet,并重寫其所有的抽象方法

    public class ServletTwo extends GenericServlet{

        @Override

        public void service(ServletRequest request, ServletResponse response)  throws ServletException, IOException {}

    }

3.繼承javax.servlet.http.HttpServlet

    public class ServletFour extends HttpServlet {

        protected void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {}

        protected void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {}

    }

    (1).doGet()處理get請(qǐng)求

    (2).doPost()處理post請(qǐng)求

    注:用此方法實(shí)現(xiàn)的Servlet只能處理http協(xié)議的請(qǐng)求


二,配置Servlet

    通過以上方式定義好了一個(gè)Servlet,但此時(shí)的Servlet還不能處理客戶端請(qǐng)求,因?yàn)闆]有給此Servlet指定處理來自客戶端的那個(gè)請(qǐng)求,因此要把此Servlet配置成能處理客戶端請(qǐng)求的Servlet。在WebContent/WEB-INF/web.xml中配置如下: 

    <servlet>

        <servlet-name>one</servlet-name>

        <servlet-class>com.web.servlet.ServletOne</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>one</servlet-name>

        <url-pattern>/one</url-pattern>

    </servlet-mapping>

    一個(gè)<servlet>標(biāo)簽就把一個(gè)Servlet和一個(gè)名字綁定在了一起,一個(gè)<servlet-mapping>標(biāo)簽就把一個(gè)servlet名字和一個(gè)路徑綁定在了一起,因此經(jīng)過此配置客戶端就可以通過訪問  http://localhost:8080/項(xiàng)目名/one  這一個(gè)路徑來訪問 com.web.servlet.ServletOne 這個(gè)Servlet。當(dāng)然一個(gè)<servlet-mapping> 標(biāo)簽也可以有多個(gè)<url-pattern>標(biāo)簽,來給一個(gè)Servlet綁定多個(gè)訪問路徑,如:   

            <servlet-mapping>

            <servlet-name>TServlet</servlet-name>

            <url-pattern>/login</url-pattern>

            <url-pattern>/log</url-pattern>

            </servlet-mapping>

也可以在<servlet-mapping>標(biāo)簽中使用通配符*來指定訪問路徑,但是*不能出現(xiàn)在路徑的中間位置如:

            <url-pattern>/servlet/*</url-pattern>    對(duì)的          

            <url-pattern>*.do</url-pattern>          對(duì)的

    <url-pattern>/*.do</url-pattern>         錯(cuò)的

    那么就會(huì)出現(xiàn)一個(gè)地址同時(shí)匹配一個(gè)精確的<url-pattern>和一個(gè)使用了通配符的<url-mapping>,此時(shí)會(huì)優(yōu)先選擇精確<url-mapping>所綁定的Servlet。


三,域?qū)ο?/span>

    域?qū)ο笫侵冈谝欢ㄗ饔糜虮还蚕淼膶?duì)象,在Servlet中有四大域?qū)ο螅篠ervletContext,HttpSession,ServletRequest,PageContext,注意:PageContext是jsp的九大內(nèi)置對(duì)象之一,因?yàn)閖sp是一個(gè)特殊的Servlet,故這里將PageContext也算在內(nèi)。域?qū)ο笸ㄓ玫牟僮鲗傩缘姆椒椋?br/>

    void setAttribute(String name,Object obj)   網(wǎng)域?qū)ο笾斜4嬉粋€(gè)屬性

    Object getAttribute(String name)            從域?qū)ο笾蝎@取一個(gè)屬性值

    void removeAttribute(String name)           從域?qū)ο笾幸瞥粋€(gè)屬性


四,獲取資源文件

1.獲取資源的真實(shí)路徑:

    ServletContext context = getServletContext()

    String path = context.getRealPath("/a.txt")

2.獲取資源流:

    InputStream in = context.getResourceAsStream("/a.txt")

注:以上參數(shù)必須以 / 開頭,表示相對(duì)于項(xiàng)目

3.獲取類路徑下的資源

    對(duì)于web項(xiàng)目來說,當(dāng)把項(xiàng)目發(fā)布后就沒有 src 這個(gè)目錄,所以在拿類路徑下的資源文件時(shí),就不能用 new InputStream("") 這種方式來獲取。此時(shí)src目錄就相當(dāng)于WebContent/WEB-INF/classes目錄,可以用兩種方式來獲取

    (1).類.getResourceAsStream(String path)

        path以 / 開頭表示路徑相對(duì)于 classes

        path不以 / 開頭表示路徑相對(duì)于當(dāng)前類

    (2).類.getClassLoader().getResourceAsStream(String path)

        此時(shí)path只想對(duì)于classes










向AI問一下細(xì)節(jié)

免責(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)容。

AI