Websharp原理
Websharp开发的过程是先设计页面模板,然后编写java代码,即模板设计好了,接下来的任务就是编程来调用它,把模板变量换成动态的内容。从模板设计一章中,我们知道了三种基本的模板元素:静态HTML、模板变量和模板块。我们也知道通过ValueNode来存储动态的内容。由于静态的HTML你不用关心,所以实际上Template DOM和ValueNode DOM之间的对应关系就是:
模板块元素 《=====》ValueNode对象
一个模板块元素通过名称和一个ValueNode对象关联起来 —— 如果一个模板块元素和一个ValueNode对象在DOM中属于同一级而且名称一样,则它们就是关联的。模板变量总是包含在模板块元素中的,可以认为它就是模板块元素的属性,Websharp编程的核心也就是把这些模板变量换成动态的内容,也就是通过关联的ValueNode来对这些模板变量赋值。
为了方便编程和避免路径的查找,我们一般都采用JSP来写代码,即如果模板叫test.htm,则代码文件就是同目录的test.jsp。当然,你也可以把代码写成Servlet;另外Websharp中也带有了一个轻量级的框架,允许你直接把代码写在Java Class中,这在后面会有介绍。
模板常用元素
在模板设计中,最常用的就是下面三个元素了
{%VarName%} 模板变量
<!-- begin block : blockname-->、<!-- end block :blockname --> 普通模板块元素
<!—begin loop :loopname-->、<!-- end loop : loopname--> 循环模板块元素
模板块元素用HTML注释<!-- -->包围起来的目的就是在用可视化页面设计工具设计页面的时候,这些模板块元素由于是"注释",不会影响到设计页面的显示效果.
其实loop元素只循环1次的情况下和block元素是一致的,就是说loop元素可以代替block元素,但为了代码的含义更清楚(一般输出还是循环输出),我们建议还是两种元素一起用.
Websharp代码结构
Websharp的代码结构大体是这样的:
<%@ page import="websharp.core.*,websharp.web.*,websharp.util.*"%>
<%
Websharp ws = new Websharp("xxxx.htm", charset, request, response);
ws.setValue(name,value);
……
ValueNode block=ws.addBlock("block");
......
ValueNode loop=ws.addLoop("loop");
....
ws.render( null);
%>
程序开始创建了一个Websharp对象,其构造函数第一个参数表示模板文件名;第二参数指模板文件的编码,建议统一采用UTF-8编码,第三、四两个参数就是Http请求和响应的两个对象了。
创建好Websharp对象后,就可以开始了赋值操作。操作模板变量、普通模板块元素、循环模板块元素相对应的方法就是setValue()、addBlock()、addLoop()了。
最后通过Websharp的render函数把结果输出到客户端。render函数包含了一个参数,表示资源文件的名称;如果没有用到资源文件,可以为null
代码举例与说明
有模板文件test.htm:
<html>
<body>
<H1> {%Var1%}</H1>
<!-- begin block: block1 -->
{%Var2%}
<!-- end block :block1-->
<!-- begin loop:number-->
{%i%}
<!-- end loop:number-->
</body>
</html>
对应的代码文件test.jsp:
<%@ page import="websharp.core.*,websharp.web.*,websharp.util.*"%>
<%
WebSharp ws = new WebSharp("test.htm", "", request, response);
ws.setValue(“Var1”,”This is Var1”);
//show block block1
if(2>1)
{
ValueNode block1=ws.addBlock("block1");
block1.setValue("Var2","This is Var2 from block1");
}
//show loop number
for(int i=1;i<=100;i++) ws.addLoop("number").setValue("i",i);
ws.render( null);
%>
1) WebSharp ws = new WebSharp()创建了WebSharp对象,并使它和一个模板文件关联起来,WebSharp对象会自动解析模板文件,并生成Template DOM。这些对我们来说是不透明的,而我们也不关心它的实现细节。
2) 为了使ValueNode DOM和Template DOM关联起来,我们必须先有ValueNOde DOM 的根节点,而Websharp对象其实就是根节点(继承于ValueNode)。它对应着Template DOM的根3) ws.setValue(“Var1”,”This is Var1”),给模板变量Var1赋值.
4)创建ValueNode block1,其对应与模板块元素block1,并给block1下面的Var2赋值。如果在程序里面不创建ValueNode block1,则模板块元素block1是隐藏的,即<!-- begin block: block1 -->和<!-- end block :block1-->之间的代码不会输出到浏览器端。所以说,模板块元素的一个作用就是控制内容在需要显示的时候才显示。
5)创建ValueNode 对应于循环块元素number,并循环100次,从1到100给其下面的模板变量“i”赋值。
6) 当所有的ValueNode都赋值后,就可以用ws.render()来输出最终的结果了。
小结
本文主要介绍了Websharp的模板定义以及如何使用,其实你要记住{%%}、<!-- begin block -->、<!-- end block -->、<!—begin loop -->、<!-- end loop -->这几项内容就可以了,而模板的使用会在开发的过程中慢慢熟悉起来的。