• 【工作笔记】007 xml文件的dtd和xsd以及WADE框架相关


    xml:

    了解了dtd和xsd的区别:

    dtd:

    即document type defintion ,作用是较验xml文件。

    dtd包含了元素的定义规则,元素关系的定义规则,元素的属性以及实体或符号规则。

    但因为是用其他方式编写的(不是xml)所以了解就好。

    xsd:

    也就是XML Schema Defintion,用于替代DTD。

    相比于DTD主要有以下几个特点(参考自w3school)

    • 支持数据类型

    • 可扩展

    • 可保护数据通信

    xsd是用xml语言编写的,所以很好阅读:

    比如下面这个xsd文件:

    <?xml version="1.0"?>
        <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="student">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="name" type="xs:string"/>
                        <xs:element name="age" type="xs:int"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>

    这样就定义了一个student类型的xsd,在xml中引入这个xsd就可以得到编译器的提示,以及较验xml文件

    <?xml version="1.0"?>
        <!DOCTYPE student SYSTEM "a.xsd">
        <student>
            <name>老吴</name>
            <age>20</age>
        </student>

    SYSTEM表示从本地引入,对应的PUBLIC表示从网络上引入xsd文件。

    xml是一个很重要的文件,大部分配置文件都会用到它,以及作文数据交换的文件,虽然现在用json的比较多,但是作为配置文件首选的还是xml。


    WADE框架相关:

    WADE是在typestry基础上封装的一个框架,了解了它的工作原理后发现和SpringMVC很类似。

    它主要有三个方面:

    1.Page文件

    2.模板文件,即html文件(也有wsl文件,但是貌似用的不多?)

    3.与Page相关联的java类

    html文件就是用作展示,在html文件中用到了框架封装的模板,在标签中用jwcid=”@xxx”进行引用,例如显示一个值:

    <span jwcid="@Insert" value="老吴"></span>

    就会显示“老吴”。

    也可以在标签中用ognl表达式:

    <span jwcid="@Insert" value="ognl:param"></span>

    这样就会获取到param的值,但是前提是后台传来了一个 交param的值。

    另外常用的还用@Foreach等等

    还有Condition进行条件判断。

    这就很像thymeleaf模板引擎的表达式,当然这些表达式是没有thymeleaf的好用的(自我感觉)。

    然后上边说到获取后台传值的问题,那么既然是一个静态的html页面是怎么获取到值的呢?其实就是Page文件进行关联的。一个Page文件对应了一个模板和一个Java类,这个Java类需要继承BasePage类,如下:

        public abstract class TestPage  extends SimplePageComm{
            public abstract void setInfos(IDataset dataset);
    
            public void initPage(IRequestCycle cycle) throws Exception
            {
                PageData pd = getPageData();
                TestBean bean = getBean();
                bean.getAllArticles(pd);
            }
        }

    一个TestPage类,当然还有与之对应的html和Page文件,先看这个类:

    继承了SimplePageComm,为什么不是BasePage呢,因为SimpPageComm还有其他的功能,我们继承一个功能多的,可能会用到。

    然后它有一个initPage的方法在这方法中我们可以做一些页面初始化的工作,注意到这个方法有一个参数IRequestCycle cycle,它是对request和response进行了封装,把请求和响应放在了一起。

    然后注意到这里有一个抽象方法setInfos(Idataset cycle),这个方法就是传值用的。这里的info和Page文件中的属性名以及html文件中取值时id变量名保持一致。

    下面是page文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE page-specification PUBLIC
      "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
      "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
    
      <page-specification class="wxg.test.TestPage">
            <property-specification name="infos" type="com.linkage.appframework.data.IDataset"/>
      </page-specification>

    page-specification描述了这个page文件和哪个类关联,这里和wxg.test.TestPage这个类进行了关联。

    property-specification指定了这个类的属性值,要和类中的保持一致。

    type表示这个属性的java类型

    然后是html文件:

        <span jwcid="@DocType"></span>
        <html>
            <body >
                <!--<p jwcid="@Insert" value="ognl:infos"></p>-->
    
                <table>
                    <tbody>
                        <tr jwcid="@Foreach" source="ognl:infos" value="ognl:info" element="tr">
                            <td jwcid="@Insert" value="ognl:info.xxx"></td>
                            <td jwcid="@Insert" value="ognl:info.xxx"></td>
                            <td jwcid="@Insert" value="ognl:info.xxx"></td>
                        </tr>
                    </tbody>
                </table>
            </body>
        </html>

    这里用了一个循环来取到infos的值,取值方式和其他诸如el表达式呀th表达式呀都类似。

    注意到里边有个element,还不知道是干嘛的。以后在说吧。

  • 相关阅读:
    Tomcat中实现IP访问限制
    webservice ssl双向认证配置
    如何更专业的使用Chrome开发者工具
    C++中常量成员函数的含义
    写时拷贝COW(copy-on-write)
    char* 、const char*和string之间的转换
    C++模板特化与偏特化
    lamda表达式和尾置返回类型
    编译期多态和运行时多态
    静态绑定和动态绑定
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286679.html
Copyright © 2020-2023  润新知