JSTL概述:
apache的东西,依赖EL;
使用jstl需要导入jstl1.2.jar
四大库:
core :核心库
fmt :格式化日期、数字
sql :过时
xml: 过时
2、导入标签库
* jar包
*在jsp页面中,<%@taglib prefix="前缀" uri="路径"%>
======================================================
core 标签库常用标签(c标签)
1、out和set
<c:out value="aaa"/>
<c:out value="${aaa}"/>
<c:out value="${aaa}" default="bbb"/>
<c:out value="${aaa}" default="bbb" escapeXml="true"/> 默认值为true表示转义;
<c:set var="name" value="value" scope="request"/>
var:变量名 value:变量值 scope:设置域page/request/session/application如果不申明默认为page
2、remove
<c:remove var="a"/>
scope:如果不写默认删除所有域的变量名为a的值,如果指定就只删除指定的;
3、url
value :指定一个路径!他会在路径前面自动添加项目名。
<c:url value="/index.jsp"> 它会输出/day13_1/index.jsp
子标签:<c:param> 用来给url后面添加参数 例如:
<c:url value="/index.jsp">
<c:param name="username" value="zhangsan"/>
</c:url>
结果为:/day13_1/index.jsp?username=%ED%2c%d3%2D%4F 会进行url编码
var:一旦添加这个属性,url不会输出到页面而是添加到域中进行保存;
scope:与var一起使用,用来保存url的指定域
4、if
<c:if test="boolean值"> 当test值为true时,执行下面语句
<c:set var="a" value="hello" />
<c:if test="${not empty a}">
<c:if>
5、choose
<c:choose>
<c:when tedt="">...</c:when>
<c:when tedt="">...</c:when>
<c:when tedt="">...</c:when>
<c:otherwise>.....</c:otherwise>
</c:choose>
6、forEach
它用来循环遍历数组和集合,它还可以来计数方式的循环!
***计数方式:
<c:forEach var="i" begin="1" end="10" step="2"> 相当于i>=1 i<=10 step="步长"
${i}<br/>
</c:forEach>
var = 循环变量
begin=设置循环变量从几开始
end=设置循环变量到几结束
step=设置步长 step默认为1
***遍历数组和集合:
1、创建数组
<%
String[] str = {"name","value"}
request.setAttribute("arr",str);
%>
2、遍历数组
<c:forEach items="${str}" var="s">
${s}<br/>
</c:forEach>
items:要遍历的数组或者集合
var :定义遍历的每个成员
forEach循环状态:
可以使用varStatus来创建循环状态变量!
count:当前已遍历元素个数
last:当前循环是否为最后一圈
first:是否为第一个元素,第一圈
index:当前元素下标
current:当前对象
<%
ArrayList<String>list= new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
pageContext.setAttribute("list",list);
%>
<c:forEach items="${list}" var="ele" varStatus="vs">
${vs.index}${vs.count}${vs.first}${vs.last}${vs.current}
</c:forEach>
***fmt库:
格式化库
先导入/jsp/jstl/fmt标签库
1、格式化日期
<%
Date date = new Date();
request.setAttribute("date",date);
%>
<fmt:formatDate value="${requestScope.date}" pattern="YYYY-MM-DD HH:MM:SS"/>
value 是一个Date类变量
pattern 是输出的日期格式
2、格式化数字
<%
request.setAttribute("num1",3.1415926);
%>
<fmt:Number value="${requestScope.num1}" pattern="0.00"/>
pattern 默认小数点位数,并默认四舍五入,缺位会以0补位
<fmt:Number value="${requestScope.num1}" pattern="#.##"/>
区别在于不补位,都四舍五入;
***自定义标签:
1、标签处理类(标签也是一个对象,那么就需要先有类)
2、tld文件,他是一个xml
3、页面中导入tld文件位置<%@ taglib prefix="" uri="tld真实路径"%>
*标签处理类
早期javaee提供interface Tag,后来有了很多实现类,为了操作方便sun公司提供了interface SimpleTag;
JspTag 是Tag和SimpleTag的父亲
我们用的是SimpleTag,方法如下
void doTag() :每次执行标签时,都会调用这个方法;
JspTag getParent():返回父标签
void setJspBody(JspFragment jspbody):设置标签体
void setJspContext(JspContext pc) :设置标签上下文对象 PageContext是JspContext的儿子
void setParent():设置父标签
这些方法都是TOMcat自己调用,getParent()方法我们自己调用,但是基本不使用;
所有的setxxxxx方法都会在doTag方法之前被调用;所以在doTag中就可以使用tomcat传递过来的对象了!
*配置TLD文件:
tld文件一般都放在WEB-INF之下,这样保证安全
*模板可以去core标签的tld文件里面借
<tag>
<name>mytag1</name> //指定标签的名称
<tag-class>cn.itcast.tag.MyTag1</tag-class> //指定标签类位置
<body-content>empty</body-content> //指定标签体类型,我们这里使用空标签!例如:<br/>自己开始自己结束
</tag>
为了方便我们可以使用实现类SimpleTagSupport,这个类已经自动帮我们保存了tomcat传递来的东西,并提供了get方法