Servlet系列文章(一)
现在越来越多的框架让人眼花缭乱,但本质上还是对servlet的一系列封装和扩张,所有在深入学习其他框架的时候,我个人选择了回顾servlet的使用,中间可能会有源码级别的探寻,也有多个版本之间的对比。希望能够记录下来,沉淀成自己的高贵财富。
Servlet入口:在早期版本(通指低于3.0以前的版本)的时候的Servlet就是一个web.xml. 里面可以写些什么呢?
servlet com.test.servlet.Servlet servlet /servlet
对于:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
什么是XML Schema: Structures specifies the XML Schema definition language。来自(https://www.w3.org/TR/xmlschema-1/#no-xsi)
说明 web.xml是遵 循 http://www.w3.org/2001/XMLSchema-instance 的标签规范。
xmlns="http://java.sun.com/xml/ns/javaee" 是web.xml 的命名空间。
后面一部分是书写规范。
《!-- 主要是申明 --!》servlet com.test.servlet.Servlet
servlet就像一个Struts2里面的action ,SpingMVC 里面的Controller。
servlet /servlet
这个就是定义路由的规则。
那么问题来了,tomcat是如何解析这个文件的呢?
//这个是tomcat test文件的里面对读取web.xml 文件内容读取的测试。 public class TestSchemaValidation { @Test public void testWebapp() throws Exception { XmlErrorHandler handler = new XmlErrorHandler(); Digester digester = DigesterFactory.newDigester( true, true, new WebRuleSet(false), true); digester.setErrorHandler(handler); digester.push(new WebXml()); WebXml desc = (WebXml) digester.parse( new File("test/webapp/WEB-INF/web.xml")); Assert.assertEquals("3.1", desc.getVersion()); Assert.assertEquals(0, handler.getErrors().size()); Assert.assertEquals(0, handler.getWarnings().size()); }
感觉功力不够,不能把入口这一点完全剖析出来(状态好的时候再试试)。