多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
*** [jstl下载](https://pan.baidu.com/s/1ka9vyxk_o0NVpYUMrBwkmA) *** JavaServer Pages Standard Tag Library (1.1 ) ,它的中文名称为 JSP 标准标签函数库。JSTL 是一个标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML 文件剖析、数据库查询及国际化和文字格式标准化的应用等。从表 7-1 可以知道,JSTL 所提供的标 签函数库主要分为五大类: (1)核心标签库 (Core tag library) (2)I18N 格式标签库 (I18N-capable formatting tag library) (3)SQL 标签库 (SQL tag library) (4)XML 标签库 (XML tag library) (5)函数标签库 (Functions tag library) 表 。 ![](https://box.kancloud.cn/0b256f9edab5416b5c4bdc128737539b_930x195.png) ## 安装 直接把JSTL有关的两个jar包,拷贝进lib目录下 然后在jsp页面上添加指令,就可以使用了 ~~~ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ~~~ ## 功能 ![](https://box.kancloud.cn/d2e0d30e6923dda8247acf2f3e2c0913_931x538.png) #### 表达式操作 <c:out> ![](https://box.kancloud.cn/485c77e885ef245a476fee8ba7039df5_571x166.png) value属性相对重要,其他两个作为了解 ~~~ <h4>c:out</h4> <% request.setAttribute("book", "<<Java>>"); %> // 把<>当成; 标签,无法正常进行解析 book:${ requestScope.book } <br> book:<c:out value="${ requestScope.book }" default="NoBook"></c:out> ~~~ <c:set> <c:set>主要用来将变量储存至 JSP 范围中或是 JavaBean 的属性中。 ![](https://box.kancloud.cn/0fec146330e5b47252cf058e2e89890e_865x249.png) ~~~ <c:set var="name" value="neusoft" scope="page"></c:set> // 两者等效 <% pageContext.setAttribute("name", "neusoft"); %> name:${ pageScope.name } ~~~ ~~~ <% Customer customer = new Customer(); customer.setId(1001); request.setAttribute("cus", customer); %> ID:${ requestScope.cus.id } <c:set target="${ requestScope.cus }" property="id" value="1002"></c:set> ID:${ requestScope.cus.id } ~~~ <c:remove> <c:remove>主要用来移除变量。 ~~~ <c:set value="1999-09-09" var="date" scope="session"></c:set> date: ${ sessionScope.date } <c:remove var="date" scope="session"/> date: ${ sessionScope.date } ~~~ *** #### 流程控制 <c:if> <c:if>的用途就和我们一般在程序中用的 if 一样 ![](https://box.kancloud.cn/52c7b935eb30e3fdf7dfb5a54012bfe2_698x179.png) ~~~ <c:set value="33" var="age" scope="session"></c:set> <!-- 没有else,但能储存结果 --> <c:if test="${ sessionScope.age > 18 }">成年人</c:if> <c:if test="${ sessionScope.age > 18 }" var="isAdult" scope="session"></c:if> isAdult:<c:out value="${ sessionScope.isAdult }"></c:out> ~~~ <c:choose> <c:choose>本身只当做 <c:when> 和 <c:otherwise> 的父标签。 <c:when> 和 <c:otherwise>也不能脱离<c:choose>。 <c:otherwise>必须在<c:when>之后使用。 ~~~ <c:choose> <c:when test="${param.age > 60 }"> 老年 </c:when> <c:when test="${param.age > 40 }"> 中年 </c:when> <c:when test="${param.age > 18 }"> 青年 </c:when> <c:otherwise> 未成年 </c:otherwise> </c:choose> ~~~ *** #### 迭代操作 **<c:forEach>** <c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。 ![](https://box.kancloud.cn/3b21ede43f9586fe39e6fa0215e58908_929x477.png) ~~~ <c:forEach begin="1" end="10" step="3" var="i"> ${ i } -- </c:forEach> ~~~ 遍历Collection(数组也一样) ~~~ <% List<Customer> list = new ArrayList<Customer>(); list.add(new Customer(1001,"leo1","sheyang1","19012345678")); list.add(new Customer(1002,"leo2","sheyang2","19012345678")); list.add(new Customer(1003,"leo3","sheyang3","19012345678")); list.add(new Customer(1004,"leo4","sheyang4","19012345678")); list.add(new Customer(1005,"leo5","sheyang5","19012345678")); request.setAttribute("list", list); %> <c:forEach items="${ requestScope.list }" var="customer"> ${ customer.id } --${ customer.name } --${ customer.address } --${ customer.phone }<br><br> </c:forEach> ~~~ ~~~ // begin从0开始,step为步长,end为到哪结束,这样只能遍历出3条记录 <c:forEach items="${ requestScope.list }" var="customer" begin="0" step="2" end="4"> ${ customer.id } --${ customer.name } --${ customer.address } --${ customer.phone }<br><br> </c:forEach> ~~~ 遍历Map集合 ~~~ <% Map<String,Customer> map = new HashMap<String,Customer>(); map.put("A",new Customer(1001,"leo1","sheyang1","19012345678")); map.put("B",new Customer(1002,"leo2","sheyang2","19012345678")); map.put("C",new Customer(1003,"leo3","sheyang3","19012345678")); map.put("D",new Customer(1004,"leo4","sheyang4","19012345678")); map.put("E",new Customer(1005,"leo5","sheyang5","19012345678")); request.setAttribute("map", map); %> <c:forEach items="${ requestScope.map }" var="customer"> ${ customer.key } --- ${ customer.value.id },${ customer.value.name },${ customer.value.address },${ customer.value.phone }<br><br> </c:forEach> ~~~ 遍历数组 ~~~ <% String str[] = {"aaa","bbb","ccc"}; // 一定要在某一个域对象当中,否则拿不到 request.setAttribute("names", str); %> <c:forEach items="${ requestScope.names }" var="name">${ name }--</c:forEach> ~~~ <c:forTokens> 类似于String类的split方法 ~~~ <% String str = "a,b,c,d,e"; request.setAttribute("str", str); %> <c:forTokens items="${ str }" delims="," var="str">${ str }<br></c:forTokens> ~~~ *** #### URL操作 <c:import> <c:import> 可以把其他静态或动态文件包含至本身 JSP 网页。 ~~~ <c:import url="http://www.baidu.com"></c:import> ~~~ <c:redirect> <c:redirect>使当前JSP页面重定向到指定的页面(因为是交于服务器解析,所以这里的/代表的是WEB应用根目录) ~~~ <c:redirect url="/link.jsp"></c:redirect> ~~~ <c:url> <c:url>可以产生一个url地址,可以根据Cookie是否可用,智能进行URL重写,对Get请求参数进行编码 ~~~ <h1>JSTL Page</h1> <c:url value="/link.jsp" var="testurl" scope="page"> <c:param name="name" value="东软睿道"></c:param> </c:url> url:${ testurl } ~~~