时间:2014-01-29 来源:

JSP模板应用指南(上)

Window 工具包提供了一种典型的布局机制web切图报价,比如说在一个容器中确定部件元素的位置.在AWT 和 Swing都有布局管理器,web切图报价而在VisualWorks Smalltalk中有wrapper.本文将介绍一种JSP模板机制,psd转html它允许布局被封装和重新利用.JSP模板最小化了布局改变所造成的影响,html切图制作这里我们将鼓励大家采用封装模块化设计.

  尽管 Web开发工具的改进非常迅速,html切图但是它们仍然落后于图形用户界面(GUI)工具包(Swing 和 VisualWorks Smalltalk).例如,wap前端外包在传统的GUI工具包中提供了布局管理器web前端制作,在一个窗体或另一个窗体中,web前端制作允许布局运算被封装和重新利用.本文介绍的这种JSP模板机制承接网页制作,就象布局管理器一样,div前端切图可以封装布局web切图报价,所以它能够被重新利用而不只是复制使用.

  由于在布局的发展过程中出现了许多的变化,web切图报价而对功能的封装是非常重要的一步符合w3c标准,它能够被自如修改而做到对其他应用的影响最小.

  JSP没有提供对封装布局的直接支持,符合w3c标准所以具有统一格式的网页通常可以复制布局代码;例如网页外包接活,在图1中,jpg或psd转html显示了一个网页web前端制作,它包含了标题、页脚、工具条以及页面的主要内容.


  图1.网页布局 点击放大(22 KB)

  在图1中显示的网页布局将以HTML表格标签来执行:

  例1.包含内容:

  <html><head><title>JSPtemplates</title></head>

  <body background='graphics/background.jpg'>

  <table>

   <tr valign='top'><td><%@include file='sidebar.html'%></td>

     <td><table>

       <tr><td><%@include file='header.html'%></td></tr>

       <tr><td><%@include file='introduction.html'%></td></tr>

       <tr><td><%@include file='footer.html'%></td></tr>

       </table>

     </td>

   </tr>

  </table>

  </body></html>

  在上面的例子中,web前端制作包括了JSP include 命令承接网页制作,它允许页面内容改变——通过改变包含的文件——无须修改网页自身.不过,承接网页制作由于布局是很难被编码的web切图报价,布局改变需要对网页进行修改.如果一个网站有多个相同格式的页面,网站div+css那么一般情况下甚至简单布局的改变也涉及到整个页面的修改.

  为了减少布局改变所造成的影响符合w3c标准,我们需要一种仅仅只包含布局的机制;采用这种机制,符合w3c标准布局和内容都可以在不修改文件的情况下分开进行修改.这种机制就是JSP模板.

使用模板
  模板是一种JSP文件网页外包接活,template:put和template:insert.template:get 标签访问参数化的内容web前端制作,就象在例 2.a中的一样,div+css制作它将和图 1一样的格式来生成网页.

  例 2.a.一个模板

  <%@taglib uri='/WEB-INF/tlds/template.tld' prefix='template' %>

  <html><head><title><template:get name='title'/></title></head>

  <body background='graphics/background.jpg'>

  <table>

   <tr valign='top'><td><template:get name='sidebar'/></td>

     <td><table>

        <tr><td><template:get name='header'/></td></tr>

        <tr><td><template:get name='content'/></td></tr>

        <tr><td><template:get name='footer'/></td></tr>

       </table>

     </td>

   </tr>

  </table>

  </body></html>

  例 2.a几乎与例1完全一样承接网页制作,不过在例2.a中我们使用了template:get 取代了例1中的include 命令.让我们来分析一下template:get 如何运行.

  template:get 使用了一个专门的名字(在请求的范围内)来对一个Java Bean进行修改.Bean包含了URI (统一资源标志符,承接网页制作网页的一个组件web切图报价,它包含在template:get中).例如,web切图报价在例 2.a的模板列表中符合w3c标准,template:get 获得了一个URI——header.html——从一个名为header 的Bean中(在请求的范围内).接着在template:get 中包含了header.html.

  template:put 把Bean放到请求的范围内(此范围将在后面被template:get修改). 模板包含在template:insert中. 例 2.b中举例说明了put 和 insert 标签的用法:

  例 2.b. 从例2.a中使用模板

  <%@taglib uri='/WEB-INF/tlds/template.tld' prefix='template' %>

  <template:inserttemplate='/articleTemplate.jsp'>

   <template:put name='title' content='Templates' direct='true'/>

   <template:put name='header' content='/header.html' />

   <template:put name='sidebar' content='/sidebar.jsp' />

   <template:put name='content' content='/introduction.html'/>

   <template:put name='footer' content='/footer.html' />

  </template: insert>

  在insert 开头标签指定了被包含的模板,html切图制作在这个例子里网页外包接活,而在insert 结尾标签包含了模板.模板接着象上面所描述的那样访问Bean.

  direct 的属性能够为template:put指定;如果direct 设置为true, 和标签相关联的内容将不包含在template: get中.

  一个网站包含了多页相同格式的页面,web前端制作这样就可以使用一个模板承接网页制作,比如在例 2.a中列出了一个模板,div前端切图在许多的JSP网页(例2.b)中web切图报价,都用到了这个模板.

  使用模板的另一个好处是可以进行模块化设计.例如,web切图报价例2.b中列出的JSP 文件中包含了header.html,让我们再来看下面的例2.c.

  例2.c. header.html

  <table>

   <tr>

     <td><img src='graphics/java.jpg'/></td>

     <td><img src='graphics/templates.jpg'/></td>

   </tr>

  </table><hr>

  由于header.html 是被包含的内容,符合w3c标准所以它不必在需要显示标头的页面中复制其代码.而且网页外包接活,尽管header.html 是一个HTML文件,jpg或psd转html但是在文件中并没有使用一般的起始HTML标签(比如<html>或<body>),这些标签在header.html就可以不必再使用了.

  注意:JSP提供了两种方式来包含内容:静态方式承接网页制作,使用include命令;动态方式,承接网页制作使用include action.include命令包含了目标页面的引用源web切图报价,这和C语言中的#include和Java中的import相似.include action 包含了在运行时间内目标所产生的响应.

  与JSP include action一样,网站div+css模板包含有动态内容.所以符合w3c标准,尽管在例1和例2.b中的JSP网页在功能上是一致的,符合w3c标准但是前面包含的静态内容被后面动态的包含了.

