JSP自定义标签-标签属性

JSP自定义标签-标签属性对自定义标签添加一些属性,可以使我们的标签功能更加灵活和复用。

例如前一篇博客使用简单标签来对标签体内容执行一定的次数,就无法在标签上规定要执行的次数,必须在标签处理器类中修改,很不方便,如果使用带属性的标签就能很好的解决这个问题。

要想使简单标签具有属性,通常需要满足以下两个步骤:①在标签处理器类中定义属性,同时为每个属性生成setter方法;②在TLD文件中对于的<tag>标签下添加属性的<attribute>标签,同时<attribute>标签下定义其从标签,其中<name>从标签是必须要有的。

<attribute>标签所拥有的从标签如下:name标签:用于指定标签中属性的名称。

required标签:指定该属性是否必须。

rtexprvalue标签:指定该属性是否支持运行时表达式,如JSP表达式(<%=value %>)和EL表达式( ${value} )。

如果我们设定为“false”的话,那么该属性只能支持字符串。

例1:使用简单标签来控制标签体内容执行次数(带属性标签方式)编写标签处理器类:1package com.bjpowernode.simpletag;2public class LoopTagBody extends SimpleTagSupport {3private int count; //定义一个属性,用来指定循环次数45public void setCount(int count) { //为该属性设置setter方法6this.count = count;7}8@Override9public void doTag() throws JspException, IOException {10JspFragment fragment = this.getJspBody();11for(int i=0;i<this.count;i++) { //使用属性就可以指定循环次数12fragment.invoke(null);13}14}15 }在TLD文件中定义和描述标签处理器类,同时指定标签所在的uri:1 <?xml version="1.0" encoding="UTF-8" ?>2 <taglib xmlns="/xml/ns/j2ee"3xmlns:xsi="/2001/XMLSchema-instance"4xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"5version="2.0">6<description>A tag library exercising SimpleTag handlers.</description> 7<tlib-version>1.0</tlib-version>8<short-name>SimpleTagLibrary</short-name>9 <uri>simpletag</uri>1011<tag>12<name>loopbody</name>13<tag-class>com.bjpowernode.simpletag.LoopTagBody</tag-class> 14<body-content>scriptless</body-content>15<attribute>16<name>count</name>17<required>true</required>18<rtexprvalue>true</rtexprvalue>19</attribute>20</tag>21 </taglib>在JSP页面的开头导入taglib指令:<%@ taglib uri="simpletag" prefix="simple" %>最后就能在JSP页面的主体中使用刚才定义好的带属性的简单标签了,使用“count”属性就能指定标签体循环的次数:1<simple:loopbody count="5">2神乐!<br>3</simple:loopbody>在浏览器中观察:通过上面的例子我们也可以看到,虽然“count”属性在标签处理器LoopTagBody类中的类型为int整型,但是在标签上传入的是字符串类型,这是因为JSP容器支持将标签的属性类型(字符串)转换为八大基本数据类型。

如果在标签处理器类中定义一个非八大基本数据类型的属性,那么上面的以上面的方式必定要报错,因为JSP容器无法将字符串转换为其它类型。

除非在标签属性中使用其它类型:例2:1package com.bjpowernode.simpletag;2public class DateAttributeTag extends SimpleTagSupport {3private Date date;45public void setDate(Date date) {6this.date = date;7}8@Override9public void doTag() throws JspException, IOException {10this.getJspContext().getOut().write(date.toString());11}12 }在TLD文件中描述(这里省略首尾,详细内容请看例1):1<tag>2<name>showtime</name><tag-class>com.bjpowernode.simpletag.DateAttributeTag</tag-class>3<body-content>empty</body-content>4<attribute>5<name>date</name>6<required>true</required>7<rtexprvalue>true</rtexprvalue>8</attribute>9</tag>注:这里<rtexprvalue>标签是必须要的。

在JSP页面中导入taglib指令(此处略)后,在JSP页面的主体中使用刚才定义的简单标签:<simple:showtime date="<%=new Date() %>"/>在浏览器中观察:因为在JSP页面属性上若以字符串,则因为在标签处理器类并非八大基本数据类型,因此只能使用JSP表达式或EL表达式将对象传入,因此必须在TLD文件中将<rtexprvalue>标签设置为“true”。

简单标签的应用,包括无属性的和带属性的标签如何使用都已经学习完毕,内容就这么多,剩下的就可以根据所学的进行开发了。

例3:使用简单标签来防盗链如果某个JSP页面需要防止被别的网站盗链,可以在该JSP页面的最开始部分使用一个简单标签,添加一些属性如指定从哪过来的网站才可以浏览本页面内容,指定如果是非指定网址过来的链接应该先让请求跳到哪里去。

编写标签处理器类:1package com.bjpowernode.simpletag;2public class RefererTag extends SimpleTagSupport {3private String site; //指定允许来访请求的网址4private String location; //若非指定来访请求的网址应该先跳转到哪里去56public void setSite(String site) {7this.site = site;8}9public void setLocation(String location) {10this.location = location;11}12@Override13public void doTag() throws JspException, IOException {14PageContext pageContext = (PageContext) this.getJspContext();15HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();16HttpServletResponse response = (HttpServletResponse) pageContext.getResponse(); 1718String requestUrl = request.getHeader("referer");1920if(requestUrl==null || !requestUrl.startsWith(site)) {21response.sendRedirect(request.getContextPath()+this.location);22throw new SkipPageException();23}24}25 }在TLD文件中描述(这里省略首尾,详细内容请看例1):1<tag>2<name>referer</name>3<tag-class>com.bjpowernode.simpletag.RefererTag</tag-class>4<body-content>empty</body-content>5<attribute>6<name>site</name>7<required>true</required>8<rtexprvalue>true</rtexprvalue>9</attribute>10<attribute>11<name>location</name>12<required>true</required>13<rtexprvalue>true</rtexprvalue>14</attribute>15</tag>在JSP页面中导入taglib指令(此处略)后,在JSP页面的主体中使用刚才定义的简单标签:1<simple:referer site="" location="/index.jsp"/>23<!DOCTYPE HTML>4<html>5<head>6<title>My JSP 'simpletagdemo.jsp' starting page</title>7</head>8。

合集下载

JSP期末考试复习资料

JSP期末考试复习资料

1-2 JSP中可重复使用的组件有哪些?JavaBean/JSP标准标签/自定义标签1—3 什么是JSP的预编译特征?答:JSP页面在被服务器执行前,都是已经被编译好的,并且通常只进行一次编译,即在JSP 页面被第一次请求时进行编译,在后续的请求中如果JSP页面没有被修改过,服务器只需要直接调用这些已经被编译好的代码,这大大提高了访问速度。

1—8 开发JSP程序可采用哪几种开发模式?分别介绍他们的优缺点。

答:第一种:单纯的JSP页面编程优点是容易实现;缺点是程序结构混乱,维护不便.第二种:JSP+JavaBean编程优点是结构比较清晰;缺点是将流程控制放到JSP中,JSP不能单纯作为显示功能第三种:JSP+JavaBean+Servlet编程优点是层次关系明显、组件分工明确;缺点是对开发人员能力要求较高,不适合JSP初学者.2—2 什么是成员变量和局部变量?他们的区别是什么答:成员变量是在类体中变量定义部分所声明的变量;局部变量是在方法体重声明的变量和方法的参数两者的区别在于有效范围不同,成员变量在整个类内都有效,而局部变量只在定义他的成员方法内才有效。

2-3 如何创建、使用并销毁对象?答:创建对象的方法:类名对象名;对象名 = new 构造方法名([参数列表]);或者:类名对象名 = new 构造方法名([参数列表]);使用对象的方法:可以通过对象来引用其成员变量,并改变成员变量的值,而且还可以通过对象来调用其成员方法。

通过使用运算符“.”实现对成员变量的访问和成员方法的调用。

销毁对象的操作由Java提供的垃圾回收机制自动完成 .不需要手工完成销毁对象操作。

或者调用对象的finalize()方法。

3-1 JSP页面由哪些元素组成?〈!—— JSP中的指令标识 -->〈%@ page language=”java" contentType=”text/html;charset=gb2312”%〉<%@ page import="java。

自定义标签(Custom Tag)

自定义标签(Custom Tag)

一、概述JSP中有一块重要的技术:自定义标签(Custom Tag),最近这几天在学习Struts的时候发现Struts中使用了很多自定义标签,如html、bean等。

所以我就做了个简单的试验,学习一下这种技术。

首先介绍一下这种技术吧!1.优点:取代了JSP中的Java程序,并且可以重复使用,方便不熟悉Java编程的网页设计人员。

2.开发流程:(1)编写JSP,在JSP中使用自定义标签。

(2)在web.xml中指定JSP中使用的标签的.tld(标签库描述文件)文件的位置。

(3) .tld文件中指定标签使用的类。

3. 自定义标签的分类:(1)简单标签:如< mytag:helloworld/>(2)带属性标签:如<imytag:checkinput dbname = “<myBean.getDBName()>”/>(3)带标签体的标签:在自定义标签的起始和结束标签之间的部分为标签体(Body)。

Body的内容可以是JSP中的标准标签,也可以是HTML、脚本语言或其他的自定义标签。

<mytag:che ckinput dbname = “<myBean.getDBName()>”><mytag:log message=”Table Name”><mytag:checkinput />(4)可以被Script使用的标签:定义了id和type属性的标签可以被标签后面的Scriptlet使用。

<mytag:connection id = “oraDB” type = “DataSource” name = “Oracle”><%oraDB.getConnection(); %>4.接口及其他实际上,自定义标签的处理类实现了Tag Handler对象。

JSP技术在javax.servlet.jsp.tagext中提供了多个Tag Handler 接口,JSP1.2中定义了Tag、BodyTag、IterationTag接口,在JSP2.0中新增了SimpleTag接口。

jsp 6个常用标签

jsp 6个常用标签

一、Include指令<jsp:include>标签表示包含一个静态的或者动态的文件。

语法:<jsp:include page="path" flush="true" />or<jsp:include page="path" flush="true"><jsp:param name="paramName" value="paramValue" /></jsp:include>注:1、page="path" 为相对路径,或者代表相对路径的表达式。

2、flush="true" 必须使用flush为true,它默认值是false。

3、<jsp:param>子句能让你传递一个或多个参数给动态文件,也可在一个页面中使用多个<jsp:param> 来传递多个参数给动态文件。

二、Forward指令<jsp:forward>标签表示重定向一个静态html/jsp的文件,或者是一个程序段。

语法:<jsp:forward page="path"} />or<jsp:forward page="path"} ><jsp:param name="paramName" value="paramValue" />……</jsp:forward>注:1、page="path" 为一个表达式,或者一个字符串。

