JSTL基础
是java中的一个定制标记库集
实现了jsp页面中的代码复用,基于标签库原理,重复率较高的代码块支持复用,提高效率
书写jsp页面时可读性更强
http://archive.apache.org/dist/
http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
<!—
EL表达式(Expression Language)经常与JSTL配合使用,使得JSP页面更直观,写法更简单
格式:${表达式}
".","[]"运算符:
1.通常情况下是通用的${user.name} 、${user["name"]}
2."[]"还可以用来进行集合元素中的定位${list[0].name、list[1].name}
3.包含特殊字符时必须用"[]",${user["first-name"]}是对的,而${user.first-name}是错误的
4.通过变量动态取值时必须用"[]",${user[param]},"."的写法是${user.name}无法动态取值
JSP内置对象(Page,Request,Session,Application)
EL(PageScope,RequestScope,SessionScope,ApplicationScope)
-->
<!-- EL自动类型转换
如把String转换为int,
String str_num = request.getParameter("num");
int num = Integer.parseInt(str_num);
num+=10;
EL会进行自动类型转换,只需要这样写${param.num + 10}
-->
<!--
EL运算符
算术运算符:+,-,*,/(div),%(mod)
关系运算符:==(eq),!=(ne),<(lt),>(gt),<=(le),>=(ge)
逻辑运算符:&&(and),||(or),!(not)
验证运算符:empty(验证数据是否为空,空返回true,非空返回false)
-->
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- JSTL --> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <jsp:useBean id="person" class="com.wzy.bean.Person"></jsp:useBean> <!-- JSTL --> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>first</title> </head> <body> <c:out value="输出的值(常量)"></c:out> <c:out value="${username}" default="默认值"></c:out><!-- 输出变量,如果为空,则什么都不输出 --><br /> <c:out value="1+2=${1+2}"></c:out> <% String name1 = "xiaoming"; request.setAttribute("username", name1); %> <br /> <c:out value="${empty username }"></c:out><!-- false --> <br /> <% session.setAttribute("value1", "计算结果:"); session.setAttribute("value2", 100); %> <c:out value="<${value1}" default="默认" escapeXml="false"></c:out> <c:out value="${value2}*5="></c:out> <c:out value="${value2*5}>" escapeXml=""></c:out> <!--escapeXml=""或escapeXml="false"都可以进行转义字符操作 escapeXml="true"转义字符失效--> <br> <!-- set标签 1.存值到scope中,可将值以变量形式存放在指定的范围中 --> <br> <c:set var="today" value="12.16" scope="session"></c:set> <c:out value="${today}"></c:out> <br> <c:set var="age" scope="application">20</c:set> <c:out value="${age}"></c:out> <!-- 2.存值到javabean的属性中,需要配合target属性指定对象并且通过property属性指定要赋值给对象中的哪个属性 --> <br> <c:set target="${person}" property="pid" value="01"></c:set> <c:set target="${person}" property="pname">小明</c:set> <c:set target="${person}" property="page" value="21"></c:set> <c:out value="${person.pid}"></c:out> <c:out value="${person.pname}"></c:out> <c:out value="${person.page}"></c:out> <!-- remove标签 , 移除掉某个数据--> <c:set var="removevalue" value="hahahha"></c:set> <c:remove var="removevalue"/> <c:out value="${removevalue}"></c:out><br> <!-- catch标签 ,包含那些容易出错的JSTL标签,相当于javaz中的异常处理try{}catch(){}--> <c:catch var="error"> <c:set target="aa" property="aa"></c:set> </c:catch> <c:out value="${error}"></c:out> <br> <!--if标签 同程序中的if作用相同 test属性用于存放判断的条件,一般使用EL表达式编写 var指定名称用来存放判断的结果类型为true或false scope用来存放var属性存放的范围,不指定为默认的范围 --> <form action="firstDemo.jsp" method="post"> <input type="text" name="score" value="${param.score001}"> <input type="submit" value="提交"> </form> <c:if test="${param.score>=80}" var="result"> <c:out value="您的分数很好"></c:out> </c:if> <c:out value="${result}"></c:out> <br> <!-- choose,when,otherwise 通常这三个标签放在一起配合使用 c:choose嵌套在c:when和c:otherwise外面作为他们的父标签来使用 其中choose和when也可以一起使用 --> <form action="firstDemo.jsp" method="post"> <input type="text" name="score02" value="输入分数"> <input type="submit" value="提交"> </form> <!-- 相当于switch语法 --> <c:choose> <c:when test="${param.score02>=90 && param.score02<=100}"> <c:out value="优秀"></c:out> </c:when> <c:when test="${param.score02>=80 && param.score02<=90}"> <c:out value="良好"></c:out> </c:when> <c:when test="${param.score02>=60 && param.score02<=80}"> <c:out value="及格"></c:out> </c:when> <c:when test="${param.score02>=0 && param.score02<=60}"> <c:out value="不及格"></c:out> </c:when> <c:otherwise> <c:out value="不符合所有的要求"></c:out> </c:otherwise> </c:choose> <br> <!-- forEach 根据循环条件遍历集合(Collection)中的元素 var设定变量名用于存储从集合中取出的元素(必须无默认值) items指定要遍历的集合(必须无默认值) begin、end用于指定遍历的起始位置和终止位置(有默认) step指定循环的步长(有默认) varStatus通过index、count、first、last几个状态值,描述begin和end子集中的元素的状态 --> <% List<String> fruits = new ArrayList<String>(); fruits.add("apple00"); fruits.add("pear01"); fruits.add("orange02"); fruits.add("banana03"); fruits.add("apple04"); fruits.add("pear05"); fruits.add("orange06"); fruits.add("banana07"); request.setAttribute("fruits", fruits); // for (Object f : fruits) { // System.out.print(f); // } %> <!-- 1.全部遍历 --> <c:forEach var="f" items="${fruits }"> <c:out value="${f}"></c:out> </c:forEach> <br> <!-- 2.部分遍历 ,取出第2个到第6个--> <c:forEach var="f" items="${fruits}" begin="1" end="5"> <c:out value="${f}"></c:out> </c:forEach> <br> <!-- 3.部分遍历 ,取出第2个到第6个,指定步长,隔一个输出一个--> <c:forEach var="f" items="${fruits}" begin="1" end="5" step="2"> <c:out value="${f}"></c:out> </c:forEach> <br> <!-- 4.部分遍历 ,取出第3个到第6个,输出元素状态--> <c:forEach var="f" items="${fruits}" begin="2" end="5" varStatus="fru"> <c:out value="${f}的4个属性:"></c:out> <c:out value="index属性(在列表的位置)${fru.index}"></c:out> <c:out value="count属性(输出的位置)${fru.count}"></c:out> <c:out value="first属性(输出的如果的第一个,为true,否则false)${fru.first}"></c:out> <c:out value="last属性(输出的如果的最后一个,为true,否则false)${fru.last}"></c:out> <br> </c:forEach> <br> <!-- forTokens标签,截取字符串 用于浏览字符串,并根据指定的字符串将字符串截取 items指定被迭代的字符串 delims指定使用的分隔符 var指定用来存放遍历到的成员 begin指定变量的开始位置(int型,从取值0开始) end指定遍历结束的位置(int型,默认集合中最后一个元素) step遍历的步长(大于0的整型) varStatus通过index,count,first,last几个状态值,描述begin和end子集中的元素的状态 --> <c:forTokens items="1534-4564-48" delims="-" var="num" > <c:out value="${num}"></c:out><br> </c:forTokens> <br> <!-- import标签 可以把其他静态或动态文件包含到本jsp页面 同jsp:include的区别为:只能包含同一个web应用中的文件。 而c:import可以包含其他web应用的文件,甚至的网络上的资源 url被导入资源的url路径 context相同服务器下其他的web工程,必须以“/”开头 var以String类型存入被包含文件的内容 Scope var变量的jsp范围 charEncoding 被导入文件的编码格式 varReader以Reader类型存储被包含文件内容 --> <!--导入绝对路径--> <c:catch var="err09"> <c:import url="http://www.baidu.co"></c:import> </c:catch> <c:out value="${err09}"></c:out> <!-- 导入相对路径文件 --> <c:catch var="err08"> <c:import url="a.txt" charEncoding="utf-8"></c:import> </c:catch> <c:out value="${err08}"></c:out> <br> <!-- var ,Scope属性 --> <c:catch var="err07"> <c:import url="a.txt" var="a" scope="session" charEncoding="utf-8"></c:import> </c:catch> <c:out value="import标签存储的a字符串变量值为:${sessionScope.a}"></c:out> <c:out value="${err07}"></c:out> <br> <!-- context属性 ,把另一个web下的文件导入到本页面--> <c:catch var="err06"> <c:import url="/err.jsp" context="/StrutsTest" charEncoding="utf-8"></c:import> </c:catch> <c:out value="${err06}"></c:out> <!-- redirect标签,用来实现请求的重定向 同时可以在url中加入指定的参数 url指定重定向页面的地址,可以是一个String类型的绝对地址或相对地址 context用于导入其他web应用中的页面 --> <c:catch var="redirtErr"> <c:redirect url="second.jsp" > <c:param name="username">name</c:param> <c:param name="usepasswd">passwd</c:param> </c:redirect> </c:catch> <c:out value="${redirtErr}"></c:out> <br> <!-- url标签 用于动态生成一个String类型的url,可以同c:param标签共同使用 也可以使用html的a标签实现超链接 value表示url路径值 var将url路径存储在的变量中 scope var变量的范围 --> <c:if test="${1<3 }"> <c:set var="parturl">aa</c:set> </c:if> <c:url value="http://127.0.0.1:8080/${parturl}" var="newurl" scope="session"></c:url> <a href="${ newurl}">动态生成url.....</a> </body> </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title></title> </head> <body> this is ..... <c:out value="${param.username}"></c:out> <c:out value="${param.usepasswd}"></c:out> <c:if test="${1<3}"> <c:set var="parturl">aa</c:set> </c:if> <c:url value="http://127.0.0.1:8080/${parturl}" var="newurl" scope="session"></c:url> <a href="${newurl}">url..</a> <br> <c:out value="你好。hello world字符串 是否包含hello:${fn:contains('你好。hello world','hello') }"></c:out><br> <c:out value="你好。hello world字符串 是否包含aa:${fn:contains('你好。hello world','aa') }"></c:out><br> <c:out value="你好。HELLO world字符串 是否包含hello:${fn:containsIgnoreCase('你好。hello world','hello') }"></c:out><br> <c:out value="你好。HELLO world字符串ld是否在字符串结尾: ${fn:endsWith('你好。hello world','ld') }"></c:out><br> <c:out value="你好。HELLO world字符串你是否在字符串开头: ${fn:startsWith('你好。hello world','你') }"></c:out> <book>escapeXML</book><br> <c:out value="${fn:escapeXml('<book>escapeXML</book>')}"></c:out><br> <c:out value="<book>escapeXML</book>"></c:out><br> <c:out value="hello world中,rl出现的index值: ${fn:indexOf('hello world中','rl')}"></c:out> </body> </html>
本文来自博客园,作者:wzyy,转载请注明原文链接:https://www.cnblogs.com/wwzyy/p/5054843.html