java框架实例---自定义标签实例
自定义标签:
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>
---------------------------------------------------------------------------------
java框架实例---自定义标签实例相关推荐
- html 自定义标签解析,Java解析Html自定义标签的属性
想用Html.fromHtml(String, ImageGetter, TagHandler)这个方法将html文档解析. 通过重写handleTag(boolean opening, String ...
- Spring Boot框架学习 - 自定义 MessageConverter实例
一.自定义 MessageConverter 本篇主要通过实例进行演示,不涉及更底层的细节. 首先,自定义一个 MessageConverter 去处理想要自定义处理的媒体类型,application ...
- java web 自定义标签_JavaWeb学习——自定义标签
自定义标签 一.自定义标签概述 使用标准JSP访问.操作JavaBean,是实现展现(HTML)与业务实现(Java代码)分离的第一步.然而,标准方法功能不够强大,以至于开发者无法仅仅使用它们开发应用 ...
- EL函数以及自定义标签的应用
一.EL函数(调用普通类的静态方法) 编写步骤(自定义EL函数的编写步骤即自定义标签的编写步骤): ①编写一个普通的java类,提供一个静态方法,功能自定,例如下: 1 package cn.wzbr ...
- react和vue中自定义标签的原理在这里
文章目录 前言 一.自定义元素是什么 1 乱写的标签 二.使用步骤 1 自定义标签 2 添加web组件内容 3结合template模板标签使用 4 自定义元素的生命周期方法 三, 反射自定义属性 总结 ...
- Spring源码解析:自定义标签的解析过程
2019独角兽企业重金招聘Python工程师标准>>> spring version : 4.3.x Spring 中的标签分为默认标签和自定义标签两类,上一篇我们探究了默认标签的解 ...
- java程序设计颜志军_JSP 自定义标签之一 简单实例
在JSP中使用自定义标签可以达到这样的目的,事实上,我们所熟知的各类框架基本上都是通过自定义标签的形式来实现的. 通过使用自定义标签,我们可以将实现复杂的逻辑在页面用简单的标签来加以展示.下面我们来实 ...
- java自定义标签简单_JSP 自定义标签之一 简单实例
在jsp中使用自定义标签可以达到这样的目的,事实上,我们所熟知的各类框架基本上都是通过自定义标签的形式来实现的. 通过使用自定义标签,我们可以将实现复杂的逻辑在页面用简单的标签来加以展示.下面我们来实 ...
- jsp中用java写标签id_jsp中自定义标签用法实例分析
本文实例讲述了jsp中自定义标签用法.分享给大家供大家参考.具体如下: 这里简单的写了一个自定义标签,自己定义标签的好处就是在jsp页面中可以使用自己定义的功能,完全与Java代码分离 1. tld文 ...
最新文章
- 2018-3-20李宏毅机器学习笔记十----------Logistic Regression
- VS恢复默认设置的2种方法
- 贝叶斯定理与贝叶斯估计
- Euro Truck Simulator 2欧洲卡车模拟2用VR玩
- python递归算法经典实例-Python递归算法详解
- liferay如何在struts2中調用ajax
- 基于linux实现DNS互联网的搭建
- java语言程序设计(基础篇) 第2章 基本程序设计 课本源代码
- eNsp 多区域OSPF配置
- 2021年N1叉车司机找解析及N1叉车司机试题及解析
- 知乎好物推荐怎么做赚钱?该如何做?
- web打印模板神器reportbro
- Postman--使用
- 齐博x1新用户手工注册接口
- Hadoop实战——MapReduce实现主播的播放量等数据的统计及TopN排序(第一篇)
- 技术管理进阶——你了解成长的全貌吗?
- leetcode算法练习 JavaScript实现
- 奥鹏教育微学吧JAVA答案_西交20秋《Java语言》在线作业【标准答案】
- 庄懂的技术美术入门课(美术向)——学习笔记01
- Java面向对象---封装