2、<jsp:param> name 指定参数名,value指定参数值。

参数被发送到一个动态文件,参数可以是一个或多个值,而这个文件却必须是动态文件。

JSP自定义标签的实现

JSP自定义标签的实现
1 4
J S P自定义标签 的实现
J S P自定义标签的实现
蒋波 任 继念 崔蔚
( 中国工程物理研究院工学院,四川绵阳,6 2 1 9 0 0 )


文章介绍了实现 自定义标签 需要 的接 口和基类 ,也通过具体例子说明 自定义标签的实现方法和在
J S P页中的应用 。
关键词 T a g S u p p o r t 类;B o d y T a g S u p p o r t 类 ;T L D;t a g l i b指令
T a g . S KI P B OD Y 表 示标签 的体 内容 应该 忽略 , T a g . E V AL B O DY I NC L UD E表示 体 内容应 该被 处理 ,
收稿 日期 :2 0 1 4 . 0 1 - 0 6
笙! 星 墨 塑
塾 兰 皇 型 垫
然后 控制 转 移 到 d o Af t e r B o d y 方 法 上 ,这 个 方法 也返 回两 个可 能值 之一 ,T a g . S KI P _ BO DY将控 制转 移
容的情形 , 而T a g与 I t e r a t i o n T a g 接 口和对应的 T a g S u p p o  ̄类适用于标签体内容为空或直接把体内容传 递到页面 的简单情形,没有体 内容的标签也可直接实现更简单的 T a g 接 口。
I t e r a t i o n T a g接 口的执行 流程 如 图 1右 半部分所 示 ,第 一步 是获得 适 当类 的一个 实例 ,或者 从 J S P 容器 的标 签 处理 器 资源 池 ,或 者产 生一个 新 实例 ,然 后 ,标 签 处理器 属性被 设置 ,这 包括 J S P 容器调 用T a g接 口的 s e t P a g e C o n t e x t( )方 法指 定 当前 的 P a g e C o n t e x t 对 象 ,调用 s e t P a r e n t( )提供 对 当前标

