如何理解缺省servlet

缺省,也就是默认的意思。

servlet-mapping里面的url-pattern中配置为/的,对应的servlet就是缺省servlet。

在tomcat的安装目录下,有一个conf目录,里面有一个web.xml,这个web.xml可以理解为该tomcat中的所有工程的web.xml的父类,tomcat安装目录/conf/web.xml里,

ctrl+F搜索<url-pattern>/</url-pattern>,你会定位到如下:


ctrl+F搜索<servlet-name>default</servlet-name>,你会定位到如下:


这个org.apache.catalina.servlets.DefaultServlet就是tomcat的缺省servlet。如果你对这个类感兴趣,你可以去看它的源代码,这个org.apache.catalina.servlets.DefaultServlet其实就是对servlet接口的一个封装,本质它还是实现了servlet中的init(ServletConfig servletConfit)、service(ServletRequest request,ServletResponse response)、destory()这三个方法。这三个方法简单说,分别代表:servlet配置的初始化、处理请求和响应请求、销毁。

刚才我说到,你可以把web.xml中的配置理解为tomcat下所有工程的web.xml的父类,意思就是:当你的工程的web.xml中的servlet没有配置成缺省(<url-pattern>/</url-pattern>)时,当你的web.xml中的servlet对于请求的url没有找到对应的资源时,就启用tomcat配置的缺省servlet处理请求和响应请求;但如果你的工程的web.xml中的servlet配置成了缺省的,这时候假设你配置了多个servlet,其中一个为缺省,那么当其他servlet都没有找到对应的资源时,就将交给你配置的缺省servlet进行处理,不再交给tomcat的缺省servlet处理。

就相当于java中的父类和子类,假如BB继承了B,新建对象:B b = new BB(),对象b去调用方法时,当子类没有重写父类的方法,调用的将是父类的方法;而若子类重写了父类某一方法,调用的将是子类的方法。

猜你喜欢

转载自blog.csdn.net/Freya0110/article/details/80196981