Servlet系列文章(一)

                                                                                 Servlet系列文章(一)

    现在越来越多的框架让人眼花缭乱,但本质上还是对servlet的一系列封装和扩张,所有在深入学习其他框架的时候,我个人选择了回顾servlet的使用,中间可能会有源码级别的探寻,也有多个版本之间的对比。希望能够记录下来,沉淀成自己的高贵财富。

    Servlet入口:在早期版本(通指低于3.0以前的版本)的时候的Servlet就是一个web.xml. 里面可以写些什么呢?

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	metadata-complete="true" version="3.0">
	<servlet>
		<servlet-name>servlet</servlet-name>
		<servlet-class>com.test.servlet.Servlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>servlet</servlet-name>
		<url-pattern>/servlet</url-pattern>
	</servlet-mapping>

</web-app>

    对于:

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>
		<servlet-name>servlet</servlet-name>
		<servlet-class>com.test.servlet.Servlet</servlet-class>
	</servlet>

    servlet就像一个Struts2里面的action ,SpingMVC 里面的Controller。

        <servlet-mapping>
		<servlet-name>servlet</servlet-name>
		<url-pattern>/servlet</url-pattern>
	</servlet-mapping>

    这个就是定义路由的规则。

    那么问题来了,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());
    }

    感觉功力不够,不能把入口这一点完全剖析出来(状态好的时候再试试)。

转载于:https://my.oschina.net/QAAQ/blog/632846

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值