java框架实例---自定义标签实例
发布日期:2021-06-29 18:04:28
浏览次数:2
分类:技术文章
本文共 4260 字,大约阅读时间需要 14 分钟。
自定义标签: 1.修改web.xml文件在其中加上对自定义标签的支持: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <jsp-config> <taglib> <taglib-uri>/tld/helloworld</taglib-uri> <taglib-location>/WEB-INF/tlds/helloworld.tld</taglib-location> </taglib> </jsp-config> </web-app> --------------------------------------------------------------------------------- ---- 2.在META-INF下创建tld文件夹并且创建helloword.tld文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version><!--标签库的版本--> <jsp-version>1.2</jsp-version><!--这个标签库要求的jsp规范版本--> <short-name>mytag</short-name><!--jsp页面编写工具可以用来创建助记名的可选名字--> <tag> <name>helloworld</name><!--唯一标签名字--> <tag-class>com.credream.mytag.HelloWorldTag</tag-class><!--标签helloword类的完全 限定名--> <body-content>empty</body-content><!-- 正文内容类型 --> </tag> </taglib> --------------------------------------------------------------------------------- ---------- 这里注意:web.xml和xxx.tld这两个XML文件的头信息的版本匹配很重要,否则会导致页面 报错找不到标签 。 3、创建标签处理程序类 HelloWorldTag(重写doStartTag和doEndTag方法)。 package com.credream.mytag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.tagext.TagSupport; /** * TagSupport与BodyTagSupport的区别: * 主要看标签处理类是否要读取标签体的内容和改变标签体返回的内容,如果不需 要就用TagSupport,否则就用BodyTagSupport * 用TagSupport实现的标签,都可以用BodyTagSupport来实现,因为 BodyTagSupport继承了TagSupport */ public class HelloWorldTag extends TagSupport { @Override public int doEndTag() throws JspException { try { pageContext.getOut().write("Hello World!!!"); } catch (IOException e) { e.printStackTrace(); throw new JspTagException("调用doEndTag方法的时候出错 了..."); } return EVAL_PAGE; } @Override public int doStartTag() throws JspException { return EVAL_BODY_INCLUDE; } } --------------------------------------------------------------------------------- ---------------- 这时候要注意一些参数的意思: 补充: doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE与 SKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字。 doEndTag()方法是在遇到标签结束时呼叫的方法,其合法的返回值是EVAL_PAGE与SKIP_PAGE ,前者表示处理完标签后继续执行以下的JSP网页,后者是表示不处理接下来的JSP网页。 doAfterBody(),这个方法是在显示完标签间文字之后呼叫的,其返回值有EVAL_BODY_AGAIN与 SKIP_BODY,前者会再显示一次标签间的文字,后者则继续执行标签处理的下一步。 EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数可用。 EVAL_PAGE:继续处理页面,doEndTag()函数可用。 SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数可用。 SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数可用。 EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理 tag的body,如果类实现了BodyTag,那么doStartTag()可用,否则非法。 EVAL_BODY_AGAIN:请求继续处理body,返回自doAfterBody(),这个返回值在你制作循环tag 的时候是很有用的。 预定的处理顺序是:doStartTag()返回SKIP_BODY,doAfterBodyTag()返回 SKIP_BODY,doEndTag()返回EVAL_PAGE。如果继承了TagSupport之后,如果没有改写任何的方 法,标签处理的执行顺序是:doStartTag() ->不显示文字 ->doEndTag()->执行接下来的网 页 。如果您改写了doStartTag(),则必须指定返回值,如果指定了EVAL_BODY_INCLUDE,则执 行顺序是:doStartTag()->显示文字->doAfterBodyTag()->doEndTag()->执行下面的网页 。 --------------------------------------------------------------------------------- --------------------------------------------------------------------- 4.编写测试网页hello.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="/tld/helloworld" prefix="mytag"%><!-- 在页面中加以声明 --> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName ()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <mytag:helloworld/> </body> </html> ---------------------------------------------------------------------------------转载地址:https://credream.blog.csdn.net/article/details/8566718 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月24日 11时47分14秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
如何设计自己的第一个加密交易机器人?
2019-04-29
TKDE 2020 | 综述:基于知识图谱的推荐系统
2019-04-29
休息时间!哪些业余活动能提升开发人员的技能?
2019-04-29
事关人类生存?为什么要探寻AI系统的可解释性?
2019-04-29
在后台的python:众多程序员无法攻克的难题
2019-04-29
国会大厦骚乱,与一家极不可靠的面部识别公司……
2019-04-29
电动汽车的“专属危险”:网络威胁问题不容小觑
2019-04-29
统治50年:为什么SQL在如今仍然很重要?
2019-04-29
测试是一场竞争,而数据每次都会获得胜利
2019-04-29
读心的测谎系统:究竟是骗子还是个天才?
2019-04-29
最大规模技术重建:数据库连接从15000个到100个以下
2019-04-29
复工之后:员工如何改善网络安全?
2019-04-29
70%求职者因此被拒,你还不避开这些“雷区”?!
2019-04-29
办法不在多,有用就行!用Dropout解决过度拟合问题
2019-04-29
色情演员识别?绝对是人脸识别最糟糕的应用……
2019-04-29
让强化学习逃离“乏味区域陷阱”,试着加点噪音吧!
2019-04-29
超详细Spring Boot面试问题集锦,死角一个不留!
2019-04-29
10个业余时间可完成的项目,助你飞速提升编码能力!
2019-04-29
网络爬虫初涉——用python爬取网络小说
2019-04-29
Pycharm+tensorflow dropout 学习(三)
2019-04-29