sicceer 2020-04-07
/* 1.具体请求路径: 如果浏览器请求的【资源文件地址】与当前Servlet中<url-pattern>的内容【完全一致】,Tomcat才会带调用当前Servlet 例子 OneServlet <url-pattern>/one.do</url-pattern> http://localhost:8080/myWeb/one.do OneServelt会被调用 http://localhost:8080/myWeb/abc/one.do OneServelt不会被调用 [注意]: 具体请求路径,必须以"/"为开头 2.前置条件请求路径: 如果浏览器请求的【资源文件地址】以当前Servelt中<url-pattern> 的内容为开头的。Tomcat才会带调用当前Servlet 例子 OneServlet <url-pattern>/abc/*</url-pattern> "*": 是一个通配符,描述是一个任意长度字符串 如果当前【资源文件地址】是以"/abc/"为开头,就表示调用的资源OneServlet http://localhost:8080/myWeb/abc/two.do OneServelt会被调用 http://localhost:8080/myWeb/abc/one.html OneServelt会被调用 [注意]: 具体请求路径,必须以"/"为开头,必须以"*"为结尾 3.后置条件请求路径:如果浏览器请求的【资源文件地址】以当前Servelt中<url-pattern> 的内容为结尾的。Tomcat才会带调用当前Servlet 例子 OneServlet <url-pattern>*.do</url-pattern> http://localhost:555/myWeb/abc/one.do OneServelt会被调用 http://localhost:555/myWeb/five.do OneServelt会被调用 http://localhost:555/myWeb/five.do?uname=mike OneServelt会被调用,因为tomcat是通过读取url来定位servlet的 请求行:[ url:http://localhost:555/myWeb/five.do methos:get ] 请求头:[ uname:mike ] [注意]: 不能以"/"为开头,必须以"*"为开头 4.通配符请求路径: 当前Servlet可以接收对当前网站所有的请求 例子 OneServlet <url-pattern>/*</url-pattern> http://localhost:555/myWeb/mm.jpg OneServlet http://localhost:555/myWeb/one.do OneServlet 5.请求路径优先级:[具体请求路径] > [前置条件]>[通配符] >[后置条件] http://localhost:555/myWeb/abc/one.do OneServlet: <url-pattern>/abc/one.do</url-pattern> TwoServlet <url-pattern>/abc/*</url-pattern> ThreeServlet <url-pattern>*.do</url-pattern> FourServlet <url-pattern>/*</url-pattern> */
关于优先级:即tomcat根据获取的url去web.xml寻找对应的Servlet来响应请求。
如果按照【具体请求路径】有匹配了,那么直接调用对应的Servlet,反之再按【前置条件】去匹配,依次类推
生命周期
/* Servlet实例对象【生命周期】 1.项目中,所有Servlet的实例对象都是由Tomcat负责创建;开发人员 没有权利创建Servlet的实例对象 2.【创建时机】: 1)【默认情况】:当第一个用户来访问这个Servlet时,Tomcat负责创建 它的实例对象 2)【人工干预】: 要求Tomcat在启动时,创建Servlet的实例对象 <servlet> <servlet-name>TwoServlet</servlet-name> <servlet-class>com.bjpowernode.controller.TwoServlet</servlet-class> <load-on-startup>890</load-on-startup> </servlet> 3.在Tomcat运行期间,一个Servlet实现类只能被创建一个实例对象 4.在Tomcat关闭时,由Tomcat负责销毁所有的Servlet实例对象 */