06-Servlet原理及Mapping映射
06-Servlet原理及Mapping映射
概述
本文主要讲述Servlet原理以及Mapping映射
Servlet原理
- 浏览器发送http请求到达web容器也即web客户端
- web容器将请求封装到request中,将响应封装到response中,将request和response传入到Servlet接口中
- 调用Servlet接口中service处理方法
- 由Servlet的实现类实现该方法
- 实现完成后将response返回给web容器
- web容器将响应返回给浏览器
Mapping 映射
Mapping映射考虑一下几种情况, 其他代码参照上一篇博客
- 常见的是一个Servlet指定一个映射路径, 请求http://localhost:8080/HelloServlet/hello即可返回"hello,servlet!"页面
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
- 一个Servlet可以指定多个映射路径, 请求http://localhost:8080/HelloServlet/hello1 或http://localhost:8080/HelloServlet/hello2 或http://localhost:8080/HelloServlet/hello3 均可返回"hello,servlet!"页面
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
- 一个Servlet可以指定通用映射路径,请求http://localhost:8080/HelloServlet/hello 及后面加任意路径,均可返回"hello,servlet!"页面
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
- 默认请求路径,请求http://localhost:8080/HelloServlet 及后面加任意路径,均可返回"hello,servlet!"页面,并且会淹没hello,world!的主页
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
- 添加后缀请求http://localhost:8080/HelloServlet/balabala.qinjiang 或将balabala替换为任意值均可例如hello/babababa
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.qinjiang</url-pattern>
</servlet-mapping>
优先级问题
指定了固有的映射路径优先级最高,如果找不到,就会走默认的请求