「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」。
关于Servlet 是什么,可以参考这篇文章:Servlet 是什么
接下来会大概讲一下Servlet 原理相关的内容。
Servlet 服务流程
Servlet 是由web 服务器调用。
web 服务器在收到浏览器请求之后,会调用到Servlet 的service 方法。
service 方法中是我们具体的业务逻辑。
我们可以处理request,处理完成之后,给出响应信息到web 容器。
之后web 容器会把响应信息返回给客户端。
Mapping 问题
在上一篇文章中,我们在注册Servlet 的时候,在web.xml 文件中做了如下配置:
其中标签 中的 就是上面注册的Servlet 名称; 就是映射的路径。
对于映射规则,可以有多种:
- 一个Servlet 可以指定一个映射路径。如上图。
- 一个Servlet 可以指定多个映射路径。即可以设置多个<servlet-mapping> 标签,其中的<url-pattern> 可以设置为多种不同的名称,但是对应同一个<servlet-name>。
<!--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 可以指定通用映射路径。即<servlet-mapping> 可以设置为“ /hello/* ”,这样接下来就在浏览器中输入各种/hello 下的子路径都可以匹配到这个Servlet 了。如/hello/sakldfjdkasj 也可以访问到对应name 的Servlet 中去。
<!--servlet 的请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
- 默认请求路径。对于这种就不会访问到默认的index.jsp 了。
<!--servlet 的请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
- 可以指定一些后缀。注意,* 前面不能加项目映射的路径。
<!--servlet 的请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
以上注意,通配符优先级最低。(精准匹配最优先)