JSP常用标签可以理解为JSTL
user:普通用户
admin:站点管理员
JSTL1.1.2下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
第一个JSTL小程序
<c:out>输出标签:是属于JSTL核心标签中的一个,所以要先导入核心标签库
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5 <html> 6 <head> 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 8 <title>Insert title here</title> 9 </head> 10 <body> 11 <!-- 使用out标签输出常量 --> 12 <c:out value="this is our first JSTL demo"></c:out><br> 13 </body> 14 </html>
运行结果
value中的值可以输出变量以及常量
常量:直接输出
变量:EL表达式进行变量的获取
普通的写法:通过JSP内置的session对象去获取name这个value
EL表达式写法:从session的范围中取出name的值
如果没有直接做范围的限定,它会按以下顺序依次去找:从小到大的顺序
如果四个范围都没有找到,说明页面中没有这个变量。没有的话正常应该输出null,但是EL变量做了优化,不会输出null,它会直接输出一个为空的字符串。
例:<c:out value = "${username}"></c:out> 如果四个范围都没有找到,说明页面中没有username这个变量
获取用户的输入
如果想通过count进行运算的话,要转换成Int值的类型
用于计算。要是没进行字符串的转换,计算结果只是字符串的拼接
<%String username="zhangsan";request.setAttribute("username",username);%>
<c:out value="${empty username}"></c:out>
输出结果为false
<%String username="null";request.setAttribute("username",username);%> 为空
<c:out value="${empty username}"></c:out>
输出结果为true
<%String username="";request.setAttribute("username",username);%> 为空字符串
<c:out value="${empty username}"></c:out>
输出结果为true
注意:如果没有request.setAttribute("username",username);EL表达式取不到username的值
输出变量首先要向某一个scope赋值,存储变量值
1 <!-- 使用out标签输出变量 --> 2 <!-- 直接输出变量 --> 3 <%session.setAttribute("name","Jessica");%> 4 <c:out value="${name}"></c:out><br> 5 <!-- 当变量不存在时,通过default属性输出默认值error --> 6 <c:out value="${name1}" default="error"></c:out><br>
<!-- 设置输出转义后的字符需要escapeXml属性值设置成false --> <c:out value="<out标签>" escapeXml="false"></c:out><br
输出结果
快捷键:Alt+↑ 将选中的代码块上移
1 package com.imooc.test; 2 3 public class Person { 4 5 private String name2; 6 private String age2; 7 private String address; 8 public String getName2() { 9 return name2; 10 } 11 public void setName2(String name2) { 12 this.name2 = name2; 13 } 14 public String getAge2() { 15 return age2; 16 } 17 public void setAge2(String age2) { 18 this.age2 = age2; 19 } 20 public String getAddress() { 21 return address; 22 } 23 public void setAddress(String address) { 24 this.address = address; 25 } 26 27 }
将Person类实例化,实例化的变量名叫person
firstDemo.jsp
<jsp:useBean id="person" class="com.imooc.test.Person"></jsp:useBean>
1 <!-- 存值到scope中 --> 2 <c:set value="today" var="day" scope="session"></c:set> 3 <c:out value="${day}"></c:out><br> 4 5 <c:set var="age" scope="application">eleven</c:set> 6 <c:out value="${age}"></c:out><br> 7 8 <!-- 通过set标签向person中赋值 --> 9 <c:set target="${person}" property="name2" value="zhangsan"></c:set> 10 <c:out value="${person.name2}"></c:out> 11 <c:set target="${person}" property="age2" value="26"></c:set> 12 <c:out value="${person.age2}"></c:out> 13 <c:set target="${person}" property="address" value="北京市 朝阳区"></c:set> 14 <c:out value="${person.address}"></c:out> <br> 15 16 <!-- value值可以写在两个标签之间 --> 17 <c:set target="${person}" property="name2">zhangsan</c:set> 18 <c:out value="${person.name2}"></c:out> 19 <c:set target="${person}" property="age2">26</c:set> 20 <c:out value="${person.age2}"></c:out> 21 <c:set target="${person}" property="address">北京市 朝阳区</c:set> 22 <c:out value="${person.address}"></c:out> <br>
运行结果
1 <!-- remove标签的用法 --> 2 <c:set var="lastName" value="Lily"></c:set> 3 <c:out value="${lastName}"></c:out> 4 <c:set var="firstName" value="Wang"></c:set> 5 <c:remove var="firstName"/> 6 <c:out value="${firstName}"></c:out><br>
注意:remove只能直接remove掉某一个变量,对象中的某一个属性就不可以。
1 <!-- catch标签的用法 --> 2 <c:catch var="error"> 3 <c:set target="aa" property="bb">asasa</c:set> 4 </c:catch> 5 <c:out value="${error}"></c:out><br>
1 <form action="firstDemo.jsp" method="post" > 2 <!-- 通过表单接收用户的输入,表单中包含文本框,name:记录用户的成绩,value:用户的输入,接收到用户的输入之后,把它直接存到我们param范围内的score变量中去 3 用户点击提交到firstDemo.jsp页面,提交方式:post --> 4 <input type="text" name="score" value="${param.score}"/> 5 <input type="submit"/> 6 </form> 7 <!-- 优秀 score>=90 --> 8 <c:if test="${param.score>=90}" var="result" scope="application"> 9 <c:out value="恭喜,您的成绩是优秀!"></c:out> 10 </c:if> 11 <c:out value="${applicationScope.result}"></c:out>
通过表单接收用户的输入,表单中包含文本框,name:记录用户的成绩,value:用户的输入,接收到用户的输入之后,把它直接存到我们param范围内的score变量中去
用户点击提交到firstDemo.jsp页面,提交方式:post
1 <form action="firstDemo.jsp" method="post" > 2 <input type="text" name="score" value="${param.score}"/> 3 <input type="submit"/> 4 </form> 5 6 <!-- choose、when、otherwise --> 7 <c:choose> 8 <c:when test="${param.score>=90 && param.score<=100}"> 9 <c:out value="优秀"></c:out> 10 </c:when> 11 <c:when test="${param.score>=80 && param.score<90}"> 12 <c:out value="良好"></c:out> 13 </c:when> 14 <c:when test="${param.score>=70 && param.score<80}"> 15 <c:out value="中等"></c:out> 16 </c:when> 17 <c:when test="${param.score>=60 && param.score<70}"> 18 <c:out value="及格"></c:out> 19 </c:when> 20 <c:when test="${param.score>=0 && param.score<60}"> 21 <c:out value="不及格"></c:out> 22 </c:when> 23 <c:otherwise> 24 <c:out value="您的输入有问题"></c:out> 25 </c:otherwise> 26 </c:choose>
<c:choose> <c:when test="${param.score==100}"> <c:out value="太棒了,你是第一名!"></c:out> </c:when> </c:choose>
var:给当前遍历的变量取一个名字
<!-- 用法一:全部遍历 --> <c:forEach var="fruit" items="${fruits}"> <c:out value="${fruit}"></c:out><br> </c:forEach>
<!-- 用法二:部分遍历 --> <c:forEach var="fruit" items="${fruits}" begin="1" end="4"> <c:out value="${fruit}"></c:out><br> </c:forEach>
<!-- 用法三:部分遍历并指定步长 --> <c:forEach var="fruit" items="${fruits}" begin="1" end="4" step="2"> <c:out value="${fruit}"></c:out><br> </c:forEach>
1 <!-- 用法四:部分遍历并输出元素状态 --> 2 <c:forEach var="fruit" items="${fruits}" begin="1" end="4" varStatus="fru"> 3 <c:out value="${fruit}的四个属性值"></c:out><br> 4 <c:out value="index属性:${fru.index}"></c:out><br><!-- (集合元素中的下标)下标 --> 5 <c:out value="count属性:${fru.count}"></c:out><br><!-- (计算在集合中的是第几个数)集合中计数,从1开始 --> 6 <c:out value="first属性:${fru.first}"></c:out><br><!-- 第一个值为true,其它都为false --> 7 <c:out value="last属性:${fru.last}"></c:out><br><!-- 最后一个值为true,其它都为false --> 8 <c:out value="-----------------------------"></c:out><br> 9 </c:forEach>
<!-- forTokens标签的用法 --> <c:forTokens items="010-88096789-123" delims="-" var="num"> <c:out value="${num}"></c:out><br> </c:forTokens>
1 <!-- import标签的用法 --> 2 <!-- 导入网络上的绝对路径 --> 3 <c:catch var="error09"> 4 <c:import url="https://www.imooc.com"></c:import> 5 </c:catch> 6 <c:out value="${error09}"></c:out> 7 8 <!-- 导入相对路径文件 --> 9 <c:catch var="error08"> 10 <c:import url="tt.txt" charEncoding="gbk"></c:import> 11 </c:catch> 12 <c:out value="${error08}"></c:out><br>
引入同一个服务器的发布路径下的AnotherWebProject下的importFile.jsp页面到当前的project路径来
<!-- context属性的用法 --> <c:catch var="error06"> <c:import url="/importFile.jsp" context="/AnotherWebProject" charEncoding="gbk"></c:import> </c:catch> <c:out value="${error06}"></c:out><br>
常用JSTL函数
fn:contains
fn:escapeXml