案例 1:
请求资源路径:http://localhost:8080/web01/greeting?name=zs
- 浏览器通过
localhost:8080
连接服务器; - 服务器在
webapps
目录下寻找web01
目录,找到后进入web01
目录内寻找WEB-INF
目录,在进入WEB-INF
目录内寻找web.xml
文件; - 再进入
web.xml
文件中找到greeting
,从而找到对应的servlet-name
,再找到某个servlet
的子类,并创建该类的实例对象; - 再调用该对象的
service
方法,并传入request
和response
两个对象参数,service
方法会从request
对象中获取到name=zs
,然后执行service
方法中的业务逻辑语句,并把结果写入到response
中; - 而后
server
会从response
中获得结果传送给浏览器显示出来。
案例 2:
请求资源路径:http://ip:port/appname/abc.html
Servlet 容器处理请求资源路径的步骤
step1
依据 /appname
查找该应用对应的目录(比如查找 webapps
目录下面的是否存在 appname
目录)。
step2
在找到的目录下面,找到 web.xml 文件,然后解析节点 <url-pattern>
的内容,判断是否与 /abc.html
相匹配。
匹配规则:
-
精确匹配: 即要求
<url-pattern>
的内容与/abc.html
完全一致。 -
通配符匹配: 使用
*
代表任意的字符串。
比如在<url-pattern>
中使用:
/*
表示任意字符串
/abc/*
表示有/abc/
的字符串 -
后缀匹配: 不能使用
/
开头,要求*.任意的字符串
。
比如:
*.do
要求以.do
结尾
*.action
要求以.action
结尾
step3
尝试查找 /abc.html
文件,如果找到,则返回该文件,找不到,则返回 404
状态码。