Servlet中的url-pattern匹配原则

Jesus

发布于 2018.05.16 22:21 阅读 2430 评论 0

就因为不明白这是什么原理,导致我两三天找不出来错,一度以为是我Tomcat有错,然后下了各种版本的tomcat都不好使,最后才知道是因为<url-pattern>写的不对。。
 
大体运行过程就是,Tomcat运行时会监控一个端口(安装时默认是8080),客户端从这个端口发送请求后会根据url信息判断将信息交由哪个servlet处理。
 
 
举个例子,这是登录界面,action规定提交表单时向login发送数据。
 
xml中<url-pattern>会匹配login对应的是哪个servlet容器,servlet-class代表servlet的具体路径,servlet-name就是这个servlet的一个“小名”。
 
 
 
匹配成功后,servlet便拿到了登录界面发送过来的数据,开始接下来的工作,用户登录,打开主界面。
 
 
 
所以整个流程就是这样的,,打开网页,输入数据。
 
 
 
网页将数据发送给相对应的servlet容器,执行相关操作(匹配用户是否合法,打开主界面...)
 
其实url有多种匹配方式
 
本例这种就是精确匹配,表单发送给login,xml根据login直接找到相对应的serlet进行操作。
 
拓展名匹配:
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>*.jsp</url-pattern></servlet-mapping>
 
则任何扩展名为jsp(文件名和路径任意)的url请求都会匹配,比如下面的url都会被匹配
http://localhost:8080/项目名/demo.jsp
http://localhost:8080/项目名/test.jsp
 
路径匹配:
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/kata/*</url-pattern></servlet-mapping>
 
/kata后面的路径可以任意。比如下面的url都会被匹配。
http://localhost:8080/项目名/kata/demo.html
http://localhost:8080/项目名/kata/test.jsp
 
还有一种就是 /* : 随便怎么访问:不管访问的地址是什么,都由写在servlet-name中的类来处理。
 
 
l  配置优先级:  精确匹配  > 以/开头的匹配 > 以*开头的匹配