15年来,为全国50万+企业提供互联网数字化基础应用服务。
微网小程序
电商运营
关于我们
付款方式
荣誉资质
业务提交
代理合作
知 识
400-1100-266
9:00-24:00(工作日)
首 页
企业400电话
Hot
网站建设
商标✡知产
网络优化推广
热
AI电话机器人
呼叫中心
彩铃•短信
增值拓展业务
新
主页
>
知识库
> JSP模板应用指南(上)
JSP模板应用指南(上)
热门标签:
服务器配置
美图手机
智能手机
铁路电话系统
检查注册表项
网站文章发布
银行业务
呼叫中心市场需求
Window 工具包提供了一种典型的布局机制,比如说在一个容器中确定部件元素的位置。在AWT 和 Swing都有布局管理器,而在VisualWorks Smalltalk中有wrapper。本文将介绍一种JSP模板机制,它允许布局被封装和重新利用。JSP模板最小化了布局改变所造成的影响,这里我们将鼓励大家采用封装模块化设计。
尽管 Web开发工具的改进非常迅速,但是它们仍然落后于图形用户界面(GUI)工具包(Swing 和 VisualWorks Smalltalk)。例如,在传统的GUI工具包中提供了布局管理器,在一个窗体或另一个窗体中,允许布局运算被封装和重新利用。本文介绍的这种JSP模板机制,就象布局管理器一样,可以封装布局,所以它能够被重新利用而不只是复制使用。
由于在布局的发展过程中出现了许多的变化,而对功能的封装是非常重要的一步,它能够被自如修改而做到对其他应用的影响最小。
JSP没有提供对封装布局的直接支持,所以具有统一格式的网页通常可以复制布局代码;例如,在图1中,显示了一个网页,它包含了标题、页脚、工具条以及页面的主要内容。
图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>
在上面的例子中,包括了JSP include 命令,它允许页面内容改变——通过改变包含的文件——无须修改网页自身。不过,由于布局是很难被编码的,布局改变需要对网页进行修改。如果一个网站有多个相同格式的页面,那么一般情况下甚至简单布局的改变也涉及到整个页面的修改。
为了减少布局改变所造成的影响,我们需要一种仅仅只包含布局的机制;采用这种机制,布局和内容都可以在不修改文件的情况下分开进行修改。这种机制就是JSP模板。
使用模板
模板是一种JSP文件,它包含了参数化了的内容。这里所讨论的模板使用的是一套定制化标签来执行的:template:get,template:put和template:insert。template:get 标签访问参数化的内容,就象在例 2.a中的一样,它将和图 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 (统一资源标志符,网页的一个组件,它包含在template:get中)。例如,在例 2.a的模板列表中,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 开头标签指定了被包含的模板,在这个例子里,模板在例2.a中。每一个put 标签在请求范围内存储了一个Bean,而在insert 结尾标签包含了模板。模板接着象上面所描述的那样访问Bean。
direct 的属性能够为template:put指定;如果direct 设置为true, 和标签相关联的内容将不包含在template: get中。
一个网站包含了多页相同格式的页面,这样就可以使用一个模板,比如在例 2.a中列出了一个模板,在许多的JSP网页(例2.b)中,都用到了这个模板。
使用模板的另一个好处是可以进行模块化设计。例如,例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 是被包含的内容,所以它不必在需要显示标头的页面中复制其代码。而且,尽管header.html 是一个HTML文件,但是在文件中并没有使用一般的起始HTML标签(比如html>或body>),因为这些标签都将被模板定义。由于在模板中包含了header.html,这些标签在header.html就可以不必再使用了。
注意:JSP提供了两种方式来包含内容:静态方式,使用include命令;动态方式,使用include action。include命令包含了目标页面的引用源,这和C语言中的#include和Java中的import相似。include action 包含了在运行时间内目标所产生的响应。
与JSP include action一样,模板包含有动态内容。所以,尽管在例1和例2.b中的JSP网页在功能上是一致的,但是前面包含的静态内容被后面动态的包含了。
可选内容
所有的模板内容都是可选的,模板的内容可以很容易的在更多的网页中使用。例如,在图 2.a和图 2.B中显示了两个页面——登录和清单——它们使用的是同一个模板。两个页面中都包含一个标头、页脚和主要内容。清单页面中有一个编辑Panel (这是登陆页面所缺乏的)用来改变清单。
图 2.a.一个登陆窗口 点击放大(24 KB)
图 2.B.一个清单页 点击放大(42 KB)
下面,你会发现模板将被登录和清单页面共用:
%@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>
与上面相对照,登录页面没有专门用于编辑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模板,只有当用户为管理员的时候才出现编辑Panel,下面是得出的两个不同的页面(如图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);
}
}
标签:
乐山
红河
河南
上海
沧州
新疆
沈阳
长治
巨人网络通讯声明:本文标题《JSP模板应用指南(上)》,本文关键词 ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
相关文章
电销机器人到底如何运作的?
很多人对 电销 机器人到底如何运作存在着巨大的好奇心,那么今天,小编就带大家看一下机器人的运作流程! 电销...
10-24
电话机器人的兴起对电销行业来说是“惊喜”还
随着互联网 大数据 的普及,许多 电销 行业如雨后春笋般争先恐后地冒出来。而今电销行业的混乱,让各位涉足电销...
10-24
百应电话机器人有哪些功能?百应电话机器人好
百应 智能 电话机器人 能够协助企业进行呼入接待、 外呼 回访等服务场景,能够经过不断的培训学习,逐步完善成专...
10-24
客服外呼系统都有哪些优势?
当前呼叫中心电话系统被企业用于业务 电销 以及客户服务,然而随着企业需求不断扩大,原来传统的自建 呼叫中心...
10-24
电销机器人效果怎么样?智能电话机器人可行吗
几百数千年后,或许没人会记得卡斯帕罗夫曾是世界第一的围棋高手,但人们会记得,他败给了电脑深蓝。那虽算不...
10-24
百应智能外呼系统,贷后管理科技升级
去年底开始,接连出台政策和法规加强对消费 金融 等金融形态进行 规范 。强 监管 下,行业走向规范发展,行业竞...
10-24
百应智能外呼系统引领外呼行业新风向
电话销售: 您好,我这边是XX地产,给您推荐一下精装酒店式公寓,有兴趣了解一下吗? 客户: 具体位置在哪里啊?...
10-24
小贷企业为什么需要电销机器人?
随着信贷行业逐步进入我们的生活中,越来越多人选择借款来处理资金难题。信贷企业不断涌现,业务开展迅猛,行...
10-24
雷霆电话机器人是如何转接人工的?
当我们在拨通移动、联通或电信 运营商 的客服电话时,总会要先经过一些机械化的选择,然后成功连接人工坐席反馈...
10-24
米卡迪电话机器人效果怎么样?
外呼 电话机器人 ,之所以能智能的与客户无忧交流,因为运用了下面这么多高技术。 ASR 语音识别 米卡迪电话机器人...
10-24
灵声电话机器人效果怎么样?好用吗
外呼 电话机器人 ,之所以能智能的与客户无忧交流,因为运用了下面这么多高技术。 灵声 电话机器人 效果怎么样?...
10-24
电销机器人要想效果好,话术定制有多重要
电话机器人 是基于智能语音技术的智能营销工具。它会像真人一样主动拨打客户的电话,介绍产品并回答客户的咨询...
10-24
智能电话机器人的实现原理,使用安全吗?
随着科学技术的进步和 人工智能 的发展,越来越多的智能产品已经进入我们的工作和生活。智能手机、智能电视、智...
10-24
福州哪里有电话机器人研发公司?
人工智能 再次成为各行各业关注的焦点,自从这个概念首次提出以来,60年已经过去了。自从AlphaGo以巨大优势击败人...
10-24
电销机器人销售能力怎么样?
自从 电话机器人 一出现,在 电销 行业火爆了起来。面对电话机器人的各种优势,企业跃跃欲试,但又害怕效果不理...
10-24
推荐文章
语音智能电话机器人
谈数据库营销
laravel与thinkphp之间的区别与优缺点
centos安装xenserver xe命令行的方法
【干货】实用的网站空间购买指南
邮件发送简单例子-jsp文件
uniqueidentifier转换成varchar数据类型的sql语句
一个文义性品牌定义的提出与讨论
上一篇:
实例讲解JSP Model2体系结构(下)
下一篇:
JSP模板应用指南(下)
一起分享吧
版权所有:巨人网络(扬州)科技有限公司——拥有网站建设十年经验,具备独立网站开发能力,能够提供完善的网站设计及相关的网站制作服务! 全国统一服务热线:400-1100-266
展开
收缩
QQ咨询
在线咨询
客服小董
客服小张
客服小刘
客服小李
客服小王
招商加盟
财务查询
微信客服
电话咨询
400-1100-266