jstl
依赖el 需要导入jstl-impl.jar
主要掌握:core 和 fmt
导入标签库:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt" %>
core 标签
< c:out value="aaa" default="bbb" escapeXml="true"></c:out>
value 表示输出的值 如果value为null 则输出default里的
escapeXml 转译防止参数里带有脚本等
例如:
<c:out value="<script>alert('hello')</script>" default="bbb" escapeXml="true"></c:out>
其他core标签的方法演示
<c:set var="username" value="ashin" scope="request"></c:set>
类似于:
request.setAttribute("username","ashin");
remove 方法类似 删除域中的对象 如果没有指定哪个域就删除所有域中的
<c:url value="/index.jsp">
<c:param name="name" value="ashin" /> 子标签
</c:url>
指定一个路径 会在路径前自动添加项目名
结果为: /MyTag/index.jsp
与${pagecontext.request.contextPath} 类似,更为简单
url 还有 var 和 scope 属性 结合起来使用把url保存在域中
<c:if test="false">aaaa</c:if>
test 里的参数是true时执行标签体内容 相反则不执行
<c:choose > 类似java的 if/else if / else
<c:when test=""></c:when>
<c:when test=""></c:when>
<c:otherwise></c:otherwise>
</c:choose>
<c:forEach var="i" begin="1" end="10" step="2">
${i } //定义变量i 从1开始 到 10 结束 步长为2 包括头尾 1,10
</c:forEach>
遍历数组:
<c:forEach items="${strs }" var="str">
${str }<br/>
</c:forEach>
循环状态
index 循环元素下标
count 循环元素个数
first 是否是第一个元素
last 是否是最后一个元素
current 当前元素
fmt库
它是格式化库
例子中el表达式的值自行传递
<f:formatDate value="${date }" pattern="yyyy-MM-dd HH:mm:ss"/>
<f:formatNumber value="${num }" pattern="0.00"/>
<f:formatNumber value="${num }" pattern="#.##"/>
上面一个如果小数点后面的最后位是0不保留 下面的保留
自定义标签
1.先创建一个标签类 继承SimpleTagSupport 也可以实现SimpleTag接口
SimpleTagSupport 本身实现了 SimpleTag接口 继承它就只需要重写需要的方法即可 它把tomcat 传递的数据都保存起来了 还提供了get 方法供子类调用
dotag()每次执行标签都会被调用
2.创建一个tld文件里面的配置可以参考core 和fmt 的 c.td f.td
tld文件一般放在web-inf 目录下 这样客户端就访问不到
mytag1是标签名
ta-class:写出指定的标签类
<body-content>基本只用两个选项empty(无标签体) 或者scriptless(只能是el表达式,也可以是其他标签)
<tag>
<name>myTag1</name>
<tag-class>com.ashin.tag.MyTag1</tag-class>
<body-content>empty</body-content>
</tag>
获得一个当前页面的输出流 ,把标签体里的内容输出到页面
该代码应该在doTag()里
Writer out = this.getJspContext().getOut();
this.getJspBody().invoke(out);
在doTag() 里写 throw new SkipPageException()
在jsp页面调用标签时就不会输出后面的标签了
定义标签的属性
给标签类添加属性 只要有set方法就可以了
<attribute>
<name>属性名</name>
</attribute>
第二篇 感觉知识点还是很难记住写博客当复习。