ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

jsp标签

2021-10-11 14:59:16  阅读:112  来源: 互联网

标签:BODY 标签 ----- EVAL doStartTag jsp public


看一个学习目标

 

 

一、标签语言的特点

标签是由三个部分组成的:开始标签,标签体,结束标签

其次是标签的分类

①    空标签: br、hr

②    ui标签:input、table

③    控制标签:if、foreach

④    数据标签:set标签、out标签

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="l" uri="http://jsp.veryedu.cn"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 
<l:if test=""></l:if>
 
<!-- 标签的构成:开始标签,标签体,结束标签 -->
<a>标签语言的特点</a>
 
空标签
<!-- 有没有内容 -->
<br>
<hr>
 
UI标签
<table>
<tr></tr>
</table>
<input>
 
控制标签
<c:if test="true">输出</c:if>
<c:if test="false">不输出</c:if>
 
<c:if test="false"></c:if>
 
数据标签
<c:set var="name" value="zs"></c:set>
<c:out value="${name }"></c:out>
</body>
</html>

 

二、自定义标签的开发及步骤

继承BodyTagSupport类------>打开标签库描述文件(tld)------>J输入taglib指令导入标签库

<?xml version="1.0" encoding="UTF-8" ?>
 
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    
  <description>lsy 1.1 core library</description>
  <display-name>lsy core</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>lsy</short-name>
  <uri>http://jsp.veryedu.cn</uri>
 
  <validator>
    <description>
        Provides core validation features for JSTL tags.
    </description>
    <validator-class>
        org.apache.taglibs.standard.tlv.JstlCoreTLV
    </validator-class>
  </validator>
 
  <tag>
    
    <name>demo1</name>
    <tag-class>com.lsy.tag.Demo1</tag-class>
    <body-content>JSP</body-content>
   
  </tag>
  
  <tag>
    
    <name>demo2</name>
    <tag-class>com.lsy.tag.Demo2</tag-class>
    <body-content>JSP</body-content>
   
  </tag>
  
  <tag>
    
    <name>demo3</name>
    <tag-class>com.lsy.tag.Demo3</tag-class>
    <body-content>JSP</body-content>
   
  </tag>
	
	
	<tag>
    
    <name>if</name>
    <tag-class>com.lsy.tag.IfTag</tag-class>
    <body-content>JSP</body-content>
   <attribute>
   <!-- 自定义标签的成员变量名称 -->
   <name>test</name>
   <!-- 该成员变量是否必传 -->
   <required>false</required>
   <!-- 是否支持el表达式 -->
   <rtexprvalue>false</rtexprvalue>
   </attribute>
  </tag>
  
  <tag>
    
    <name>set</name>
    <tag-class>com.lsy.tag.SetTag</tag-class>
    <body-content>JSP</body-content>
   <attribute>
   <!-- 自定义标签的成员变量名称 -->
   <name>var</name>
   <!-- 该成员变量是否必传 -->
   <required>true</required>
   <!-- 是否支持el表达式 -->
   <rtexprvalue>false</rtexprvalue>
   </attribute>
   <attribute>
   <name>value</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
   </attribute>
  </tag>
  
  <tag>
    
    <name>out</name>
    <tag-class>com.lsy.tag.OutTag</tag-class>
    <body-content>JSP</body-content>
   <attribute>
   <!-- 自定义标签的成员变量名称 -->
   <name>var</name>
   <!-- 该成员变量是否必传 -->
   <required>true</required>
   <!-- 是否支持el表达式 -->
   <rtexprvalue>true</rtexprvalue>
   </attribute>
  
  </tag>
  
 <tag>
    
    <name>forEach</name>
    <tag-class>com.lsy.tag.ForeachTag</tag-class>
    <body-content>JSP</body-content>
   <attribute>
   <!-- 自定义标签的成员变量名称 -->
   <name>var</name>
   <!-- 该成员变量是否必传 -->
   <required>true</required>
   <!-- 是否支持el表达式 -->
   <rtexprvalue>false</rtexprvalue>
   </attribute>
  <attribute>
  <name>items</name>
  <required>true</required>
  <rtexprvalue>true</rtexprvalue>
  </attribute>
  </tag>
 
 
</taglib>

 

1、标签开发的三条路线

①、doStartTag——SKIP_BODY——doEndTag

②、doStartTag——EVAL_BODY_INCLUDE——doAfterBody——EVAL_PAGE——doEndTag

③、doStartTag——EVAL_BODY_INCLUDE——doAfterBody——EVAL_BODY_AGAIN(N次)——doEndTag

2、五种返回值

①、SKIP_BODY

②、EVAL_BODY_INCLUDE

③、EVAL_BODY_AGAIN

④、EVAL_PAGE

⑤、SKIP_PAGE

第一条论证
 

package com.lsy.tag;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
 
/**
 * 三种路线
 * 1.doStartTag--->skipBody----->doEndBody
 * 2.doStartTag--->EVAL_BODY_INCLUDE----->doAfterBody----->EVAL_PAGE----->doEndTag
 * 3.doStartTag--->EVAL_BODY_INCLUDE----->doAfterBody----->EVAL_BODY_AGAIN----->doAfterBody
 * 
 * 
 * 6个例子
 * 第一个例子,论证这三条路线的执行顺序(Demo1.java,Demo2.java,Demo3.java)
 * 预测结果:在jsp页面中通过l:demo1使用自定义标签,后台打印语句一下语句,那么说明
 * 第一条的正确性
 * @author zjjt
 *
 */
public class Demo1 extends BodyTagSupport{
 
	
	@Override
	public int doStartTag() throws JspException {
		System.out.println("Demo1_doStartTag进来了");
//		return super.doStartTag();
		return SKIP_BODY;
	}
	
