ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:24.43KB ,
资源ID:18262361      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18262361.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Template和JSP技术Word文档下载推荐.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Template和JSP技术Word文档下载推荐.docx

1、至于页面所需数据传入一个POJO就行而不是request对象。模板技术最先开始于PHP的世界,出现了PHPLIB Template和FastTemplate这两位英雄。不久模板技术就被引入到java web开发世界里。目前比较流行的模板技术有:XSTL,Velocity,JDynamiTe,Tapestry等。另外因为JSP技术毕竟是目前标准,相当的系统还是利用JSP来完成页面显示逻辑部分,在Sun公司的JSTL外,各个第三方组织也纷纷推出了自己的Taglib,一个代表是struts tablib。二、 模板技术分析:模板技术从本质上来讲,它是一个占位符动态替换技术。一个完整的模板技术需要四个

2、元素:0. 模板语言,1. 包含模板语言的模板文件,2. 拥有动态数据的数据对象,3. 模板引擎。以下就具体讨论这四个元素。(在讨论过程中,我只列举了几个不同特点技术,其它技术或有雷同就不重复了) 模板语言:模板语言包括:变量标识和表达式语句。根据表达式的控制力不同,可以分为强控制力模板语言和弱控制力模板语言。而根据模板语言与HTML的兼容性不同,又可以分为兼容性模板语言和非兼容性模板语言。模板语言要处理三个要点:1. 标量标记。把变量标识插入html的方法很多。其中一种是使用类似html的标签;另一种是使用特殊标识,如Velocity或者JDynamiTe;第三种是扩展html标签,如tap

3、estry。采用何种方式有着很多考虑,一个比较常见的考虑是“所见即所得”的要求。2. 条件控制。这是一个很棘手的问题。一个简单的例子是某物流陪送系统中,物品数低于一定值的要高亮显示。不过对于一个具体复杂显示逻辑的情况,条件控制似乎不可避免。当你把类似于IF condition=”$count span class=”highlight”count /then/IF引入,就象我们当初在ASP和PHP中所做得一样,我们将不得不再一次面对scriptlet嵌入网页所遇到的问题。我相信你和我一样并不认为这是一个好得的编写方式。实际上并非所有的模板技术都使用条件控制,很多已有的应用如PHP上中的以及我曾

4、见过一个基于ASP.NET的应用,当然还有Java的JDynamiTe。这样网页上没有任何逻辑,不过这样做的代价是把高亮显示的选择控制移交给编程代码。你必需做个选择。也许你也象我一样既不想在网页中使用条件控制,也不想在代码中写html标记,但是这个显示逻辑是无可逃避的(如果你不想被你的老板抄鱿鱼的话),一个可行的方法是用CSS,在编程代码中决定采用哪个css样式。特别是CSS2技术,其selector机制,可以根据html类型甚至是element的attributes来apply不同的样式。3. 迭代(循环)。在网页上显示一个数据表单是一个很基本的要求,使用集合标签将不可避免,不过幸运的是,它

5、通常很简单,而且够用。特别值得一提的是PHP的模板技术和JDynamiTe技术利用html的注释标签很简单的实现了它,又保持了“所见既所得”的特性。下面是一些技术的比较:Velocity变量定义:用$标志表达式语句:以#开始强控制语言:变量赋值:#set $this = Velocity 外部引用:#include ( $1 ) 条件控制:#if . #end非兼容语言JDynamiTe用包装写在注释格式(!- )中弱控制语言兼容语言XSLTxml标签表达式:xsl标签外部引用:import,includeif, choosewhenotherwiseTapestry采用component的形

6、式开发。变量定义(组件定义):在html标签中加上jwcidognl规范 模板文件:模板文件指包含了模板语言的文本文件。模板文件由于其模板语言的兼容性导致不同结果。与HTML兼容性的模板文件只是一个资源文件,其具有良好的复用性和维护性。例如JDynamiTe的模板文件不但可以在不同的项目中复用,甚至可以和PHP程序的模板文件互用。而如velocity的非兼容模板文件,由于其事实上是一个脚本程序,复用性和可维护性大大降低。 拥有动态数据的数据对象:模板文件包含的是静态内容,那么其所需的动态数据就需要另外提供。根据提供数据方式的不同可以分为3种: Map:利用key/value来定位。这个是最常见

7、的技术。如velocity的VelocityContext就是包含了map对象。Example.vm:Hello from $name in the $project project.Example.java:VelocityContext context = new VelocityContext();context.put(name, );projectJakarta DOM:直接操作DOM数据对象,如XSLT利用XPath技术。 POJO:直接利用反射取得DTO对象,利用JavaBean机制取得数据。如Tapestry。4. 模板引擎:模板引擎的工作分为三步:1. 取得模板文件并确认其中

8、的模板语言符合规范。比如velocity,确定#if有对应得#end等。Xmlxslt的模型中,xml文件标签是否完整等。在完成这些工作后,模板引擎通常会把模板文件解析成一颗节点树(包含模板文件的静态内容节点和模板引擎所定义的特殊节点)。2. 取得数据对象。 该数据对象一般通过程序传递引用实现。现有的大量框架在程序底层完成,处理方式也各自不同,有两种技术分别为推技术和拉技术。推技术:controller调用set方法把动态数据注入,模板引擎通过get方法获得,典型代表:Struts;拉技术:模板引擎根据配置信息,找到与view对应的model,调用model的get方法取得数据,典型代表:Ta

