很多小伙伴们很好奇一件事,我向浏览器发起了一个请求,浏览器是怎么根据我们的请求找到相应的 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微课进行学习!