很多小伙伴们很好奇一件事,我向浏览器发起了一个请求,浏览器是怎么根据我们的请求找到相应的 servlet 的?其实这一切都要归功于webapp 的部署文件 ​web.xml​,接下来就让小编来介绍一下 ​web.xml​ 是怎么把 servlet 和 url 关联起来的吧。

web.xml​又叫项目部署文件(有些教程会称呼它为DD文件,即Deployment Descriptor,部署描述的意思)。这个文件由一堆的xml标签组成,通过这些标签提供的数据来对项目进行配置。其中包括关联 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关联起来(还记得吗,在WEB-INF文件夹下有个classes文件夹存放着编译过的servlet,而​web.xml​ 和​ WEB-INF​ 文件夹同级)。servlet标签的作用就是给一个具体的servlet定义一个部署名。

接着就是​servlet-mapping​标签了,这个标签下面同样有两个标签,一个标签指向之前定义的 servlet 部署名,另一个标签指向一个url。

通过这两个标签,​web.xml​将servlet与url进行一一对应,当浏览器向服务器发送请求的时候,服务器会通过解析url,然后在部署文件中寻找对应的servlet,将请求转发给该servlet进行处理。

新的关联方式

在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微课进行学习!