9、pestry。3. 合并模板文件(静态内容)和数据对象(动态内容),并生成最终页面。 合并的机制一般如下,模板引擎遍历这颗节点树的每一个节点,并render该节点,遇到静态内容节点按正常输入,遇到特殊节点就从数据对象中去得对应值,并执行其表达式语句(如果有的话)。以下详细说明:Template template = Velocity.getTemplate(test.wmContext context = new VelocityContext();foobarcustomer, new Customer();template.merge(context, writer);当调用Velocit

10、y.getTemplate 方法时,将调用ResourceManger的对应方法。ResourceManger先查看该模板文件是否在cache中,如果没有就去获取,生成resource对象并调用process()方法,确定该模板是否有效,如果有效,则在内存中生成一个Node树。当调用template.merge()时,遍历这颗Node树,并调用每个Node的render方法。对于模板中的变量和对象Node,还将调用execute()方法,从context中取得value。 注:ResourceManger在runtimeresource包下,Node在runtimeparsernode包下Ta

11、pestry比较麻烦,先介绍一下http请求的处理过程。当httprequest请求到达时。该请求被ApplicationServlet捕获,随后ApplicationServlet通过getEngine取到对应的Engine,通过该engine的getService拿到对应的service,调用其service方法执行http请求。每个service通过RequestCycle对象的getPage方法取得Page对象,并将其设置为该Cycle对象的active Page。之后service调用renderResponse方法执行输出。renderResponse调用page的getRespo

12、nseWriter(output)取得writer对象,并把它传给cycle.renderPage(writer)方法,该方法调用page的renderPage方法。Page执行renderPage时,首先判断是否有listener的请求,如果有则处理listener请求;然后调用BaseComponentTemplateLoader的process方法把模板文件载入并形成一个component节点树,依次执行节点的renderComponent方法。每个component对象将通过ongl的机制取得对象属性。并把该值写入输入流。例如:insert componentprotected voi

13、d renderComponent(IMarkupWriter writer, IRequestCycle cycle) if (cycle.isRewinding() return; Object value = getValue(); if (value = null) String insert = null; Format format = getFormat(); if (format = null) insert = value.toString(); else try insert = format.format(value); catch (Exception ex) thro

14、w new ApplicationRuntimeException(Tapestry.format(Insert.unable-to-format,value),this, getFormatBinding().getLocation(), ex); String styleClass = getStyleClass(); if (styleClass != null) writer.begin(span writer.attribute(class, styleClass); renderInformalParameters(writer, cycle); if (getRaw() writ

15、er.printRaw(insert); else writer.print(insert);= null) writer.end(); / getValue为取得insert的value属性。三、JSP技术分析 1. JSP技术: JSP,一个伪装后的servlet。web server会对任何一个jsp都生成一个对应jsp类,打开这个类,就会发现,jsp提供的是一个代码生成机制,把jsp文件中所有的scriptlet原封不动的copy的到生成的jsp类中,同时调用println把所有的html标签输出。Test.jsp:htmlheadtitlejsp test/headbodytable

16、 width=226 border=0 cellspacing= cellpadding= tdfont face=Arial size=2 color=#000066b class=headlineboldThe jsp test file/tr/td/font /table/htmlTest_jsp.java:package org.apache.jsp;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;import org.apache.jasper.runtime.*;public

17、 class Test _jsp extends HttpJspBase private static java.util.Vector _jspx_includes; public java.util.List getIncludes() return _jspx_includes; public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException JspFactory _jspxFactory = nul

18、l; javax.servlet.jsp.PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; try _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType(text/html;

19、charset=ISO-8859-1 pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write(rn rntable

20、 width=226 border=0 cellspacing= cellpadding=rn font face=Arial size=2 color=#000066 rntb class=headlineboldThe jsp test filerntrnt catch (Throwable t) out = _jspx_out; if (out != null & out.getBufferSize() != 0) out.clearBuffer(); if (pageContext != null) pageContext.handlePageException(t); finally

21、 if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext); 2. Taglib技术:Taglib作为jsp之上的辅助技术,其工作本质依托与jsp技术,也是自定义标签翻译成java代码,不过这次和jsp略有不同,它还要经过几个过程。先来看一下,实现一个tag的2个要点:1. 提供属性的set方法,此后这个属性就可以在jsp页面设置。以jstl标签为例 c:out value=/,这个value就是jsp数据到tag之间的入口。所以tag里面必须有一个setValue方法,具体的属性可以不叫value。例如set

22、Value(String data)this.data = data;。这个“value”的名称是在tld里定义的。取什么名字都可以,只需tag里提供相应的set方法即可。2. 处理 doStartTag 或 doEndTag 。这两个方法是 TagSupport提供的。还是以c:/为例,当jsp解析这个标签的时候,在“”时触发 doEndTag 事件。通常在 doStartTag 里进行逻辑操作,在 doEndTag 里控制输出。 在处理tag的时候: 0. 从tagPool中取得对应tag。 为该tag设置页面上下文。 为该tag设置其父tag,如果没有就为null。 调用setter方法传入标签属性值tag,如果该标签没有属性,此步跳过。 调用doStartTag方法,取的返回值。5. 如果该标签有body,根据doStartTag返回值确定是否pop该标签内容。如果要pop其body,则:setBodyContent(),在之后,doInitBody()。如果该标签没有body,此步跳过。6. 调用doEndTag()以确定是否跳过页面剩下部分。7. 最后把tag类返还给

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1