栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

jsp标签

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jsp标签

目录

一,标签的语言特点

二,自定义标签的开发一使用步骤

三,标签生命周期

四,z:if标签

五,z:set标签z:out标签


一,标签的语言特点

(1)形式:<开始标签 属性="属性值">标签体

(2)分类

空标签        例如:br,hr

ui标签         例如:input,table

控制标签        例如:if.foreach

数据标签        例如:out标签

二,自定义标签的开发一使用步骤

(1)步骤:助手类(继承BodyTagSupport)

package com.dengxiyan.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;


public class DemoTag1 extends BodyTagSupport {

	@Override
	public int doStartTag() throws JspException {
		System.out.println("=================================doStartTag=======================");
		//跳过
		//return SKIP_BODY;
		//return super.doStartTag();
		return EVAL_BODY_INCLUDE;
	}
	
	@Override
	public int doAfterBody() throws JspException {
	System.out.println("=================================doAfterBody=======================");
		return super.doAfterBody();
		//循环
		//return EVAL_BODY_AGAIN;
	}
	
	@Override
	public int doEndTag() throws JspException {
		System.out.println("=================================doEndTag=======================");
		return super.doEndTag();
		//只读取前面的内容
		//return SKIP_PAGE;
	}
}

 

(2)标签库描述文件(tld)

注意:tld文件必须保存在WEB-INF目录或其子目录

 (3)jsp通过taglib指令导入标签库

 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

 (4)实例:将c:if标签换成z:if

<如图所示> 

 

    1. 自定义标签库是与tld文件相关的,也跟tag元素对应的助手类有关
 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://jsp.veryedu.cn" prefix="z" %>




Insert title here



true
false



《bug图》

    2.标签库中的标签与tld中的Tag元素有关(当标签库里没有if标签数时)

 

三,标签生命周期

《周期图如下》

 《jsp界面》

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://jsp.veryedu.cn" prefix="z" %>




Insert title here


xxxx
	true
	false
	
	

 《助手类》

package com.dengxiyan.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;


public class DemoTag1 extends BodyTagSupport {

	@Override
	public int doStartTag() throws JspException {
		System.out.println("=================================doStartTag=======================");
		//跳过
		//return SKIP_BODY;
		//return super.doStartTag();
		return EVAL_BODY_INCLUDE;
	}
	
	@Override
	public int doAfterBody() throws JspException {
	System.out.println("=================================doAfterBody=======================");
		return super.doAfterBody();
		//循环
		//return EVAL_BODY_AGAIN;
	}
	
	@Override
	public int doEndTag() throws JspException {
		System.out.println("=================================doEndTag=======================");
		return super.doEndTag();
		//只读取前面的内容
		//return SKIP_PAGE;
	}
}

<代码分析>

只读取前面部分

@Override
	public int doEndTag() throws JspException {
		System.out.println("=================================doEndTag=======================");
		return super.doEndTag();
		//只读取前面的内容
		//return SKIP_PAGE;
	}

 <效果图>

 

1.有标签体的情况下,默认会调用助手类的dostarttag.doafterbody,doendtag方法

	@Override
	public int doStartTag() throws JspException {
		System.out.println("=================================doStartTag=======================");
	    return super.doStartTag();
	
	}

 

2.如果将dostarttag的返回值改为skip_body,那么doafterbody就不会调用执行(线路一)

通俗点:(将方法的返回值改为跳过,在有标签体的情况下也值调用两个方法)

@Override
	public int doStartTag() throws JspException {
		System.out.println("=================================doStartTag=======================");
		//跳过
		return SKIP_BODY;
	}

《效果图 》

3.如果将dostarttag的返回值改为EVAL_BODY_INCLUDE,那么doafterbody就会调用执行(线路2)

	@Override
	public int doStartTag() throws JspException {
		System.out.println("=================================doStartTag=======================");
		return EVAL_BODY_INCLUDE;
	}
	

 《效果图》

 4.如果将doafterbody的返回值改为EVAL_BODY_again,那么一致调用doafterbody,进入循环(路线3)

<代码演示>

@Override
	public int doAfterBody() throws JspException {
	System.out.println("=================================doAfterBody=======================");
		return super.doAfterBody();
		//循环
		//return EVAL_BODY_AGAIN;
	}

 

<效果图>

四,z:if标签

jsp界面同上

<代码演示>

package com.dengxiyan.tag;


import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class ifTag extends BodyTagSupport {

	private boolean test;
	
	public boolean isTest() {
		return test;
	}

	public void setTest(boolean test) {
		this.test = test;
	}

	
	
	@Override
	public int doStartTag() throws JspException {
		 // 如果满足条件,就打印标签体---》dostatag的返回值eval_body_include
		return test ? EVAL_BODY_INCLUDE : SKIP_BODY;
	}
	
}

 <效果图>

 

五,z:set标签z:out标签

jsp界面同上

《代码演示》

z:set标签助手类

package com.dengxiyan.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;


public class SetTag extends BodyTagSupport {

	private String var;
	private Object value;
	
	
	public String getVar() {
		return var;
	}


	public void setVar(String var) {
		this.var = var;
	}


	public Object getValue() {
		return value;
	}


	public void setValue(Object value) {
		this.value = value;
	}


	@Override
	public int doStartTag() throws JspException {
		//要存储数据要以键值对的方式进行存储:得该标签有两个属性
		pageContext.setAttribute(var, value);
		return super.doStartTag();
	}
	
	
}

z:out标签助手类

1.servlet中后台代码前台输出内容  :out.print
2. 将数据输送到前台:首先拿到输出流

package com.dengxiyan.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;

public class Outtag extends BodyTagSupport {

	private Object value;

	public Object getValue() {
		return value;
	}

	public void setValue(Object value) {
		this.value = value;
	}
	
	@Override
		public int doStartTag() throws JspException {
		JspWriter out = pageContext.getOut();
		try {
			out.print(value);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return super.doStartTag();
		}
}

《效果图》

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/978427.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号