JSTL核心标签库

注意:
使用<%@ taglib uri="" prefiex""%>时:使用Eclipse需要导入jar包,jstl-1.2.jar,myElipse自带

  1. Apache提供的标签库,  
  2. jar包:jstl-1.2.jar,如果傅MyEclipse,它会在我们导入jar包,无需自己导入,如果没有使用MyEclipse那么需要自行导入。  
  3.   
  4. ------------------  
  5.   
  6. 导入JSTL核心标签库  
  7. <%taglib prefix="c" uri="http://java.sun.com/jstl/core"%>  
  8.   
  9.   
  10. <c:set>   
  11. <c:set var="a" value="hello"/> 创建名为a,值为hello的域属性,范围:page  
  12. <c:set var="a" value="hello" scope="session"/> 范围为session  
  13.   
  14. <c:out>  
  15. <c:out value="aaa"/> 输出字符串aaa  
  16. <c:out value="${aaa"/> 输出域属性aaa,其中与${aaa}相同  
  17. <c:out value="${aaa}" default="xxx"/>如果${aaa}不存在,那么输出xxx字符串  
  18. <c:out value="${aaa}" escapeXml="true"/>如果${aaa}中包含特殊字符,那么转义它。这可以防止javascript攻击  
  19.   
  20. <c:remove>  
  21. <c:remove var="a"/> 删除名为a的域属性  
  22. <c:remove var="a" scope="page"/> 删除page域中名为a的域属性  
  23.   
  24. <c:url>  
  25. <c:url value="/AServlet"/> 输出URL:/项目名/AServlet  
  26. <c:url value="/AServlet" var="url" scope="page"/> 把生成的url保存到page域中,而不会输出  
  27. <c:url value="/AServlet">:输出URL:/项目名/AServlet?username=%xx%xx%xx%xx%xx%xx,其中张三会被URL编码  
  28.    <c:param name="username" value="张三"/>  
  29.   </c:url/>  
  30.   
  31. <c:if>  
  32. <c:if test="${条件}"> 当条件为true时执行标签体内容  
  33.     hello  
  34.   </c:if>  
  35.   
  36. <c:choose>  
  37. <c:choose>  
  38.     <c:when test="${条件1}">a</c:when>  
  39.     <c:when test="${条件2}">b</c:when>  
  40.     <c:when test="${条件3}">c</c:when>  
  41.     <c:otherwise>d</c:otherwise>  
  42.   </c:choose>  
  43.   
  44.   等同与:  
  45.   if() {  
  46.   } esle if() {  
  47.   } esle if() {  
  48.   } else if() {  
  49.   } else {  
  50.   }  
  51.   
  52. -------------  
  53.   
  54. <c:forEach>  
  55.   
  56. 可以用来遍历数组、List、Map、  
  57.   
  58. 1. 计数循环  
  59.   
  60. <c:forEach begin="1" end="10" var="i">  
  61.  ${i}  
  62. </c:forEach>  
  63. 等同于  
  64. for(int i = 1; i <= 10; i++) {  
  65.   out.println(i);  
  66. }  
  67.   
  68.   
  69. <c:forEach begin="1" end="10" var="i" step="2">  
  70.  ${i}  
  71. </c:forEach>  
  72. 等同于  
  73. for(int i = 1; i <= 10; i+=2) {  
  74.   out.println(i);  
  75. }  
  76.   
  77. -------------  
  78.   
  79. 2. 遍历数组  
  80.   
  81. <%  
  82. String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};  
  83. pageContext.setAttribute("ns", names);  
  84. %>  
  85. <c:forEach var="item " items="${ns } ">  
  86.     <c:out value="name: ${item } "/><br/>  
  87. </c:forEach>  
  88.   
  89.   
  90. -------------  
  91.   
  92. 3. 遍历List  
  93.   
  94. <%  
  95.     List<String> names = new ArrayList<String>();  
  96.     names.add("zhangSan");  
  97.     names.add("liSi");  
  98.     names.add("wangWu");  
  99.     names.add("zhaoLiu");  
  100.     pageContext.setAttribute("ns", names);  
  101. %>  
  102. <c:forEach var="item" items="${ns }">   
  103.     <c:out value="name: ${item }"/><br/>  
  104. </c:forEach>  
  105.   
  106. -------------  
  107.   
  108. 4. 遍历Map  
  109.   
  110. <%  
  111.     Map<String,String> stu = new LinkedHashMap<String,String>();  
  112.     stu.put("number", "N_1001");  
  113.     stu.put("name", "zhangSan");  
  114.     stu.put("age", "23");  
  115.     stu.put("sex", "male");  
  116.     pageContext.setAttribute("stu", stu);  
  117. %>  
  118. <c:forEach var="item " items="${stu }">  
  119.     <c:out value="${item.key }: ${item.value } "/><br/>  
  120. </c:forEach>  
  121.   
  122.   
  123. -------------  
  124.   
  125. 5. 循环状态对象  
  126.   
  127. 循环状态对象是用来说明循环的状态的,属性如下:  
  128. count:int类型,当前以遍历元素的个数;  
  129. index:int类型,当前元素的下标;  
  130. first:boolean类型,是否为第一个元素;  
  131. last:boolean类型,是否为最后一个元素;  
  132. current:Object类型,表示当前项目。  
  133.   
  134. <c:forEach var="item" items="${ns }" varStatus="vs" >  
  135.     <c:if test="${vs.first } ">第一行:</c:if>  
  136.     <c:if test="${vs.last } ">最后一行:</c:if>  
  137.     <c:out value="第${vs.count } 行: "/>  
  138.     <c:out value="[${vs.index } ]: "/>  
  139.     <c:out value="name: ${vs.current } "/><br/>  
  140. </c:forEach>  
  141.   
  142.   
  143. ------------------  
  144.   
  145. 导入JSTL格式化标签库  
  146.   
  147. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>  
  148.   
  149. <%  
  150.     Date date = new Date();  
  151.     pageContext.setAttribute("d", date);  
  152. %>  
  153. <fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss "/>  
  154.   
  155. ---------  
  156.   
  157. <%  
  158.     double d1 = 3.5;  
  159.     double d2 = 4.4;   
  160.     pageContext.setAttribute("d1", d1);  
  161.     pageContext.setAttribute("d2", d2);  
  162. %>  
  163. <fmt:formatNumber value="${d1 }" pattern="0.00 "/><br/>  
  164. <fmt:formatNumber value="${d2 }" pattern="#.## "/>  
  165.   
  166. * pattern:0.00,表示小数不足两位时,使用0补足两位  
  167. * pattern:#.##,表示小数不足两位时,有几位显示几位,不会补足  
  168.   
  169.   
  170. ============================  
  171. ============================  
  172. ============================  
  173.   
  174.   
  175. 自定义标签  
  176.   
  177. 自定义标签:  
  178.   
  179. 1. 实现Tag接口,即传统标签。不建议使用!  
  180. 2. 实现SimpleTag接口,即简单标签。建议使用!  
  181.   
  182. JavaWeb中还提供了SimpleTagSupport类,继承它要比实现SimpleTag接口方便。  
  183.   
  184. -----------------  
  185.   
  186. 步骤:  
  187. 1. 标签处理类:继承SimpleTagSupport类  
  188. public class HelloTag extends SimpleTagSupport {  
  189.     public void doTag() throws JspException, IOException {  
  190.         // 获取JspContext对象,再获取out对象,再向页面输出  
  191.         // 获取到的JspContext其实就是当前页面的pageContext对象  
  192.         this.getJspContext().getOut().write("<p>Hello SimpleTag!</p>") ;  
  193.     }  
  194. }  
  195.   
  196. 2. 标签描述符文件(tld)  
  197.   
  198. /WEB-INF/tlds/itcast.tld  
  199.   
  200. <?xml version="1.0" encoding="UTF-8"?>  
  201. <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"  
  202.     xmlns:xml="http://www.w3.org/XML/1998/namespace"   
  203.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  204.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  205.                         http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">  
  206.   
  207.     <tlib-version>1.0</tlib-version>   
  208.     <short-name>itcast</short-name>   
  209.     <uri>http://www.itcast.cn/tags</uri>   
  210.     <tag>   
  211.         <name>hello</name> <!--标签名称-->  
  212.         <tag-class>cn.itcast.tag.HelloTag</tag-class> <!--标签处理类名称-->  
  213.         <body-content>empty</body-content> <!--标签体为空,即空标签-->  
  214.     </tag>  
  215. </taglib>  
  216.   
  217. 3. jsp页面中使用自定义标签  
  218.   
  219. <%@ taglib prefix="it"  uri="/WEB-INF/hello.tld"  %>  
  220. ......  
  221. <it:hello/>  
  222.   
  223. ----------------------  
  224.   
  225. 有标签体的标签  
  226.   
  227. 1. 标签处理类  
  228. public class HelloTag extends SimpleTagSupport {  
  229.     public void doTag() throws JspException, IOException {  
  230.         PageContext pc = (PageContext) this.getJspContext();  
  231.         HttpServletRequest req = (HttpServletRequest) pc.getRequest();  
  232.         String s = req.getParameter("exec");  
  233.         if(s != null && s.endsWith("true")) {  
  234.             // 获取标签体对象  
  235.             JspFragment body = this.getJspBody() ;  
  236.             // 执行标签体  
  237.             body.invoke (null);  
  238.         }  
  239.   
  240.     }  
  241. }  
  242.   
  243. 2. tld  
  244.   
  245.     <tag>  
  246.         <name>hello</name>  
  247.         <tag-class>cn.itcast.tags.HelloTag</tag-class>  
  248.         <body-content>scriptless</body-content> <!--标签体内容不可以是java脚本,但可以是el、jstl等-->  
  249.     </tag>  
  250.   
  251. ----------------------  
  252.   
  253. 不执行标签下面的页面内容  
  254.   
  255.     public void doTag() throws JspException, IOException {  
  256.         this.getJspContext().getOut().print("<h1>只能看到我!</h1>");  
  257.         throw new SkipPageException();  
  258.     }  
  259.   
  260. ----------------------  
  261.   
  262. 带有属性的标签  
  263.   
  264. public class IfTag extends SimpleTagSupport {  
  265.     private boolean test;//设置属性,提供getter/setter方法  
  266.     public boolean isTest() {  
  267.         return test;  
  268.     }  
  269.     public void setTest (boolean test) {  
  270.         this.test = test;  
  271.     }  
  272.     @Override  
  273.     public void doTag() throws JspException, IOException {  
  274.         if(test) {//如果test为true,执行标签体内容  
  275.             this.getJspBody().invoke(null);  
  276.         }   
  277.     }  
  278. }  
  279.   
  280.     <tag>   
  281.         <name>if</name>   
  282.         <tag-class>cn.itcast.tag.IfTag</tag-class>   
  283.         <body-content>scriptless</body-content>  
  284.         <!--部署属性-->  
  285.         <attribute>   
  286.             <name>test</name> <!--属性名-->  
  287.             <required>true</required> <!--属性是否为必须的-->  
  288.             <rtexprvalue>true</rtexprvalue> <!--属性值是否可以为EL或JSTL等-->  
  289.         </attribute>   
  290.     </tag>  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值