chapter8 JSP标签编程

chapter8 JSP标签编程
标签可以简化JSP中的Scriptlet,但是从实际开发来讲,自定义标签库使 用并不多 标签需要*.tld文件的支持,之后使用<%@taglib%>使用标签
下一章内容
定义有属性的标签
本章目标
理解标签中属性的设置方法; 理解标签配置文件中的属性定义格式。
格式化日期标签类 —— DateTag.java
编写JSP页面并调用标签 —— hellotag.jsp
<%@ page contentType="text/html;charset=GBK"%> <%@ taglib prefix="mytag" uri="/WEB-INF/hellotag.tld"%> <html> <head> <title> 高端Java培训</title> </head> <body> <h1><mytag:hello/></h1> </body> </html>
<%@ taglib prefix="mytag" uri="mldn_hello"%>
标签组成部分
标签处理类:HelloTag.java; 标签描述文件:hellotag.tld; JSP页面:通过<%@taglib%>定义标签; (可选)在web.xml文件中配置映射名称。
小结
Hale Waihona Puke 小结 标签中设置的属性依然使用反射机制调用setter方法完成; 所有设置的属性都要通过TLD文件进行定义。

JSP课件-12标准标签

JSP课件-12标准标签

迭代标签库
迭代标签用于多次计算标签体 迭代标签库中的标签有: 迭代标签库中的标签有:
迭代标签
forEach
forTokens
迭代标签库
<%@ taglib uri="/jstl/core_rt" prefix="c" %> <%! String [] numbers = { "1", "2", "3", "4" }; %> <c:set var="member" value="Joe:Petter;Ryan|John" scope="page" /> <BODY> forEach 标签将遍历对象集 <c:forEach var="numbering" items="<%= numbers %>"> 合并显示1 合并显示1到4之间的数字 <c:out value="${numbering}" /> </c:forEach> <c:forTokens items="${pageScope.member}" delims=":;|" var="membername"> <c:out value="${membername}" /> <br /> forTokens 将遍历用所提供的分 </c:forTokens> 隔符分隔的值并显示所有的名称 </BODY>
自定义Java类继承于标签 类继承于标签API 自定义 类继承于标签 编写标签描述文件 配置web.xml 配置 使用自定义标签