可选内容
  所有的模板内容都是可选的网页外包接活,模板的内容可以很容易的在更多的网页中使用.例如,wap前端外包在图 2.a和图 2.B中显示了两个页面——登录和清单——它们使用的是同一个模板.两个页面中都包含一个标头、页脚和主要内容.清单页面中有一个编辑Panel (这是登陆页面所缺乏的)用来改变清单.


  图 2.a.一个登陆窗口 点击放大(24 KB)


  图 2.B.一个清单页 点击放大(42 KB)

  下面web前端制作,你会发现模板将被登录和清单页面共用:

  <%@taglib uri='template.tld' prefix='template' %>

  ……

  <table width='670'>

   <tr><td width='60'></td>

     <td><template:get name='header'/></td></tr>

   <tr><td width='60'></td>

     <td><template:get name='main-content'/></td></tr>

   <tr><td width='60'></td>

     <td><template:get name='editPanel'/></td></tr>

   <tr><td width='60'></td>

   <td><template:get name='footer'/></td></tr>

  </table>

  ……

  清单页面使用了上面的模板以及专门用于编辑Panel的内容:

  <%@taglib uri='template.tld' prefix='template' %>

  <%@taglib uri='security.tld' prefix='security' %>

  <template:inserttemplate='/template.jsp'>

   ……

   <template:put name='editPanel'

            content='/editPanelContent.jsp'/>

   ……

  </template:insert>

  与上面相对照,div+css制作登录页面没有专门用于编辑Panel的内容:

  <%@taglib uri='template.tld' prefix='template' %>

  <template:inserttemplate='/template.jsp'>

   <template:put name='title' content='Login' direct='true'/>

   <template:put name='header' content='/header.jsp'/>

   <template:put name='main-content'

           content='/login.jsp'/>

   <template:put name='footer' content='/footer.jsp'/>

  </template:insert>

  由于登录页面中没有专门用于编辑Panel的内容承接网页制作,所以它没有包括.

基于Role的内容
  Web应用程序常常会基于不同的用户生成不同的内容. 例如,承接网页制作相同的 JSP模板web切图报价,下面是得出的两个不同的页面(如图3.a和3.b.)


  图 3.a. 管理员的清单页面 点击放大(27 KB)


  图 3.b.其他用户的清单页面 点击放大(21 KB)

  在图3.a和3.b中的模板使用了template:get的 role 属性:

  <%@taglib uri='template.tld' prefix='template' %>

  ......

  <table>

   ......

   <td><template:get name='editPanel' role='curator'/></td></tr>

   ......

  </table>

  ......

  get 标签仅仅在用户的Role 与Role属性相匹配的时候才包含内容.让我们来看看标签handler是如何使用Role属性的:

  public class GettagextendstagSupport {

   private String name = null, role = null;

   ......

   public void setRole(String role) { this.role = role; }

   ......

   public int doStartTag() throws JspException {

     ......

     if(param != null) {

       if(roleIsValid()) {

        // include or print content ......

       }

     }

   ......

   }

   private boolean roleIsValid() {

     return role == null || // valid if role isn't set

       ((javax.Servlet.http.HttpServletRequest)

       pageContext.getRequest()).isUserInRole(role);

   }

  }

