很多小伙伴們很好奇一件事,我向瀏覽器發(fā)起了一個請求,瀏覽器是怎么根據(jù)我們的請求找到相應(yīng)的 servlet 的?其實這一切都要歸功于webapp 的部署文件 ?web.xml
?,接下來就讓小編來介紹一下 ?web.xml
? 是怎么把 servlet 和 url 關(guān)聯(lián)起來的吧。
?web.xml
?又叫項目部署文件(有些教程會稱呼它為DD文件,即Deployment Descriptor,部署描述的意思)。這個文件由一堆的xml標(biāo)簽組成,通過這些標(biāo)簽提供的數(shù)據(jù)來對項目進(jìn)行配置。其中包括關(guān)聯(lián) servlet 和 url 的一對標(biāo)簽(由兩個標(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)簽下有兩個子標(biāo)簽,一個定義了一個servlet的名字(在部署文件中使用的,可以當(dāng)做部署文件給servlet起的小名),一個將這個servlet的名字與一個具體的servlet關(guān)聯(lián)起來(還記得嗎,在WEB-INF文件夾下有個classes文件夾存放著編譯過的servlet,而?web.xml
? 和? WEB-INF
? 文件夾同級)。servlet標(biāo)簽的作用就是給一個具體的servlet定義一個部署名。
接著就是?servlet-mapping
?標(biāo)簽了,這個標(biāo)簽下面同樣有兩個標(biāo)簽,一個標(biāo)簽指向之前定義的 servlet 部署名,另一個標(biāo)簽指向一個url。
通過這兩個標(biāo)簽,?web.xml
?將servlet與url進(jìn)行一一對應(yīng),當(dāng)瀏覽器向服務(wù)器發(fā)送請求的時候,服務(wù)器會通過解析url,然后在部署文件中尋找對應(yīng)的servlet,將請求轉(zhuǎn)發(fā)給該servlet進(jìn)行處理。
新的關(guān)聯(lián)方式
在servlet3.0版本中,可以使用@webservlet給一個servlet進(jìn)行注解,通過注解可以給這個servlet配置部署名和對應(yīng)的url。如下所示:
@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
//這里是get方法
}
}
使用注解方式可以快速對項目進(jìn)行配置,但并不利于部署人員進(jìn)行項目部署。
小結(jié)
以上就是url如何找到對應(yīng)servlet的全部內(nèi)容,學(xué)習(xí)servlet,就到servlet微課進(jìn)行學(xué)習(xí)!