如何设置自定义标签

如何设置⾃定义标签1.什么是⾃定义标签,查询单独的某种⽤户的特定信息时可以使⽤⾃定义标签。

2.如何设置⾃定义标签。

1.2.全部代码如下:<?xml version="1.0" encoding="UTF-8" standalone="no"?><taglib xmlns="/xml/ns/j2ee" xmlns:xsi="/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="/xml/ns/j2ee /xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"> <display-name>Ruiec Tags</display-name><tlib-version>1.0</tlib-version><short-name>ruiec</short-name><uri>/ruiec-tags</uri><tag><name>hasPerms</name><tag-class>com.ruiec.web.template.jsp.directive.HasPermsTag</tag-class><body-content>scriptless</body-content><attribute><name>perms</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag><tag><name>date</name><tag-class>com.ruiec.web.template.jsp.directive.DateTag</tag-class><body-content>scriptless</body-content><attribute><name>startDate</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute><attribute><name>endDate</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute><attribute><name>type</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute><attribute><name>var</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag><tag><name>module</name><tag-class>com.ruiec.web.template.jsp.directive.ModuleTag</tag-class><body-content>scriptless</body-content><attribute><name>parentId</name><type>ng.Integer</type><rtexprvalue>true</rtexprvalue></attribute><attribute><name>var</name><rtexprvalue>true</rtexprvalue></attribute></tag><tag><name>department</name><tag-class>com.ruiec.web.template.jsp.directive.DepartmentTag</tag-class><body-content>scriptless</body-content><attribute><name>parentId</name><type>ng.Integer</type><rtexprvalue>true</rtexprvalue></attribute><attribute><name>var</name><rtexprvalue>true</rtexprvalue></attribute></tag><tag><name>user</name><tag-class>erTag</tag-class><body-content>scriptless</body-content><attribute><name>userId</name><type>ng.Integer</type><rtexprvalue>true</rtexprvalue></attribute><attribute><name>var</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag><tag><!-- 查询回复帖⼦ --><name>replyArticle</name><tag-class>com.ruiec.web.template.jsp.directive.ReplyArticleTag</tag-class><body-content>scriptless</body-content><attribute><name>replyArticleId</name><type>ng.Integer</type><rtexprvalue>true</rtexprvalue></attribute><attribute><name>var</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag></taglib>3.配置Tag⽂件如下,这⾥相当⼀个查询。

JSP01基础语法

JSP标准指令JSP标准指令用来设定JSP网页的整体配置信息例如配置JSP中的全局变量,声明类,要实现的方法和输出内容的类型等。

它的特点是:它们并不向客户端产生任何输出,并且所有的指令在JSP整个文件范围内有效在JSP常用的共有三种JSP指令,它们是被设置在<%@和%>括号中插入到HTML 网页的。

