首先须要明确几容易混淆的规则:html
<url-pattern>中配置的项必须与url彻底精确匹配。web
<servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/user/users.html</url-pattern> <url-pattern>/index.html</url-pattern> <url-pattern>/user/addUser.action</url-pattern> </servlet-mapping>
当在浏览器中输入以下几种url时,都会被匹配到该servlet
http://localhost:8080/appDemo/user/users.html
http://localhost:8080/appDemo/index.html
http://localhost:8080/appDemo/user/addUser.action正则表达式
注意:apache
http://localhost:8080/appDemo/user/addUser/ 是非法的url,不会被看成http://localhost:8080/appDemo/user/addUser识别浏览器
另外上述url后面能够跟任意的查询条件,都会被匹配,如app
http://localhost:8080/appDemo/user/addUser?username=Tom&age=23 会被匹配到MyServlet。jsp
以“/”字符开头,并以“/*”结尾的字符串用于路径匹配url
<servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/user/*</url-pattern> </servlet-mapping>
路径以/user/开始,后面的路径能够任意。好比下面的url都会被匹配。
http://localhost:8080/appDemo/user/users.html
http://localhost:8080/appDemo/user/addUser.action
http://localhost:8080/appDemo/user/updateUser.actionlspa
以“*.”开头的字符串被用于扩展名匹配debug
<servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.action</url-pattern> </servlet-mapping>
则任何扩展名为jsp或action的url请求都会匹配,好比下面的url都会被匹配
http://localhost:8080/appDemo/user/users.jsp
http://localhost:8080/appDemo/toHome.action
<servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
匹配方法只有三种,要么是路径匹配(以“/”字符开头,并以“/*”结尾),要么是扩展名匹配(以“*.”开头),要么是精确匹配,三种匹配方法不能进行组合,不要想固然使用通配符或正则规则。
如<url-pattern>/user/*.action</url-pattern>是非法的
另外注意:<url-pattern>/aa/*/bb</url-pattern>是精确匹配,合法,这里的*不是通配的含义
Tomcat在%CATALINA_HOME%\conf\web.xml文件中配置了默认的Servlet,配置代码以下
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- The mappings for the JSP servlet --> <servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> <url-pattern>*.jspx</url-pattern> </servlet-mapping>
映射的URL | 对应的Servlet |
/hello | servlet1 |
/bbs/admin/* | servlet2 |
/bbs/* | servlet3 |
*.jsp | servlet4 |
/ | servlet5 |
实际请求映射的结果
去掉上下文路径的剩余路径 |
处理请求的Servlet |
/hello |
servlet1 |
/bbs/admin/login |
servlet2 |
/bbs/admin/index.jsp |
servlet2 |
/bbs/display |
servlet3 |
/bbs/index.jsp |
servlet3 |
/bbs |
servlet3 |
/index.jsp |
servler4 |
/hello/index.jsp |
servlet4 |
/hello/index.html |
servlet5 |
/news |
servlet5 |