javaee之标签的运用

在javaee中,需要了解的还有其丰富的核心标签库,包括c标签、struts标签....

现在先来了解标签的底层机制:

package gz.itcast.tags.cases;

import java.io.IOException;

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

//自定义的标签需要继承SimpleTagSupport接口,并且实现doTag()方法
public class WhenTag extends SimpleTagSupport{
	private boolean test;
	public void setTest(boolean test) {
		this.test = test;
	}


	@Override
	public void doTag() throws JspException, IOException {
		//根据test的值判断是否显示标签内容
		
		if(test){
<span style="white-space:pre">			</span>//通过getJspBody()在自定义标签内写出数据
			this.getJspBody().invoke(null);
		}
		
		//得到父标签对象
		ChooseTag parent = (ChooseTag)this.getParent();
		parent.setFlag(test);
		
	}
}

package gz.itcast.tags.cases;

import java.io.IOException;

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

//登录UI界面的标签
public class LoginUITag extends SimpleTagSupport{
	private String name;
	private String password;
	
	//用于给属性赋值的
	public void setName(String name) {
		this.name = name;
	}
	public void setPassword(String password) {
		this.password = password;
	}


	@Override
	public void doTag() throws JspException, IOException {
		
		String html = "";
		html += "<table border='1' width='300px'>";
		html += "<tr>";
		html += "<td>用户名</td>";
		html += "<td><input type='text' name='"+name+"'/></td>";
		html += "</tr>";
		html += "<tr>";
		html += "<td>密码</td>";
		html += "<td><input type='password' name='"+password+"'/></td>";
		html += "</tr>";
		html += "<tr>";
		html += "<td colspan='2' align='center'><input type='submit' value='登录'/><input type='reset' value='重置'/></td>";
		html += "</tr>";
		html += "</table>";
		
<span style="white-space:pre">		</span>//通过getJspContext()方法可以得到PageContext对象,并可以得到其他的对象和方法
		this.getJspContext().getOut().write(html);
	}
}

除了定义完doTag方法以后,还需要在web-inf的目录下创建一个.tld文件,该文件是一个自定义标签的配置文件,每一个自定义的标签都需要在该文件进行配置才能使用,如下就是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/j2ee/dtd/web-jsptaglibrary_1_2.dtd">
<!-- 标签声明文件 -->
<!-- 标签库 -->
<taglib>

  <!-- 标签库的版本:不改 -->
  <tlib-version>1.0</tlib-version>
  <!-- 运行的jsp版本 :不改-->
  <jsp-version>1.2</jsp-version>
  <!-- 在jsp页面上访问标签库的前缀 建议名称 -->
  <short-name>itcast</short-name>
  <!-- 在jsp页面导入标签库时的唯一的名称(路径) -->
  <uri>http://www.itcast.cn</uri>

  <!-- 声明一个标签 -->
  <tag>
  	<!-- 标签名称 -->
    <name>showip</name>
    <!-- 指定标签的类全名(用于找到标签处理类) -->
    <tag-class>gz.itcast.tags.ShowIPTag</tag-class>
    <!-- 标签内容类型 -->
    <body-content>scriptless</body-content>
  </tag>

	<tag>
		<name>demo1</name>
		<tag-class>gz.itcast.tags.Demo1Tag</tag-class>
		<body-content>scriptless</body-content>
	</tag>
	
	<tag>
		<name>demo2</name>
		<tag-class>gz.itcast.tags.Demo2Tag</tag-class>
		<body-content>scriptless</body-content>
	</tag>

	<tag>
		<name>demo3</name>
		<tag-class>gz.itcast.tags.Demo3Tag</tag-class>
		<body-content>scriptless</body-content>
		<!-- 声明一个属性 -->
		<attribute>
			<name>num</name>
			<!-- 是否必须填写 -->
			<required>false</required>
			<!-- 是否支持EL表达式 -->
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	
	
	<tag>
		<name>demo4</name>
		<tag-class>gz.itcast.tags.Demo4Tag</tag-class>
		<body-content>scriptless</body-content>
	</tag>
	
	
	<tag>
		<name>loginUI</name>
		<tag-class>gz.itcast.tags.cases.LoginUITag</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>name</name>
			<required>true</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
		<attribute>
			<name>password</name>
			<required>true</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
	</tag>
	
	
	<tag>
		<name>if</name>
		<tag-class>gz.itcast.tags.cases.IfTag</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>test</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	
	<tag>
		<name>when</name>
		<tag-class>gz.itcast.tags.cases.WhenTag</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>test</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
	
	<tag>
		<name>otherwise</name>
		<tag-class>gz.itcast.tags.cases.OtherwiseTag</tag-class>
		<body-content>scriptless</body-content>
	</tag>
	
	<tag>
		<name>choose</name>
		<tag-class>gz.itcast.tags.cases.ChooseTag</tag-class>
		<body-content>scriptless</body-content>
	</tag>
	
	<tag>
		<name>forEach</name>
		<tag-class>gz.itcast.tags.cases.ForEachTag</tag-class>
		<body-content>scriptless</body-content>
		<attribute>
			<name>items</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
		</attribute>
		<attribute>
			<name>var</name>
			<required>true</required>
			<rtexprvalue>false</rtexprvalue>
		</attribute>
	</tag>
