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,还不知道是干嘛的。以后在说吧。