Servlet 基本服务原理简介

128 阅读1分钟

「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」。

关于Servlet 是什么,可以参考这篇文章:Servlet 是什么

接下来会大概讲一下Servlet 原理相关的内容。

Servlet 服务流程

Servlet 是由web 服务器调用。

web 服务器在收到浏览器请求之后,会调用到Servlet 的service 方法。

service 方法中是我们具体的业务逻辑。

我们可以处理request,处理完成之后,给出响应信息到web 容器。

之后web 容器会把响应信息返回给客户端。

Mapping 问题

在上一篇文章中,我们在注册Servlet 的时候,在web.xml 文件中做了如下配置:

Screen Shot 2022-02-07 at 6.49.24 PM.png 其中标签 中的 就是上面注册的Servlet 名称; 就是映射的路径。

对于映射规则,可以有多种:

  1. 一个Servlet 可以指定一个映射路径。如上图。
  2. 一个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>
  1. 一个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>
  1. 默认请求路径。对于这种就不会访问到默认的index.jsp 了。
<!--servlet 的请求路径-->
<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>
  1. 可以指定一些后缀。注意,* 前面不能加项目映射的路径。
<!--servlet 的请求路径-->
<servlet-mapping>
  <servlet-name>hello</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

以上注意,通配符优先级最低。(精准匹配最优先)