jstl
核心标签——最常用,最重要
格式化标签——sql标签,XML标签
EL(Expression Language):
普通写法:<%=session.getValue("name")%>
EL表达式写法:<c: out value="${sessionScope.name}"/>
EL表达式格式:
-用美元符号“$”定界,内容包括在花括号中;
. 与[] 运算符:
-list[0].price :通过下标获取对象的属性。
-user["sex"] :获取对象user的属性sex。user[sex] :sex在这里是变量,可以是数字下标或属性名称等。
-${user["fisrt-name"]}可以获取特殊字符“-”的属性值。而“.”不可以。
EL隐式对象
2种特殊情况
注意:这里老师的ppt上最后两个函数写的是不对的,应该是startsWith和endsWith
常用核心标签:
EL表达式--empty示例
EL运算符--empty
EL 变量
常用JSTL函数介绍<br> fn:endsWith()<br> fn:contains()<br> fn:containsIgnoreCase()<br> fn:escapeXml() fn:indexOf()
<!-- 不会输出<book>标签 --> <book>书</book> <hr> <!-- 可输出标签但会出现转义问题 --> <c:out value="${fn:escapeXml('<book>书</book>')}"></c:out> <hr> <!-- 可输出标签且不会出现转义问题 --> <c:out value="<book>书</book>"></c:out> <hr> <!-- indexOf函数用法 --> <c:out value="“Hello World”字符串“llo”出现的index值:${fn:indexOf('Hello World','llo')}"></c:out> Ps:如果是xml标签(即使系统不认识),但是也不会输出。
<!-- JSTL函数使用 --> <c:out value="“Hello World”字符串中是否包含“Hello”?${fn:contains('Hello World','Hello')}"></c:out> <hr> <c:out value="“Hello World”字符串中是否包含“ABCD”?${fn:contains('Hello World','ABCD')}"></c:out> <hr> <c:out value="“Hello World”字符串中是否包含“hello”(忽略大小写)?${fn:containsIgnoreCase('Hello World','hello')}"></c:out> <hr> <c:out value="“Hello”是否在“Hello World”字符串开头?${fn:startsWith('Hello World','Hello')}"></c:out> <hr> <c:out value="“world”是否在“Hello World”字符串尾部?${fn:endsWith('Hello World','world')}"></c:out> Ps1:配合使用: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> Ps2:注意(PPT中少了一个“s”):fn:startsWith()和fn:endsWith()。
JSTL标签之url标签 url标签的用法 - 该标签用于动态生成一个String类型的URL,可以同<c:param>标签共同使用,也可以使用html的<a>标签实现超链接 .value表示url路径值 .var 将url路径存储在变量中 .scope var变量的范围 <!-- url标签用法 --> <c:if test="${1<3 }"> <c:set var="partUrl">firstDemo.jsp</c:set> </c:if> <c:url value="http://localhost:8080/Hello/${partUrl }" var="newUrl"></c:url> <a href="${newUrl }">newUrl</a> Ps:输入html标签里的属性快捷键的时候,不要输完属性的名字,否则检索不到。
----redirect标签的用法 -该标签用来实现请求的重定向,同时可以在url中加入指定的参数 .url指定重定向页面的地址,可以是一个string类型的绝对地址或相对地址 .context用于导入其他web应用中的页面 <!-- redirect标签的用法 --> <c:redirect url="firstDemo.jsp"> <c:param name="username">zhangsan</c:param> <c:param name="password">123</c:param> </c:redirect>
<!-- var及scope用法 --> <c:catch var="error2"> <c:import url="Test.txt" var="test" scope="session" charEncoding="gbk"></c:import> </c:catch> <c:out value="${error2}"></c:out><br> <c:out value="import标签存储的test字符串变量值:${sessionScope.test}"></c:out> <!-- context属性用法 --> <c:catch var="error3"> <c:import url="/index1.jsp" context="/Test1"></c:import> </c:catch> <c:out value="${error3}"></c:out><br> Ps1:如果没定义var,则可以直接输出;如果定义了var,则用c:out标签输出。 Ps2:第一步:改eclipse中tomcat的部署路径,如果是灰掉的,停掉tomcat,然后clean,就可以改为第二项了(如果想在webapps生成,记得在Deploy path选择webapps)。第二步:改conf/context.xml中加上crossContext="true"。如:<Context crossContext="true"></Context>
JSTL标签之import标签 import标签:可以把其他静态或动态文件包含到本JSP页面 与<jsp:include>不同的是:include只能包含同一个web应用的文件,而import可以包含其他web应用中的文件,甚至是网络上的资源 PS:由于import标签导入网络上的资源可能会出现路径问题,所以import标签要包含在catch标签内使用 import标签用法 语法格式: <c:import url="" context="" var="" scope="" charEncoding="" varReader=""> </c:import> .url被导入资源的URL路径 .context相同服务器下其他的web工程,必须以"/"开头 .var以String类型存入被包含文件的内容 .Scope var变量的JSP范围 .charEncoding被导入文件的编码格式 .varReader以Reader类型存储被包含文件内容 <!-- 通过import标签导入网络上的相对路径 --> <c:catch var="error20191"> <c:import url="招聘需要学的技术.txt" charEncoding="utf-8"></c:import> </c:catch> <c:out value="${ error20191}"></c:out><br> <!-- 通过import标签导入网络上的绝对路径 --> <c:catch var="error2019"> <c:import url="http://www.baidu.com"></c:import> </c:catch> <c:out value="${ error2019}"></c:out><br>
forTokens标签的用法 -用于浏览字符串,并根据指定的字符将字符串截取 items指定被迭代的字符串 delims指定使用的分隔符 var指定用了存放遍历到的成员 <!--forTokens标签的用法 --> <c:forTokens items="029-88886666-999" delims="-" var="num"> <c:out value="${num }"></c:out><br> </c:forTokens>
<!-- 用法四:部分遍历并带状态 --> <c:forEach var="fruit" items="${fruits}" begin="1" end="3" varStatus="fru"> <c:out value="${fruit}——四个属性:"></c:out><br> <c:out value="index属性:${fru.index}"></c:out><br> <c:out value="count属性:${fru.count}"></c:out><br> <c:out value="first属性:${fru.first}"></c:out><br> <c:out value="last属性:${fru.last}"></c:out><br> <c:out value="----------"></c:out><br> </c:forEach> Ps:index从0开始;count从1开始;first是否第一个(boolean);last是否最后一个(boolean)。
forEach标签的用法 -根据循环条件遍历集合(Collectoin)中的元素 .var设定变量名用于存储从集合中取出元素(必须无默认值) .items指定要遍历的集合(必须无默认值) .begin、end用于指定遍历的起始位置和终止位置(有默认) .step指定循环的步长(有默认) .varStatus通过index、count、first、last几个状态值,描述begin和end子集中的元素状态 <% List<String> fruits=new ArrayList<String>(); fruits.add("apple"); fruits.add("pear"); fruits.add("orange"); fruits.add("banana"); request.setAttribute("fruits", fruits); %> <!-- forEach标签用法 --> <!-- 用法一:全部遍历 --> <c:forEach var="fruit" items="${fruits}"> <c:out value="${fruit}"></c:out><br> </c:forEach> <hr> <!-- 用法二:部分遍历 --> <c:forEach var="fruit" items="${fruits}" begin="1" end="4"> <c:out value="${fruit}"></c:out><br> </c:forEach>
choose、when、otherwise标签的用法 -通常这三个标签被放在一起配合使用 -<c:choose>标签嵌套在<c:when>和<c:otherwise>标签外面作为他们的父标签来使用 -其中choose和when标签也可以一起组合使用 <!-- choose、when、otherwise标签的用法 --> <!-- 第一种用法 --> <c:choose> <c:when test="${param.score>=60&¶m.score<=100}"> <c:out value="通过"></c:out> </c:when> <c:when test="${param.score>=0&¶m.score<=59}"> <c:out value="不通过"></c:out> </c:when> <c:otherwise> <c:out value="输入错误!!"></c:out> </c:otherwise> </c:choose><br> <!-- 第二种用法 --> <c:choose> <c:when test="${param.score==100 }"> <c:out value="太棒啦,你是第一名!!!"></c:out> </c:when> </c:choose> Ps:用法类似于switch——case——default。
choose、when、otherwise标签的用法 -通常这三个标签被放在一起配合使用 -<c:choose>标签嵌套在<c:when>和<c:otherwise>标签外面作为他们的夫标签来使用 -其中choose和when标签也可以一起组合使用 <!-- choose、when、otherwise标签的用法 --> <c:choose> <c:when test="${param.score<=100 && param.score>=60 }"> <c:out value="及格"></c:out> </c:when> <c:when test="${param.score<60 && param.score>=0 }"> <c:out value="不及格"></c:out> </c:when> <c:otherwise> <c:out value="请检查你的输入!"></c:out> </c:otherwise> </c:choose> Ps:用法类似于switch——case——default。
<!-- if标签用法 --> <form action="index.jsp" method="post"> <input type="text" name="score" value="${param.score}" /> <input type="submit"/> </form> <!-- 优秀:score>=90 --> <c:if test="${param.score>=90}" var="result" scope="session"> <c:out value="你的成绩:优秀——${sessionScope.result}"></c:out> </c:if> Ps:$(param.user)相当于<%=request.getParameter("user")%>;$(paramValues.favorites[0])相当于<%=request.getParameters("favorites")[0]%>。
<!-- catch标签的用法 --> <c:catch var="error"> <c:set target="aa" property="bb">asasa</c:set> </c:catch> <c:out value="${error}"></c:out>
JSTL标签之remove标签 remove标签的用法 - remove掉某个变量 - var属性是必选 - scope属性是可选 <!-- remove标签的使用 --> <c:set var="firstName" value="John"></c:set> <c:out value="${firstName}"></c:out><br> <c:set var="firstName" value="Bob"></c:set> <c:remove var="firstName"/> <c:out value="${firstName}"></c:out><br> <!-- remove标签的使用 ,如果用remove标签删除javabean中的属性就不起作用了,也就是说remove标签是和var一起使用的,因为用set标签给javabean的属性赋值时用的不是var,是property。所以用remove标签删除javabean的属性就不起作用了!!!-->
<!-- 存值到scope中 --> <!-- 第一种写法 --> <c:set value="today" var="day" scope="session"></c:set> <c:out value="${day}"></c:out> <hr> <!-- 第二种写法 --> <c:set var="age" scope="application">four</c:set> <c:out value="${age}"></c:out> <hr> <!-- 通过set标签向person中赋值 --> <jsp:useBean id="person" class="entity.Persion"></jsp:useBean> <c:set target="${person}" property="user" value="admin"></c:set> <c:out value="${person.user}"></c:out> <hr> <c:set target="${person}" property="pwd">123456</c:set> <c:out value="${person.pwd}"></c:out> Ps:不能同时有“var”和“target”属性。“scope” 是可选的,如果没有使用这个属性,则默认为页面作用域。
<c:out>两个不常用的属性 default - 如果value中找不到要输出的变量,则将默认值输出 escapeXml - 默认忽略XML中的特殊字符,false的时候会转义
<% String username="null"; request.setAttribute("username", username); %> <c:out value="${empty username}"></c:out> Ps:如果username为null或者"",则返回true;如果username为"有内容",则返回false。
EL自动类型转换: 要取得文本框中的输入,我们需要做类型转换 普通写法: String str_count = request.getParameter("count"); int count = Integer.parseInt(str_count); count = count + 20; EL会进行自动类型转换,只需要这样写 ${param.count +20} EL隐式对象: 1、pageContext,对应于当前页面的处理。 2、pageScope,与页面在作用域属性的名称和值相关联的Map类。 3、requestScope,与请求作用域属性的名称和值 相关联的Map类。 4、sessionScope,与会话作用域属性的名称和值 相关联的Map类。 5、applicationScope,与应用程序作用域属性的名称和值 相关联的Map类。 6、param,按名称存储请求参数的的主要值 的Map类。 7、paramValues,将请求参数的所有值 作为String数组存储的Map类。 8、Header,按名称存储请求头主要值的Map类。 9、headerValues,将请求头的所有值 作为String数组存储的Map类。 10、cookie,按名称存储请求附带的cookie的Map类。 11、initParam,按名称存储Web应用程序上下文初始化参数的Map类。
EL变量范围对应jsp的page request session application 分别为pageScope requestScope sessionScope applicationScope <c:out value="${username}" /> 运行时,会依次在page->request->session->application范围中寻找名为username的变量,然后输出其值。但是如果没有,就返回空字符串。
JSTL标签的value属性的属性值可以为变量和常量. 变量需要通过EL表达式来获取. 1.什么是EL表达式 全名为Exoression Language 经常与JSTL配合使用,使得JSP页面更直观,写法更简单 普通写法:<%=session.getValue("name") %> EL表达式:<c:out value="${sessionScope.name}"/> 2.EL表达式的格式 用美元符号"$"定界,内容包括在花括号"{}"中; ${表达式} EL表达式的基本格式:用美元符号“$”定界,内容包括在花括号“{}”中——${表达式}。 EL表达式中的"."与"[]"运算符: 通常情况两者通用,eg:${user.sex}等同于${user["sex"]}; 其中"[]"还可以用来进行集合元素中的定位${booklist[0].price}。 不通用的情况: 1、包含特殊符号: 如${user.first-name}则为错误的写法,正确的:${user["first-name"]}; 2、通过变量动态的取值时:${user[param]}---param可以是name or sex or others,是用户传入的情况。 而"."不能动态取值,它的写法是:${user.name}or${user.sex}or...
JSTL在基本配置导入jar后,使用前还需导入标签库: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:out value="输出内容"></c:out> Ps:在uri中之所以能找到该http,是因为导入了jar,否则是找不到的。prefix="c",里面的名字可以自定义,一般为“c”。