	@Override
	public int doEndTag() throws JspException {
		System.out.println("Demo1_doEndTag进来了");
		return super.doEndTag();
	}
}

 第二条论证

package com.lsy.tag;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
 
/**
 * 三种路线
 * 1.doStartTag--->skipBody----->doEndBody
 * 2.doStartTag--->EVAL_BODY_INCLUDE----->doAfterBody----->EVAL_PAGE----->doEndTag
 * 3.doStartTag--->EVAL_BODY_INCLUDE----->doAfterBody----->EVAL_BODY_AGAIN----->doAfterBody
 * 
 * 
 * 6个例子
 * 第一个例子,论证这三条路线的执行顺序(Demo1.java,Demo2.java,Demo3.java)
 * 
 * @author zjjt
 *
 */
public class Demo2 extends BodyTagSupport{
 
	
	@Override
	public int doStartTag() throws JspException {
		System.out.println("Demo2_doStartTag进来了");
//		return super.doStartTag();
		return EVAL_BODY_INCLUDE;
	}
	
	@Override
	public int doAfterBody() throws JspException {
		System.out.println("Demo2_doAfterBody进来了");
		return super.doAfterBody();
	}
	
	@Override
	public int doEndTag() throws JspException {
		System.out.println("Demo2_doEndTag进来了");
		return super.doEndTag();
	}
}

第三条论证

package com.lsy.tag;
 
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
 
/**
 * 三种路线
 * 1.doStartTag--->skipBody----->doEndBody
 * 2.doStartTag--->EVAL_BODY_INCLUDE----->doAfterBody----->EVAL_PAGE----->doEndTag
 * 3.doStartTag--->EVAL_BODY_INCLUDE----->doAfterBody----->EVAL_BODY_AGAIN----->doAfterBody
 * 
 * 
 * 6个例子
 * 第一个例子,论证这三条路线的执行顺序(Demo1.java,Demo2.java,Demo3.java)
 * 预测结果,doAfterBody会被反复执行
 * @author zjjt
 *
 */
public class Demo3 extends BodyTagSupport{
 
	
	@Override
	public int doStartTag() throws JspException {
		System.out.println("Demo3_doStartTag进来了");
//		return super.doStartTag();
		return EVAL_BODY_INCLUDE;
	}
	
	@Override
	public int doAfterBody() throws JspException {
		System.out.println("Demo3_doAfterBody进来了");
		return EVAL_BODY_AGAIN;
	}
	
	@Override
	public int doEndTag() throws JspException {
		System.out.println("Demo3_doEndTag进来了");
		return super.doEndTag();
	}
}
 

 四  相关标签(自制)

<%@page import="com.lsy.tag.User"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="l" uri="http://jsp.veryedu.cn"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<l:demo1>随便来根烟</l:demo1>
<l:demo2>demo2</l:demo2>
<l:demo3>demo3</l:demo3>
 
<l:set var="" value=""></l:set>
<l:out var=""></l:out>
<l:if></l:if>
 
<%
List  users=new ArrayList<>();
users.add(new User("u001","zs"));
users.add(new User("u002","ls"));
users.add(new User("u003","ww"));
users.add(new User("u004","zl"));
request.setAttribute("users", users);
%>
<l:forEach items="${users }" var="user"></l:forEach>
</body>
</html>

里面传入了user类进行测试

user类

package com.lsy.tag;
 
public class User {
	private String id;
	private String name;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + "]";
	}
	public User(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public User() {
		// TODO Auto-generated constructor stub
	}
}

 tld文件

<tag>
    
    <name>if</name>
    <tag-class>com.lsy.tag.IfTag</tag-class>
    <body-content>JSP</body-content>
   <attribute>
   <!-- 自定义标签的成员变量名称 -->
   <name>test</name>
   <!-- 该成员变量是否必传 -->
   <required>false</required>
   <!-- 是否支持el表达式 -->
   <rtexprvalue>false</rtexprvalue>
   </attribute>
  </tag>

下面还有别的,就不分开了,整合在一起了

这个是l:set标签
<tag>
    
    <name>set</name>
    <tag-class>com.lsy.tag.SetTag</tag-class>
    <body-content>JSP</body-content>
   <attribute>
   <!-- 自定义标签的成员变量名称 -->
   <name>var</name>
   <!-- 该成员变量是否必传 -->
   <required>true</required>
   <!-- 是否支持el表达式 -->
   <rtexprvalue>false</rtexprvalue>
   </attribute>
   <attribute>
   <name>value</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
   </attribute>
  </tag>
  
这个是l:out标签
  <tag>
    
    <name>out</name>
    <tag-class>com.lsy.tag.OutTag</tag-class>
    <body-content>JSP</body-content>
   <attribute>
   <!-- 自定义标签的成员变量名称 -->
   <name>var</name>
   <!-- 该成员变量是否必传 -->
   <required>true</required>
   <!-- 是否支持el表达式 -->
   <rtexprvalue>true</rtexprvalue>
   </attribute>
  
  </tag>
  
这个是l:forEach标签
 <tag>
    
    <name>forEach</name>
    <tag-class>com.lsy.tag.ForeachTag</tag-class>
    <body-content>JSP</body-content>
   <attribute>
   <!-- 自定义标签的成员变量名称 -->
   <name>var</name>
   <!-- 该成员变量是否必传 -->
   <required>true</required>
   <!-- 是否支持el表达式 -->
   <rtexprvalue>false</rtexprvalue>
   </attribute>
  <attribute>
  <name>items</name>
  <required>true</required>
  <rtexprvalue>true</rtexprvalue>
  </attribute>
  </tag>

标签:BODY,标签,-----,EVAL,doStartTag,jsp,public
来源: https://blog.csdn.net/lszzz_/article/details/120703186

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有