JavaEE自定义标签(DOC)
- 格式:doc
- 大小:306.50 KB
- 文档页数:11
Java⾃定义标签⽤法实例分析本⽂实例讲述了Java⾃定义标签⽤法。
分享给⼤家供⼤家参考,具体如下:简单例⼦实现⼀个标签分为两步:(1)继承SimpleTagSupport或TagSupport实现⼀个控制器(2)创建⼀个描述标签的tld⽂件。
下⾯是⼀个简单例⼦:(1)实现⼀个标签控制器,向页⾯输出“hello”:public class Test extends SimpleTagSupport{public void doTag() throws IOException{JspWriter out = getJspContext().getOut();out.write("hello");}}(2)在WEB-INF⽂件夹下创建⼀个custom.tld⽂件:<?xml version="1.0" encoding="UTF-8"?><taglib version="2.0" xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"><tlib-version>1.0</tlib-version><jsp-version>2.0</jsp-version><short-name>my</short-name><!-- 直接显⽰hello --><tag><name>Hello</name><tag-class>com.huanle.utils.tags.Test</tag-class><body-content>empty</body-content></tag></taglib>上⾯代码通过<tag>标签描述⼀个⾃定义标签,<body-content>empty</body-content>表⽰这个标签没有标签体,也就是开始标签和结束标签之间没有内容。
Java自定义简单标签实例Java自定义简单标签实例引导语:当jsp的内置标签和jstl标签库内的标签都满足不了需求,这时候就需要开发者自定义标签。
以下是店铺分享给大家的Java自定义简单标签实例,欢迎阅读!下面将以权限的控制为例自定义一个标签:一、标签类型步骤:1.自定义一个类PerssionTag 继承SimpleTagSupport(自定义标签一般都会继承这个类)package .liveuc.privilege.tag;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.Set;import javax.servlet.jsp.JspException;import javax.servlet.jsp.PageContext;import javax.servlet.jsp.tagext.SimpleTagSupport;import .liveuc.privilege.model.Privilege;import .liveuc.privilege.model.Resource;import .liveuc.privilege.model.Role;import er;/**** @说明自定义标签*/public class PerssionTag extends SimpleTagSupport {//自定义标签属性,用于标签传入参数private String uri;//接收标签传入的参数public void setUri(String uri) {this.uri = uri;}@Overridepublic void doTag() throws JspException, IOException {//获取用户登陆后保存的.SessionPageContext page = (PageContext) this.getJspContext(); User user = (User) page.getSession().getAttribute("login"); //如果用户登陆if(user != null) {//用户登陆判断用户权限List list = new ArrayList();//获取用户的角色Set role = user.getRole();for(Role r:role) {//获取角色对应的权限Set privilege = r.getPrivilege();for(Privilege p:privilege) {//获取权限对应的资源Set res = p.getResource();for(Resource re:res) {list.add(re.getUri());}}}for(String ur:list) {//判断用户的权限if(ur.equals(uri)) {this.getJspBody().invoke(null); //有权限输出标签体内容}}}}}2.在WEB-INF下创建tld文件描述标签。
在J2EE项目中,JSP页面常常通过在静态页面模板中嵌入scriptlets来插入动态的内容。
然而,随着复杂程序的增加,JSP页面也变得难于管理。
虽然用这种方法开发小形项目唾手可得,但是scriptlets仍然要面对下面的不利情况:Scriptlet难于阅读和修改。
带有Scriptlets的JSP 页面混合了两种语言,这使得阅读和维护变得很困难。
Scriptlets鼓励了将数据表现和逻辑处理的混合。
JSP 页面主要功能是数据表现而不是逻辑处理。
逻辑处理属于Java类的工作,他们应该由程序员维护并能够重用。
Scriptlets不能够被重用。
当scriptlets被重用时,常常是鼓励拷贝-粘贴来达到重用的效果,这是一种危险的维护方法。
每一次你拷贝-粘贴scriptlets时,将有更多行多余的代码需要维护。
Scriptlets的参数很难进行确定传递. 无论如何,绝大数人简单的拷贝,粘贴、编辑或者类似的增加,使得大部份的多余的代码需要更多的维护。
与其创建充满了scriptlets的巨大的JSP页面,不如考虑使用用户自定义标签。
用户自定义标签允许你创建、在JSP中使用你自己定义的类HTML标签。
每当JSP引擎遇到用户自定义标签时,就会自动查找标签处理类,并自动调用他。
页面中的自定义标签将会被票签处理类的输出所代替。
这就使得JSP页面不用直接在页面写Java代码,就可以指定生成动态的内容的。
用户自定义标签为你的网页设计提供了N种好处:他提高了页面代码的可读性。
页面设计人员而不是程序员,能够使用很比使用Scriptlets更容易的使用标签。
维护代码的程序员也只需个性标签库面不是JSP页面,这样他就不要再冒着破坏页面美观的风险。
在使用标签的每一处,增强或者固定的标签改变了标签了的表现。
标签比Scriptlets更容易确定参数,因为他会被作为一种属性或者在标签体内被传达。
最后,标签比Scriptlets高度的可重用性,因为你可以创建共享的、可重用的自定义标签库。
1、创建自己的.tld 标签文件(直接copy模板里的)empty表示空标签元素<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"version="2.1"><description>JSTL 1.1 core library</description><display-name>JSTL core</display-name><tlib-version>1.1</tlib-version><short-name>Mytaglib</short-name>//一组标签<uri>/jsp/jstl/core</uri><tag><name>helloTag</name>//标签名<tag-class>com.jstl.tag.Hello</tag-class>//标签处理类<body-content>empty</body-content></tag></taglib>2、web.xml 中配置标签(.tld文件可放到web 项目/WEB-INF目录下新建的tlds文件夹里)<jsp-config><taglib><taglib-uri>/hello</taglib-uri><taglib-location>/WEB-INF/tlds/hello.tld</taglib-location> </taglib></jsp-config>3、编写标签处理类,继承TagSupport类4、使用<%@taglib uri="/hello" prefix="h" %><h:helloTag/>。
⾃定义标签2 ⾃定义标签2.1 引⼊需求:向浏览器输出当前客户的IP地址(只能使⽤jsp标签)2.2 第⼀个⾃定义标签开发步骤1)编写⼀个普通的java类,继承SimpleTagSupport类,叫标签处理器类/*** 标签处理器类* @author APPle* 1)继承SimpleTagSupport**/public class ShowIpTag extends SimpleTagSupport{private JspContext context;/*** 传⼊pageContext*/@Overridepublic void setJspContext(JspContext pc) {this.context = pc;}/*** 2)覆盖doTag⽅法*/@Overridepublic void doTag() throws JspException, IOException {//向浏览器输出客户的ip地址PageContext pageContext = (PageContext)context;HttpServletRequest request = (HttpServletRequest)pageContext.getRequest();String ip = request.getRemoteHost();JspWriter out = pageContext.getOut();out.write("使⽤⾃定义标签输出客户的IP地址:"+ip);}}2)在web项⽬的WEB-INF⽬录下建⽴itcast.tld⽂件,这个tld叫标签库的声明⽂件。
(参考核⼼标签库的tld⽂件)<?xml version="1.0" encoding="UTF-8" ?><taglib xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-jsptaglibrary_2_1.xsd"version="2.1"><!-- 标签库的版本 --><tlib-version>1.1</tlib-version><!-- 标签库前缀 --><short-name>itcast</short-name><!-- tld⽂件的唯⼀标记 --><uri></uri><!-- ⼀个标签的声明 --><tag><!-- 标签名称 --><name>showIp</name><!-- 标签处理器类的全名 --><tag-class>gz.itcast.a_tag.ShowIpTag</tag-class><!-- 输出标签体内容格式 --><body-content>scriptless</body-content></tag></taglib>3)在jsp页⾯的头部导⼊⾃定义标签库<%@taglib uri="" prefix="itcast"%>4)在jsp中使⽤⾃定义标签<itcast:showIp></itcast:showIp>2.3 ⾃定义标签的执⾏过程前提: tomcat服务器启动时,加载到每个web应⽤,加载每个web应⽤的WEB-INF⽬录下的所有⽂件例如。
1,关于自定义标签的几个重要组成部分:继承的类:javax.servlet.jsp.tagext.*:TagSupport一个属性: protected PageContext pageContext两个方法: public int doStartTag()public int doEndTag()三个常量: SKIP_BODY,SKIP_PAGE,EVAL_PAGESKIP_PAGE,EVAL_PAGE是doEndTag()方法的返回值标签库描述文件 (*.tld)2,流程(工具:eclipse):1.新建一个web project2.在项目下新建一个包,包里建类,继承TagSupport3.完成标签处理类package demo.tag;import javax.servlet.jsp.JspException;import javax.servlet.jsp.*;import javax.servlet.jsp.tagext.TagSupport;import java.io.*;//需要导入的几个常用的包@SuppressWarnings(\"serial\")public class TagDemo extends TagSupport ...{private int pageSize;//pageSize属性,控制页面显示的个数,并且要生成get和set方法public int getPageSize() ...{return pageSize;}public void setPageSize(int pageSize) ...{this.pageSize = pageSize;}// public int doEndTag() throws JspException {// 在这里没有用// return super.doEndTag();// }public int doStartTag() throws JspException ...{JspWriter out = pageContext.getOut();//用pageContext获取out,他还能获取session等,基本上jsp的内置对象都能获取,非常有用for (int i=0; i<pageSize; i++) ...{try ...{out.println(\"<table>\");out.println(\"<tr>\");out.println(\"<td>\"); [Page]out.println(i);out.println(\"</td>\");out.println(\"<td>\");out.println(i*10);out.println(\"</td>\");out.println(\"</tr>\");out.println(\"</table>\");} catch (IOException e) ...{e.printStackTrace();}}return SKIP_BODY;}}1. 标签处理类应该继承自TagSupport类2. 标签处理类应该覆盖父类的至少一个方法 doStartTag() 或doEndTag(),如果你覆盖是doStartTag()方法应该返回SKIP_BODY,如果你覆盖是doEndTag()方法应该返回SKIP_PAGE,EVAL_PAGE3. 充分利用标签处理类的pageContext属性,可以通过该属性获取使用自定义标签的JSP页面的各种对象:getOut(): 获取JSP页面的输出流 outgetRequest: 获取JSP页面的请求对象 requestgetSession: 获取JSP页面的会话对象 sessiongetServletContext: 获取JSP页面的应用对象 application [Page]4. 如果我们要完成一个带属性自定义标签,需要在标签处理类声明相关属性5.在WEB-INF下新建一个.tld文件完成标签库描述文件<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE taglibPUBLIC \"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN\"\"/j2ee/dtd/web-jsptaglibrary_1_2.d td\"><taglib><tlib-version>1.0</tlib-version><jsp-version>1.2</jsp-version><short-name>MyTagLib</short-name><tag><name>showDataTag</name><tag-class>demo.tag.TagDemo</tag-class><attribute><name>pageSize</name><required>true</required><type>Integer</type></attribute></tag></taglib>1. 标签库描述文件必须以 tld 为文件的后缀名2. 标签库描述文件应该遵守 xml 语法要求3. 标签库描述文件的根元素必须是 <taglib>4. taglib根元素下必须完成以下四个子元素tlib-version : jsp-version: short-name: 标签库描述文件的简要说明,且只能出现一次tag: 能出现一到多次 , 描述标签库中的标签名及你要对应的标签处理类5. tag元素下出现的子元素:name子元素:标签名tag-class子元素:对应的标签处理类attribute子元素:该标签应包含的属性6. attribute元素下出现的子元素:name:属性名required:该属性名可不可省略type:标签处理类中相关属性的类型5.在web.xml引入标签库描述文件<?xml version=\"1.0\" encoding=\"UTF-8\"?> [Page]<web-app version=\"2.4\"xmlns=\"/xml/ns/j2ee\"xmlns:xsi=\"/2001/XMLSchema-instance\ "xsi:schemaLocation=\"/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd\"> <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><jsp-config><taglib><taglib-uri>MyFirstTag</taglib-uri><taglib-location>/WEB-INF/MyTagLib.tld</ta glib-location></taglib></jsp-config></web-app>1. 在web.xml中实现taglib元素的子元素:taglib-location: 标签库描述文件在Web应用中的相对路径<taglib-location>/WEB-INF/MyTagLib.tld</taglib-location>taglib-uri:该标签库在JSP中用什么名字来调用<taglib-uri>abc</taglib-uri>2. 在要调用标签库的JSP中声明声明:<%@ taglib uri=\"MyFirstTag\" prefix=\"suibian\" %>调用:<suibian:showDataTagpageSize=\"10\"></suibian:showDataTag>。
JAVA 创建移除Word书签在使用Word文档时,有时会遇到文档篇幅较长的情况,看了一部分,可以在中间创建一个书签,下次打开Word更加方便;如果不再需要书签,可以将书签移除。
本篇文章将通过Java在Word中创建和移除Word书签。
工具使用:●Free Spire.Doc for Java 2.0.0(免费版)●IntelliJ IDEAJar包文件导入:首先,获取Free Spire.Doc for Java文件包。
Step 1:下载控件包之后解压,打开“Project Structure”界面。
(以下是三种在IDEA中快速打开Project Structure界面的方式,可选其中任意一种)Step 2:按以下操作步骤进行导入。
①选择“Modules”—“Dependencies”,添加外置jar包;②进入"Attach File or Directories"界面选择jar文件路径,然后点击“OK”;③勾选jar路径选项,点击”OK”/”Apply”;④导入完成。
如下图:JAVA代码参考示例创建书签这里提供了一个Paragraph类,该类中有两个方法appendBookmarkStart(string name)和appendBookmarkEnd(string name),用来添加书签到指定的段落,其中BookmarkStart代表书签的起始位置。
import com.spire.doc.*;import com.spire.doc.documents.*;public class createBookmark {public static void main(String[] args) {//创建Document对象Document doc = new Document()//加载Word文档doc.loadFromFile("data/Sample.docx");//获取需要添加书签的段落Paragraph paragraph = doc.getSections().get(0).getParagraphs().get(2);//添加一个开始标签并移动到段落开头BookmarkStart start = paragraph.appendBookmarkStart("我的书签");paragraph.getItems().insert(0,start);//在段落末尾添加一个结束标签paragraph.appendBookmarkEnd("我的书签");//保存文档doc.saveToFile("output/AddBookmark.docx", FileFormat.Docx_2013);}}创建结果:移除书签在该jar 包文件中,每个Word 文档都含有一个书签的集合,通过Document 类的Bookmarks 属性来访问该集合,通过该集合的FindByName(string name)方法来查找指定的书签,然后将其删除。
IDEA自定义注释模板(javadoc)自定义注释模板是一种为代码添加注释的方法,可以提供更多信息和指导,使代码更易于理解和维护。
在使用IDEA开发工具中,可以通过自定义注释模板来快速生成注释。
一、为什么需要自定义注释模板?注释是代码中的重要组成部分,可以提供代码功能和实现的说明,对于日后的维护和修改也起到了重要的指导作用。
然而,传统的注释模板往往过于简单,只能提供基本的信息,不足以满足复杂项目的需求。
因此,自定义注释模板成为了开发人员的一个需求。
二、自定义注释模板的优势1.提供更多信息:自定义注释模板可以包含更多的信息,如参数、返回值、异常等,为开发人员提供更多的指导。
2.提高代码可读性:自定义注释模板可以按照固定格式生成注释,使代码更易于阅读和理解。
3.提高开发效率:自定义注释模板可以快速生成注释,减少手动编写注释的时间。
在IDEA中,可以通过以下步骤来自定义注释模板:1. 打开IDEA的设置(Preferences)窗口,选择Editor -> Live Templates。
2. 在左侧的列表中,选择Java。
4.点击下方的“+”按钮,添加一个新的注释模板。
5. 在Abbreviation字段中输入模板的缩写,如“cmt”。
6. 在Template text字段中输入模板的内容,可以使用变量来表示参数、返回值等信息。
8. 点击“Apply”按钮保存设置。
四、自定义注释模板的示例以下是一个示例的自定义注释模板:/*** ${description}**/其中,${description}表示方法的描述,${param}表示参数,${paramDescription}表示参数的描述,${returnDescription}表示返回值的描述,${exception}表示异常,${exceptionDescription}表示异常的描述。
总结:自定义注释模板是一种提高代码可读性和开发效率的方法,在IDEA 中可以很方便地进行设置。
Javadoc标签和Javadoc注释规范说明最近看源码,⼀些Javadoc常见的注释整理下Javadoc是Sun公司提供的⼀个技术,从程序源代码中抽取类、⽅法、成员等注释形成⼀个和源代码配套的API帮助⽂档。
Javadoc命令是⽤来⽣成⾃⼰的API⽂档,使⽤⽅式:javadoc 源⽂件名.javajavadoc -d ⽂档存放⽬录源⽂件名.java通过IDEA⽣成Javadoc : Tools -> Generate JavaDocjavadoc标签标签说明@author作者标识@version版本号@return对函数返回值的描述@deprecated标识过期API(为了保证兼容性,仍可⽤,但不推荐⽤)@throws构造函数或⽅法会抛出的异常@exception同@throws@see引⽤,查看相关的内容,如类,⽅法,变量等,必须顶头写{@link 包.类#成员}引⽤,同@see,但可写在任意位置{@value}对常量注释,如果其值包含在⽂档中,通过改标签引⽤常量的值{@code}}{@code text}将⽂本标记为code,会被解析成 text } ,在Javadoc成只要涉及到类名或者⽅法名,都需要使⽤@code进⾏标记@param说明⽅法的参数@inheritDoc⽤于继承⽗类中的Javadoc,⽗类的⽂档注释,被继承到了⼦类javadoc注释规范⼀、 Java⽂档// 注释⼀⾏/ * */ 注释若⼲⾏/** ……*/ 注释若⼲⾏,写⼊Javadoc⽂档⼆、⽂档格式写在类上的⽂档标注⼀般分为三段:第⼀段:概要描述,通常⽤⼀句话或者⼀段话简要描述该类的作⽤,以英⽂句号结束第⼆段:详细描述,通常⽤⼀段或者多段话来详细描述该类的作⽤,⼀般每段话都以英⽂句号作为结束第三段:⽂档标注,⽤于标注作者,创建时间,参阅类等信息⽣成⽂档是HTML格式。
换⾏<br>分段<p>(写在段前))⽰例/*** show ⽅法的简述.* <p>show ⽅法的详细说明第⼀⾏<br>* show ⽅法的详细说明第⼆⾏* @param b true 表⽰显⽰,false 表⽰隐藏* @return 没有返回值*/public void show(boolean b) {frame.show(b);}补充:Java的三种注释 Javadoc标记*三种注释⽅法:1、单⾏注释 //注释的内容2、多⾏注释 /*......*/3、/**......*/,这种⽅式和第⼆种⽅式相似。
java-doc 标准的注释
JavaDoc是一种用于为Java源代码编写文档的工具,它使用特
定的注释标记来识别和提取文档信息。
JavaDoc标准的注释通常以"/"开始,以"/"结束,位于类、方法、变量等声明的上方。
它们可
以包含多行注释,用于描述相关代码的功能、参数、返回值、异常
等信息。
JavaDoc标准的注释通常包括以下几个部分:
1. 摘要部分,对注释的简要描述,通常位于注释的开头。
2. 参数部分,用@param标记,描述方法的参数及其含义。
3. 返回值部分,用@return标记,描述方法的返回值及其含义。
4. 异常部分,用@throws标记,描述方法可能抛出的异常及其
含义。
5. 示例部分,提供使用示例,通常使用@code标记标识代码。
JavaDoc标准的注释可以帮助开发人员快速了解代码的功能和用法,也可以通过JavaDoc工具生成代码的文档网页,方便其他开发人员阅读和使用。
在编写Java代码时,遵循JavaDoc标准的注释规范有助于提高代码的可读性和可维护性,也是良好的编程实践之一。
标签扩展是一个JAVA类,它是运行一个或者二个接口的JAVABEAN。
在JSP规范内标签具有比JAVABEAN更丰富的运行时协议,因为1:初始化可以包含属性,没有这些属性标签就不能运行,而JAVABEAN的构造函数参数为空2:设置和获取属性不会涉及到所有的类,在BEAN中只有少量的逻辑控制。
3:JSP页面中的BEAN没有默认设置上下文,也就是说,BEAN没有一个父类的或者页面上下文对象的默认概念。
JSP所有的标签都实现了javax.servlet.jsp.tagext.JspTag接口。
这个接口是一个标记接口,它有二个子接口:1:一个是SimpleTag,它是JSP2.0新增加的接口,代表了简单的标签。
2:第二个是Tag接口,它是经典的,必须实现的接口,它有一个直接子接口就是IterationTag IterationTag用于开发出抚今追昔的标签,它有一个简单的实现类为TagSupport。
在开发时,我们只要从TagSupport扩展就可以开发出抚今追昔标签了。
IterationTag还有一个子接口,就是BodyTag,这种标签允许带有Body。
BodyTag也有一个实现类,就是BodyTagSupport,在开发BodyTag时,往往直接从它继承就可以了。
当然了,我们在开发自己的标签时除了继承原有的类外,也可以直实现Tag接口。
HelloWorld标签开发传统的标签必须实现javax.servlet.jsp.tagext.Tag接口,在这个接口中,主要定义的是和标签声明周期相关的方法,比如doStartTag() ,doEndTag() 等。
在Tag中,可以通过pageContext对象访问JSP页面的上下文。
下面结合标签的生命周期讨论下标签的处理过程。
JSP1.2标签的生命周期如下1:当容器创建一个新的标签实例后,通过setPageContext设置标签的页面上下文。
2:使用setParent方法设置这个标签的上一级标签。
java⽂档注释--javadoc标签⽬录1. ⽂档注释Java ⽂档注释(Java Doc Comments)是专门为了⽤javadoc⼯具⾃动⽣成⽂档⽽写的注释,⽂档注释与⼀般注释的最⼤区别在于起始符号是/**⽽不是/*或//。
⽂档注释只负责描述类(class)、接⼝(interface)、⽅法(method)、构造器(constructor)、成员字段(field)。
相应地,⽂档注释必须写在类、接⼝、⽅法、构造器、成员字段前⾯,⽽写在其他位置,⽐如函数内部,是⽆效的⽂档注释。
⽂档注释采⽤HTML语法规则书写,⽀持HTML标记(tag),同时也有⼀些额外的辅助标记。
需要注意的是,这些标记不是给⼈看的(通常他们的可读性也不好),可以通过Javadoc 命令把⽂档注释中的内容⽣成⽂档,并输出到 HTML ⽂件中1.1 ⽂档格式在类上的⽂档标注⼀般分为三段:第⼀段:概要描述,通常⽤⼀句或者⼀段话简要描述该类的作⽤,以英⽂句号作为结束第⼆段:详细描述,通常⽤⼀段或者多段话来详细描述该类的作⽤,⼀般每段话都以英⽂句号作为结束第三段:⽂档标注,⽤于标注作者、创建时间、参阅类等信息⽣成⽂档是HTML格式。
换⾏<br>分段<p>(写在段前))1.2 Javadoc标签Javadoc ⼯具可以识别⽂档注释中的⼀些特殊标签,这些标签⼀般以@开头,后跟⼀个指定的名字,有的也以{@开头,以}结束。
Javadoc 可以识别的标签如下表所⽰:标签描述标签类型@author作者标识包、类、接⼝@deprecated标识当前API已经过期,仅为了保证兼容性依然存在,以此告之开发者不应再⽤这个API包、类、接⼝、值域、构造函数、⽅法{@docRoot}指明当前⽂档根⽬录的路径@exception标志⼀个类抛出的异常构造函数、⽅法{@inheritDoc}从直接⽗类继承的注释{@link}链接到某个特定的成员对应的⽂档中包、类、接⼝、值域、构造函数、⽅法{@linkplain}插⼊⼀个到另⼀个主题的链接,但是该链接显⽰纯⽂本字体包、类、接⼝、值域、构造函数、⽅法@param⽅法的⼊参名及描述信息,如⼊参有特别要求,可在此注释构造函数、⽅法@return对函数返回值的注释⽅法@see引⽤,查看相关内容,如类、⽅法、变量等包、类、接⼝、值域、构造函数、⽅法@serial说明⼀个序列化属性@serialData说明通过writeObject( ) 和 writeExternal( )⽅法写的数据@serialField说明⼀个ObjectStreamField组件@@since描述⽂本,API在什么程序的什么版本后开发⽀持包、类、接⼝、值域、构造函数、⽅法@throws构造函数或⽅法所会抛出的异常构造函数、⽅法{@value}显⽰常量的值,该常量必须是static属性静态值域@version版本号包、类、接⼝对两种标签格式的说明:@tag 格式的标签(不被{ }包围的标签)为块标签,只能在主要描述(类注释中对该类的详细说明为主要描述)后⾯的标签部分(如果块标签放在主要描述的前⾯,则⽣成API 帮助⽂档时会检测不到主要描述)。
JavaEE自定义标签:标签类的创建、tld配置文件的创建(位置、如何创建)、Web-XML配置、JSP应用
1、标签
以类似于html标签的方式实现的java代码的封装。
第一:形成了开发标签的技术标准---自定义标签的技术标准。
第二:java标准标签库(sun之前自己开发的一系列的标签的集合)jstl,以及表达式语言E L。
2、自定义标签
(1)理解:
可以允许用户自己根据自己的需要,去开发自己的标签的技术规范。
通俗:在Jsp页面上,以简单的标签封装java代码的操作。
//在自定义标签类中,先调用setPageContext()实例化内置对象:
//然后是doStartTag()方法,核心代码放在这个方法里面:
//定义变量,变量的Get、Set方法: private String UserName = "";
//tld配置文件放置在WEB-INF目录下,主要的标记如下,主要的配置如下:
//前面tlib-version版本号、Jsp-version JSP的版本号、short-name 命名空间、是必须有的
//uri,注意是uri而不是url,url是访问的路径。
//而uri为访问时候的别名,写在JSP页面上的标签的别名。
//name为此标签类的别名,tag-class 为标签类的存放的物理路径
//body-content 为是否有标签体,如果是/子关闭标签设置为EMPTY
//如果涉及到标签属性,可以设置attribute,其中name为属性的名称,而不是别名,required 属性是否必须设置,rtexprvalue 是否程序运行时候为属性赋值。
//如果在tld文件中不设置uri,则在web-xml中必须对talib-uri进行设置。
//在JSP页面中,用taglib指令导入自定义标签。
//JSP页面上的使用,前面my为tld文件中为标签类定义的命名空间、hello为tld文件中指定标签类的别名:
(2)技术组成
A:标签处理类:实现所有信息显示功能的Java类
B:标签配置文件(标签描述文件、库文件):是一个遵守xml规范的tld文件(扩展名为TLD)
C:配置web.xml:告诉web应用,需要引用其他的标签信息
D:jsp页面上,调用标签
3、标签的特点
(1)分类
A:成对出现的标签
B:自关闭的标签
(2)特点
A:标签必须正确的关闭
B:标签不能出现重名
C:标签可以有标签体也可以没有
D:标签可以有属性,但是一个标签不能出现同名属性最简单的标签:没有标签体也没有属性的标签
4、自定义标签的开发流程(上面的插图)
A:明确要实现的功能:要在页面显示具体什么内容B:开发标签处理类
C:创建以及配置标签描述文件:TLD文件
D:配置web.xml
E:jsp页面调用标签
5、开发标签处理类
(1)父类
一个接口两个类
接口:Tag接口javax.servlet.jsp.tagext.Tag
类:
自关闭:TagSupport
成对出现:BodyTagSupport
(2)开发标签类
集成自指定的类,重写setPageContext(),doStartTag(),doEndTag()。
重点:标签开始操作doStartTag()方法★
6、创建标签配置文件(TLD文件)
(1)作用
是用来统一管理多个标签处理类的xml文件。
(2)创建
具有自己的格式和规范的(和XML文件一样)
推荐在WEN-INF目录下,创建自己的tld文件。
(3)文件格式
A:根元素:taglib
B:taglib的四个起始子元素
<tlib-version>标签库的技术标准的版本1.0</tlib-version>
<jsp-version>支持的jsp的技术标准版本1.2</jsp-version>
<short-name>标签库文件的命名空间:缩写</short-name>
<uri>当前标签库文件的唯一标记的符号(别名)</uri>
命名空间:用来区分当前标签是属于哪个标签库的名称简写。
<jsp:useBean>
说明:uri子元素是可有可无的,但是会对后期的调用产生影响。
C:tag子元素
每个标签处理类都必须在tld文件中进行配置。
每个标签类都对应一个tag元素,描述自己的配置信息。
<tag>
<name>标签处理类的别名</name>
<tag-class>标签类的物理地址</tag-class>
<body-content>是否有标签体</body-content>
</tag>
body-content:值默认的是jsp。
如果是自关闭标签,需要制定成empty。
如果标签有属性,还有attribute子元素。
7、配置web.xml
(1)作用
在web.xml中进行标签配置文件的设置,告诉web应用程序,需要调用的自定义标签在哪里。
(2)前提
在标签配置文件中,如果没有进行<uri>的配置,则必须进行web.xml的配置。
如果已经配置了uri元素的值,就不需要进行web.xml的配置,可以直接在jsp上调用。
uri表现在JSP 页面引入标签时候,需为taglib指令指定uri,注意和TLD文件中的标签类的别名name
区分,那个是在JSP页面中调用标签时候命名空间后面写入。
(3)配置(如上图在WEB.XML中的配置)
所有的标签配置文件的配置,都必须在<jsp-config>元素中。
每个配置文件有自己<taglib>元素。
<taglib>
<taglib-location>标签配置文件的物理地址</taglib-location>
<taglib-uri>标签配置文件的调用别名</taglib-uri>
</taglib>
8、jsp调用标签
(1)引入标签库
利用taglib指令实现引入
<%@ taglib uri="标签库的别名" prefix="标签库的前缀(命名空间)"%>
uri:如果tld文件中已经配置了uri,必须与tld的uri一致。
如果tld中没有配置,必须与web.xml中的taglib-uri一致。
prefix:前缀,如果在tld文件中设置了short-name,则必须与short-name保持一致。
(2)调用标签
<前缀:标签类的别名>
(3)标签处理类的生命周期
A:加载
根据标签类的别名,定位标签处理类,加载到容器上
B:实例化
根据默认无参构造函数,进行实例化
C:设置上下文
设置页面上下文,获得内置对象
D:设置父标签
E:执行标签开始的操作
F:执行标签结束的操作
G:资源释放
9、jsp和标签处理类的信息交互方式
两种:
A:借助session属性,由jsp向标签处理类传递值
B:借助于标签的属性,实现传值。
10、属性
(1)理解
用来附加说明标签基本信息的名称与值的集合。
(2)分类
必须有的属性
可有可无的属性
(3)特点
A:是名称与值的集合
B:如果有属性,属性必有值
C:属性的值必须用引括起来
D:一个标签不允许有同名属性
(4)设置
A:在标签处理类中,创建代表属性的变量以及对应的set/get方法(见上图)。
在标签处理类中,属性是以变量的方式存在的。
B:在标签开始动作中,直接使用变量
C:在标签配置文件上,在相应的tag中,添加属性配置。
每个属性都有自己的<attribute>标签
<attribute>
<name>属性的名称(与类中变量同名)</name>
<required>属性是否是必须的(true/false)</required>
<rtexprvalue>属性的值是否通过运行时加以赋值(程序动态赋值)</rtexprvalue> </attribute>
D:jsp页面上的标签中,使用属性
注意:属性名必须与类中的变量同名。