在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){
//通过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 += "";
html += "";
html += "用户名 ";
html += " ";
html += " ";
html += "";
html += "密码 ";
html += " ";
html += " ";
html += "";
html += " ";
html += " ";
html += "
";
//通过getJspContext()方法可以得到PageContext对象,并可以得到其他的对象和方法
this.getJspContext().getOut().write(html);
}
}
除了定义完doTag方法以后,还需要在web-inf的目录下创建一个.tld文件,该文件是一个自定义标签的配置文件,每一个自定义的标签都需要在该文件进行配置才能使用,如下就是tld文件的具体配置
1.0
1.2
itcast
http://www.itcast.cn
showip
gz.itcast.tags.ShowIPTag
scriptless
demo1
gz.itcast.tags.Demo1Tag
scriptless
demo2
gz.itcast.tags.Demo2Tag
scriptless
demo3
gz.itcast.tags.Demo3Tag
scriptless
num
false
true
demo4
gz.itcast.tags.Demo4Tag
scriptless
loginUI
gz.itcast.tags.cases.LoginUITag
scriptless
name
true
false
password
true
false
if
gz.itcast.tags.cases.IfTag
scriptless
test
true
true
when
gz.itcast.tags.cases.WhenTag
scriptless
test
true
true
otherwise
gz.itcast.tags.cases.OtherwiseTag
scriptless
choose
gz.itcast.tags.cases.ChooseTag
scriptless
forEach
gz.itcast.tags.cases.ForEachTag
scriptless
items
true
true
var
true
false
javaee自带的标签c标签,使用c标签需要导入该标签的uri
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> //这个是导入的标签的地址
核心标签库
<%--数据操作: --%>
<%--c:set :保存数据到域对象中
page: 默认 pageContext
request:
session
application
--%>
<%-- --%>
<%--
pageContext.setAttribute("name","狗娃");
--%>
${name}
<%-- c:out: 从域对象中取出数据
default: 默认值,当没有数据时生效
escapeXml: 是否需要对其内容进行转义
--%>
<%-- 条件判断 --%>
<%--c:if --%>
是否被显示
<%--c:choose + c:when + c:othwise --%>
没有登录
登录成功了
<%--循环 --%>
<%--c:forEach:循环集合或者数组 --%>
<%
List list = new ArrayList();
list.add("eric");
list.add("rose");
list.add("lucy");
request.setAttribute("list", list);
%>
<%--
itmes: 需要遍历的数据
var: 每个对象的名称(使用时)
begin: 从哪个开始
end: 到哪个结束
step:每次跳过几个
--%>
姓名:${name}
<%
Map map = new HashMap();
map.put("s1", "狗娃");
map.put("s2", "狗蛋");
map.put("s3", "狗剩");
request.setAttribute("map", map);
%>
key: ${entry.key },value: ${entry.value}
<%--c:forTokens :循环特殊字符串--%>
课程:${c}
<%-- c:redirect --%>
<%
//response.sendRedirect(request.getContextPath()+"/target.jsp");
%>
<%--
url: 自动带上项目名称
--%>
<%-- --%>
<%-- c:url: 简化路径写法 --%>
">跳转