URL映射配置
由于客户端是通过URL地址
访问web服务器
中的资源,所以Servlet程序
若想被外界访问,必须把servlet 的 类
映射到一个URL
地址上
在web.xml
文件中使用<servlet>
元素和<servlet-mapping>
元素完成url
配置。
<servlet>
<servlet>
元素用于注册Servlet 类
两个主要的子元素:<servlet-name>
和<servlet-class>
<servlet-name>
用于设置Servlet
的注册名称
<servlet-class>
用于 匹配 Servlet
的完整类名
<servlet-mapping>
<servlet-mapping>
元素用于映射 一个已注册的Servlet 类
的一个对外访问 url
路径(可以是多个)
两个子元素:<servlet-name>
和<url-pattern>
<servlet-name>
用于指定Servlet
的注册名称
<url-pattern>
用于 匹配Servlet
的对外访问url路径
如 之前的例子
<servlet>
<servlet-name>Demon1</servlet-name>
<servlet-class>com.servlet.rep.Demon1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demon1</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
同一个注册过的Servlet
可以被映射到多个URL
上
即不同<servlet-mapping>
元素的<servlet-name>
子元素的设置值可以是同一个Servlet
的注册名 ,且<url-pattern>
的值可以不相同。
例:
<servlet>
<servlet-name>Demon1</servlet-name>
<servlet-class>com.servlet.rep.Demon1</servlet-class>
</servlet>
<!--完成注册-->
<servlet-mapping>
<servlet-name>Demon1</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
<!--url 为 /index 的访问路径-->
<servlet-mapping>
<servlet-name>Demon1</servlet-name>
<url-pattern>/demon.html</url-pattern>
</servlet-mapping>
<!--url 为 /demon.html 的访问路径-->
<servlet-mapping>
<servlet-name>Demon1</servlet-name>
<url-pattern>/fir/demon.aspx</url-pattern>
</servlet-mapping>
<!--url 为 /fir/demon.aspx 的访问路径-->
通过访问其对应的url
都能访问到com.servlet.rep.Demon1
这个servlet
这个类中的内容
URL 中使用*
通配符映射
在Servlet
映射到的URL中也可以使用*
通配符
因
*
可以匹配任意的字符,所以在某些url
中使用起来很方便
但只能有以下俩种固定的格式:
1. 格式是*.扩展名
(如 : *.ggggg
该方法在新版本规则中不能适用)
2. 格式是以正斜杠/
开头并以/*
结尾 (如: /fir/*
)
例:
<servlet>
<servlet-name>Demon1</servlet-name>
<servlet-class>com.servlet.rep.Demon1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Demon1</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
此时在后面随意加载任何字符都会返回同一页面
注:
在有多个匹配规则同时满足时
遵循 哪个规则 更接近匹配的url
使用哪个
例:
访问 url
为/demon
时 ,若有 俩个匹配规则
为/*
, /demon
和 /demon/*
则选择第二个匹配规则 ,其次是第三个,最后是第一个
缺省Servlet
如果某个Servlet
的映射路径仅仅为一个正斜杠/
,那么这个
Servlet
就为当前Web应用程序的缺省Servlet
。
凡是在web.xml
文件中找不到匹配的<servlet-mapping>
元素的URL
,它们的访问请求都将交给缺省Servlet
处理
即 : 缺省Servlet
用于 处理所有 其他Servlet
都不处理的访问请求。
例如:
@WebServlet(asyncSupported = true, urlPatterns = { "/" })