主要内容是关于脚本对文本的解析,都是些很实用的东西,涉及了很多先进的网络方面的技术。先把名词列出来:HTML,XML,JSP(JavaSeverPage),LSP(LuaSeverPage),Javascript,Lua,PHP,Severlet,StaticPage,DynamicPage,Ajax。
HTML:超文本标记语言,浏览器可以解析的东西。
XML:可扩展的标记语言,我理解是HTML的泛化,没有固定的标签,主要用来保存数据,和数据传输。
StaticPage:静态页面,没有交互的纯纯的html页面,一开始就写好的,主要是用来展示的。
DynamicPage:根据输入的不同动态生成的页面,一开始并不存在。
JavaScript: 可以嵌入到html中的一种脚本,浏览器在客户端可以执行。
那动态页面是怎么生成的呢?比如用户输入了用户名和密码,提交,这时候数据传到了服务器,服务器根据模板,再加上用户名和密码,生成一份临时的html页面传到客户端,这样用户就看到了一份只跟自己相关的页面。
JSP(JavaSeverPage):就实现了上面的功能,就是上面提到的模板。
html里面根据规定语法潜入Java代码,就形成了JSP,这样的页面是保存在服务器端的模板。在收到用户的request时,Severlet就会解析JSP,生成一份Java代码,然后执行Java代码得到html页面,返回给用户作为response。
LSP(LuaSeverPage):跟JSP实现了同样的功能,只不过这次HTML中嵌入的是Lua代码,服务器会解析这样的页面生成Lua脚本,执行,得到html文本。
下面是Eric给的一个Lua的例子,有些地方我改了:
<%# for day=1 to getcnt() do #%>
<td>Any one here?</td>
<%#end#%>
目标是得到想要的html文本:先通过正则表达式进行替换得到Lua脚本,然后执行Lua脚本得到html文本,这样比较简单,因为我们有现成的Lua解释器或Java解释器。
得到的Lua脚本是:
for day=1 to getcnt() do
theFile.write("<td>Any one here?</td>");
end
执行完这段Lua脚本得到的html文本是:
<td>Any one here?</td>
<td>Any one here?</td>
<td>Any one here?</td>
很爽吧,这样问题就解决了,html中可以写我们的逻辑,只是我们要自己再处理一下,得到html而已。
PHP也是那种原理。
这样的解析比较重要的两点:regular expression 和 treat code as string。最主要的就是匹配和替换吧。
利用同样的方法我们可以貌似可以解析很多比较复杂的东西。