点击次数:6801
作者:
web前端行业资讯
Web new NewsList
谷歌发布Tacotron2:能更简单地训练AI学习演讲 ,,2017年12月21日TensorFlow漏洞爆发背后:关于AI安全我们的傻与天真 ,,2017年12月21日Android端Edge浏览器新版发布:常规性能优化和BUG修复 ,,2017年12月21日三星开发出全球最小的DRAM芯片技术领先优势扩大 ,,2017年12月21日腾讯绝艺AI下一步将学习AlphaGozero自对弈训练 ,,2017年12月21日Facebook社交VR应用Spaces扩大覆盖面:入驻HTCVive ,,2017年12月21日设计图曝光:三星双屏折叠手机原来是这样的 ,,2017年12月21日微信支付和支付宝已成为世界移动支付的"老师" ,,2017年12月21日新专利表明FaceID未来有望装备在iPad、MacBook和iMac等设备 ,,2017年12月21日首批九个建议加入EE4J的项目 ,,2017年12月21日这就是SurfacePhone?微软可折叠手机概念图曝光 ,,2017年12月21日继“Angel”开源后,腾讯又开放TDinsight机器学习平台 ,,2017年12月21日谷歌母公司研发“闪光”网络技术无需铺设线缆 ,,2017年12月21日微软投资5千万美元利用人工智能对抗气候变化 ,,2017年12月21日谷歌中国2017:面向开发者的1年AI先行的1年 ,,2017年12月21日GreenKey加入Symphony软件基金会,将开源语音软件 ,,2017年12月21日腾讯发现者揭秘:怎么应对TensorFlow的安全风险,修复有多难 ,,2017年12月21日清华新成立两大交叉研究机构探索智能与未来 ,,2017年12月21日微软将AI融入生产力工具和搜索引擎与其它巨头竞争 ,,2017年12月21日Gfycat将利用机器学习技术创建高分辨率GIF动图 ,,2017年12月21日安全软件公司Avast开源化机器码反编译器RetDec ,,2017年12月21日谷歌开源TFGAN,让训练和评估GAN变得更加简单 ,,2017年12月21日社区对模块化不感兴趣时隔三周经典版FedoraServer27发布 ,,2017年12月21日Windows10加入OpenSSH客户端 ,,2017年12月21日FirefoxQuantum发布一个月安装量1.7亿 ,,2017年12月21日吴恩达宣布创业新项目已与富士康达成战略合作 ,,2017年12月21日Scala入门系列(十二):隐式转换2017年12月20日speedment入门教程2017年12月20日SLAM入门笔记(1):特征点的匹配2017年12月20日深入浅出了解frame和bounds2017年12月20日React-Nativev0.43.1发布 ,,2017年04月06日解决solr4.x搭建ik不能智能分词 【综合】2015年03月26日PHP核心技术与最佳实践之Hash表冲突 【数据库】2015年04月17日英特尔商用处理器开发功臣维克多·普尔去世 ,,2016年06月23日OpenSSL中对称加密算法DES常用函数使用举例【Web前端】2015年01月12日java使用Thumbnailator图片处理包装类 【系统运维】2015年05月28日英文首字母全大写的js实现脚本2014年01月29日三羊献瑞【数据库】2015年04月17日动态网页脚本语言PHPv5.5.37发布 ,,2016年06月23日手机短信验证码的实现 【Web前端】2015年03月24日8.ios之view的封装【研发管理】2014年12月30日7.25【编程语言】2015年07月27日SharePoint2013迁移内容数据库最简单的配置方法【综合】2015年06月05日使用javascript为网页增加夜间模式2014年01月29日MinimumSizeSubarraySum 【编程语言】2015年08月24日20款国外生态友好的产品包装设计欣赏2014年01月28日js实现的非常棒的绿色下拉透明菜单2014年01月29日从Eclispe转AndroidStudio需要知道的快捷键(AS如何修改快捷键) 【移动开发】2015年08月29日Oracle快速插入100W数据【系统运维】2015年03月26日如何实现一个VirtualDOM及源码分析2017年09月13日C-TheCAnswer(2ndEdition)-Exercise1-8 【移动开发】2015年07月13日word里如何制作公章2014年01月28日Codeforces321CCieltheCommander树分治【编程语言】2015年07月22日asm.js使用示例代码2014年01月29日Java的多线程简单入门【编程语言】2014年11月08日跨站脚本说明2014年01月29日LAMP环境安装包,XAMPP1.8.0发布 ,,2016年06月23日第十三周项目三-立体类族共有的抽象类【编程语言】2015年06月11日LeetCode33,SearchinRotatedSortedArray-----BinarySearch 【编程语言】2015年07月13日【MongoDB】mongodumpandmongorestoreofmogodb 【数据库】2014年11月04日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)