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