1JSP标准指令格式:page语句应用格式:page语句作用于整个JSP网页,即作用范围是整个JSP网页,它用于定义JSP网页文件中的全局属性,其中各个选项的意义分别为:注:用error.jsp文件接收异常的时候, 需要关闭:浏览器---→integer选项------→高级-----→显示友好http错误信息不选择.,否则浏览器将要拦截.在web.xml中配置异常<error-page><exception-type>ng.Exception</exception-type><location>/WEB-INF/error.jsp</location></error-page>此时出现错误的页面不用加 errorPage=”error.jsp”当出现异常时,程序转到由<location>/WEB-INF/error.jsp</location>指向的路径error.jsp放置到WEB-INF路径下,客户端无法访问.JSP脚本指令标签JSP通常使用一系列特殊标签在网页中引入Java代码或Java片断JSP隐含(内置)对象在JSP内部有一个隐含对象集合,编写JSP页面中,可以直接调用这些隐含对象中的方法而不必事先要把它实例化。

简化了JSP页面的开发。

润乾报表在JSP文件中定义


yes或no
params
否 报表所需要的参数 用户提交的参数值
funcBarFontFace funcBarFontSize funcBarFontColor functionBarColor needSaveAsExcel needSaveAsPdf needSaveAsWord needSaveAsText needPrint printLabel needDirectPrint
需要显示直接打印 否 报表的Applet按钮

yes或no,当为yes时,如果定义了 funcBarFontColor和functionBarColo 应该用”#FFFFFF”之类的颜色 值,printLabel应该只用文字

直接打印钮外观定 义
html元素或文字

直接打印报表前是 否需要提示确认
yes或no
userFuncBarElements
needScroll scrollWidth scrollHeight scrollBorder appletJarName exceptionPage needLinkStyle 浏览式报表的属性 useCache
timeout
width height columns needPageMark
name

报表在网页中的ID 标识
符合变量命名规则的字符串,在本 中应是唯一的
srcType
否 报表源的类型
见注1
reportFileName
当报表源类型为file 否 时,要发布的报表 报表文件名
文件
beanName

当报表源类型 为defineBean时,已 保存到request中的 bean的名称

自定义分页标签的使用

JSP扩展制作自定义分页标签●分页标签:当查询数据的记录很多的时候,我们通过控制每页显示的记录数来对页面显示友好性进行控制。

●显示效果:当第一次进入到该页面的时候,显示为首页记录,比如每页显示5条记录。

单击下一页图片时,可以翻转到下一页5条记录。

也操作的过程中,也可以直接跳转到最后一页和第一页。

●编码思路:在该SQL语句中,关键的代码是红色代码部分,其中top5是指每页可以查询的记录条数,而主查询中的not in 是指排除子查询中的记录条数。

如果每次进行查询时,都可以有规律的对子查询中的记录进行排除查询,那么我们就可以很快得到下一页,上一页,首页和尾页的5条记录了。

注意:order by 非常重要,不管是在子查询还是在主查询中,都必须对记录进行排序,或则,当页数发生改变时,不能准确定位到下一页的5条记录。

代码实现思路利用自定义标签实现分页标签的全部思路。

分页标签要定义的几个部分:PageTag.java:TagSupport的实现子类。

在该类的doStartTag()方法中,我们要实现对页面分页标签的所有涉及参数初始值的设效果如下:其中,只要我们每次提交的表单是指向同一个查询语句,我们就在页面动态的将计算好的页面编号传递给表单提交对象。

✓标签已经完成,结合前面说明的数据库查询语句,我们就可以进行分页标签的使用了。

●实现环节:(全部代码)✓第一步:(1)建立一个标签文件:PageTag.java,实现主要的分页数据计算,和页面分页样式的显示功能。

所有页面可以直接引用该分页标签。

该类实现TagSupport的继承。

第二步:写完标签类后,需要为该标签类申明好配置文件。

第三步:分页标签写完以后,就可以对查询的代码进行分页处理了。

我们分别创建一段标准的查询代码,并让其查询结果显示在一JSP页面上,这个部分一共由1个控制器:QueryServlet.java,1一个数据持久对象JavaBean:Employee.java和1个数据连接工厂类:DBCon.java,一对业务逻辑实现接口QueryEmployee.java和QueryEmployeeImp.java (1)数据库连接类DBCon.java(2)数据库持久化对象:JavaBean(3)声明业务逻辑接口和接口实现类:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档