</taglib>



javaee自带的标签c标签,使用c标签需要导入该标签的uri

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>    //这个是导入的标签的地址
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>核心标签库</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  <%--数据操作: --%>
  
  <%--c:set :保存数据到域对象中
  	page: 默认  pageContext
  	request: 
  	session
  	application
  --%>
  
  <%--<c:set value="狗娃" var="name" scope="request"></c:set> --%>
  <%--
  	pageContext.setAttribute("name","狗娃");
   --%>
  
  ${name}
  
  <hr/>
  
  <%-- c:out: 从域对象中取出数据
  	default: 默认值,当没有数据时生效
  	escapeXml: 是否需要对其内容进行转义  
   --%>
  <c:out value="${name}" default="<h3>标题</h3>" escapeXml="false"></c:out>
  
  
  <hr/>
  
  <%-- 条件判断 --%>
  
  <%--c:if --%>
  <c:if test="false">
  	是否被显示
  </c:if>
  
  <%--c:choose + c:when + c:othwise --%>
  <c:choose>
  	<c:when test="false">
  		没有登录
  	</c:when>
  	<c:otherwise>
  		登录成功了
  	</c:otherwise>
  </c:choose>
  <hr/>
  <%--循环 --%>
  
  <%--c:forEach:循环集合或者数组 --%>
  <%
  	List<String> list = new ArrayList<String>();
  	list.add("eric");
  	list.add("rose");
  	list.add("lucy");
  	request.setAttribute("list", list);
   %>
   <%--
   itmes: 需要遍历的数据
   var: 每个对象的名称(使用时)
   begin: 从哪个开始
   end: 到哪个结束
   step:每次跳过几个
    --%>
   <c:forEach items="${list}" var="name">
   		姓名:${name}<br/>
   </c:forEach>
   
   <hr/>
   
  <%
  	Map<String,String> map = new HashMap<String,String>();
  	map.put("s1", "狗娃");
  	map.put("s2", "狗蛋");
  	map.put("s3", "狗剩");
  	request.setAttribute("map", map);
   %>
	<c:forEach items="${map }" var="entry">
		key: ${entry.key },value: ${entry.value}<br/>
	</c:forEach>  
  
  
  <hr/>
  
  <%--c:forTokens :循环特殊字符串--%>
  <c:set value="java-net-ios-php" var="course"></c:set>
  
  <c:forTokens items="${course}" delims="-" var="c">
  	课程:${c}<br/>
  </c:forTokens>
  
  
  <%-- c:redirect --%>
  <%
  	//response.sendRedirect(request.getContextPath()+"/target.jsp");
   %>
   <%--
   url: 自动带上项目名称
    --%>
  <%--<c:redirect url="/target.jsp"></c:redirect> --%>
  
  
  <%-- c:url: 简化路径写法 --%>
  <a href="<c:url value="/target.jsp"/>">跳转</a>
 
  
  </body>
</html>

通过javaee的标签,以后能够在页面尽可能的不写入java脚本代码,通过el表达式和标签的使用能够取代之

javaee自带的标签c标签,使用c标签需要导入该标签的uri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值