App下載

服務(wù)器怎么通過URL找到所需的servlet的?dd文件詳解!

猿友 2021-06-11 17:58:28 瀏覽數(shù) (3648)
反饋

很多小伙伴們很好奇一件事,我向?yàn)g覽器發(fā)起了一個(gè)請(qǐng)求,瀏覽器是怎么根據(jù)我們的請(qǐng)求找到相應(yīng)的 servlet 的?其實(shí)這一切都要?dú)w功于webapp 的部署文件 ?web.xml?,接下來就讓小編來介紹一下 ?web.xml? 是怎么把 servlet 和 url 關(guān)聯(lián)起來的吧。

?web.xml?又叫項(xiàng)目部署文件(有些教程會(huì)稱呼它為DD文件,即Deployment Descriptor,部署描述的意思)。這個(gè)文件由一堆的xml標(biāo)簽組成,通過這些標(biāo)簽提供的數(shù)據(jù)來對(duì)項(xiàng)目進(jìn)行配置。其中包括關(guān)聯(lián) servlet 和 url 的一對(duì)標(biāo)簽(由兩個(gè)標(biāo)簽共同決定),如下代碼所示:

<servlet>
    <servlet-name>helloServlet</servlet-name>
    <servlet-class>com.example.demo.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

?servlet?標(biāo)簽下有兩個(gè)子標(biāo)簽,一個(gè)定義了一個(gè)servlet的名字(在部署文件中使用的,可以當(dāng)做部署文件給servlet起的小名),一個(gè)將這個(gè)servlet的名字與一個(gè)具體的servlet關(guān)聯(lián)起來(還記得嗎,在WEB-INF文件夾下有個(gè)classes文件夾存放著編譯過的servlet,而?web.xml? 和? WEB-INF? 文件夾同級(jí))。servlet標(biāo)簽的作用就是給一個(gè)具體的servlet定義一個(gè)部署名。

接著就是?servlet-mapping?標(biāo)簽了,這個(gè)標(biāo)簽下面同樣有兩個(gè)標(biāo)簽,一個(gè)標(biāo)簽指向之前定義的 servlet 部署名,另一個(gè)標(biāo)簽指向一個(gè)url。

通過這兩個(gè)標(biāo)簽,?web.xml?將servlet與url進(jìn)行一一對(duì)應(yīng),當(dāng)瀏覽器向服務(wù)器發(fā)送請(qǐng)求的時(shí)候,服務(wù)器會(huì)通過解析url,然后在部署文件中尋找對(duì)應(yīng)的servlet,將請(qǐng)求轉(zhuǎn)發(fā)給該servlet進(jìn)行處理。

新的關(guān)聯(lián)方式

在servlet3.0版本中,可以使用@webservlet給一個(gè)servlet進(jìn)行注解,通過注解可以給這個(gè)servlet配置部署名和對(duì)應(yīng)的url。如下所示:

@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
            //這里是get方法
    }
}

使用注解方式可以快速對(duì)項(xiàng)目進(jìn)行配置,但并不利于部署人員進(jìn)行項(xiàng)目部署。

小結(jié)

以上就是url如何找到對(duì)應(yīng)servlet的全部?jī)?nèi)容,學(xué)習(xí)servlet,就到servlet微課進(jìn)行學(xué)習(xí)!


0 人點(diǎn)贊