Servlet虚拟路径映射
2015-05-07 10:18
288 查看
在web.xml文件中,一个<servlet-mapping>元素用于映射一个Servlet的对外访问路径,该路径也称为虚拟路径。例如<url-pattern>/TestServlet</url-pattern>,其中“/TestServlet”就是一个虚拟路径。创建的Servlet只有在web.xml中映射了虚拟路径,客户端才能访问。但是,在映射Servlet时,有一些细节问题需要注意,比如Servlet的多重映射,在映射路径中使用通配符等,接下来,针对这些问题进行详细解释,具体如下:
(1)Servlet的多重映射
Servlet的多重映射是指同一个Servlet可以被映射成多个虚拟路径,即客户端可以通过多个路径访问同一个Servlet,具体如下:
可以在<servlet-mapping>标签中配置多个<url-pattern>标签,
如例1-7所示:
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/AServlet</url-pattern>
<url-pattern>/BServlet</url-pattern>
</servlet-mapping>
如例1-7所示,AServlet配置了多个url-pattern,在浏览器端地址栏通过http://localhost:8080/Example13/AServlet和http://localhost:8080/Example13/BServlet都能够过访问到AServlet。但是这种配置方式,现在开发基本不用了,大家了解即可。
(2)映射路径中使用通配符有时候,我们希望某个目录下的所有路径都可以访问同一个Servlet,这时,可以在Servlet映射的路径中使用通配符”*”。如下所示:
1)<url-pattern>/servlet/*</url-pattern>
这种属于路径匹配,通配符”*”为后缀,/servlet/a、/servlet/b都与/servlet/*匹配。
2)<url-pattern>*.do</url-pattern>
这种属于扩展名匹配,通配符”*”为前缀,/abc/a.do、/a.do都与*.do匹配。
3)<url-pattern>/*</url-pattern>
这种属于完全匹配,通配符”*”为后缀,匹配所有路径。需要注意的是:
通配符要么在开头,要么在结尾,不能在中间,<url-pattern>/*.do</url-pattern>就
是错误的使用。
如果不使用通配符,那么<url-pattern>的内容必须以”/”开头,
<url-pattern>abc</url-pattern>就是错误的。
三种通配符匹配方式的优先级是匹配的范围越大优先级越低。如1-8所示:
例1-8匹配优先级
<servlet>
<servlet-name>hello1</servlet-name>
<servlet-class>cn.itcast.servlet.Hello1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello1</servlet-name>
<url-pattern>/servlet/hello1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>hello2</servlet-name>
<servlet-class>cn.itcast.servlet.Hello2Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello2</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
根据例1-8的配置,当在浏览器端访问http://localhost:8080/Example13/servlet/hello1时,hello1和hello2都能够匹配,但是由于hello1匹配的更加准确,范围更小,所以访问的是hello1这个Servlet。
(1)Servlet的多重映射
Servlet的多重映射是指同一个Servlet可以被映射成多个虚拟路径,即客户端可以通过多个路径访问同一个Servlet,具体如下:
可以在<servlet-mapping>标签中配置多个<url-pattern>标签,
如例1-7所示:
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/AServlet</url-pattern>
<url-pattern>/BServlet</url-pattern>
</servlet-mapping>
如例1-7所示,AServlet配置了多个url-pattern,在浏览器端地址栏通过http://localhost:8080/Example13/AServlet和http://localhost:8080/Example13/BServlet都能够过访问到AServlet。但是这种配置方式,现在开发基本不用了,大家了解即可。
(2)映射路径中使用通配符有时候,我们希望某个目录下的所有路径都可以访问同一个Servlet,这时,可以在Servlet映射的路径中使用通配符”*”。如下所示:
1)<url-pattern>/servlet/*</url-pattern>
这种属于路径匹配,通配符”*”为后缀,/servlet/a、/servlet/b都与/servlet/*匹配。
2)<url-pattern>*.do</url-pattern>
这种属于扩展名匹配,通配符”*”为前缀,/abc/a.do、/a.do都与*.do匹配。
3)<url-pattern>/*</url-pattern>
这种属于完全匹配,通配符”*”为后缀,匹配所有路径。需要注意的是:
通配符要么在开头,要么在结尾,不能在中间,<url-pattern>/*.do</url-pattern>就
是错误的使用。
如果不使用通配符,那么<url-pattern>的内容必须以”/”开头,
<url-pattern>abc</url-pattern>就是错误的。
三种通配符匹配方式的优先级是匹配的范围越大优先级越低。如1-8所示:
例1-8匹配优先级
<servlet>
<servlet-name>hello1</servlet-name>
<servlet-class>cn.itcast.servlet.Hello1Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello1</servlet-name>
<url-pattern>/servlet/hello1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>hello2</servlet-name>
<servlet-class>cn.itcast.servlet.Hello2Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello2</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
根据例1-8的配置,当在浏览器端访问http://localhost:8080/Example13/servlet/hello1时,hello1和hello2都能够匹配,但是由于hello1匹配的更加准确,范围更小,所以访问的是hello1这个Servlet。
相关文章推荐
- Servlet虚拟路径映射
- 从request获取各种路径总结 request.getRealPath("url"); // 虚拟目录映射为实际目录 request.getRealPat
- apache增加虚拟路径和映射中文路径
- servlet的映射路径
- Servlet中web.xml映射问题之访问路径报错-404
- JavaWeb学习之什么是Servlet、如何使用servlet、为什么这样使用、servlet的虚拟路径、关于缺省Servlet(2)
- servlet路径映射规范(备忘)
- 从request获取各种路径总结 request.getRealPath("url"); // 虚拟目录映射为实际目录 request.getRealPat
- 第10天(就业班) servlet的映射路径、生命周期、自动加载+init方法+线程并发安全、servletconfig对象+servletcontext对象入门、servletcontext对象的使
- SpringBoot设置虚拟路径映射绝对路径
- 学习JavaWeb之Servlet的路径映射问题
- Tomcat配置虚拟路径,映射硬盘文件夹到服务器下
- 分析器错误信息: 虚拟路径“/Project/UcCtrl/ucButton.ascx”映射到另一个应用程序,这是不允许的。
- Server-U设置虚拟路径映射网络共享文件夹
- tomcat 重启后图片等文件消失解决方案虚拟路径映射
- servlet路径映射及servlet线程安全
- Tomcat 配置虚拟路径映射
- javaweb servlet路径映射;JSP路径映射; web默认访问页配置
- Servlet映射路径中的通配符
- "虚拟路径"..."映射到另一个应用程序,这是不允许的!