文章目录
其实在我们编写JSP网页的时候是不希望在JSP页面中出现Java代码的,这里我们就要使用
JSTL
的核心标签库来实现。 想要使用JSTL,一定要填上这句话:<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
在定义变量的时候,我们难免会用到Java代码,但是这里我们介绍
<c:set>
标签,这个能够实现变量的定义<c:set>
标签中的属性有var
(定义的变量)、value
(变量的值)、target
(为JavaBean对象赋值的时候使用)、scope
(设置变量的存活范围,有request
,session
,application
,page
)、property
(JavaBean
的变量) 使用set
标签相当于调用存活范围内的setAttribute()
方法来绑定属性
<%--x的值为10,这句话相当于String x="10" --%>
<c:set var="x" value="10"></c:set>
session
范围的变量(当然还可以定义其他存活范围的变量,这里就不一一讲了)
<%--seesion范围的变量代表整个会话期间都是可以共享这个变量的,相当于下面这句话:
session.setAttribute("x",100);
在另外一个JSP文件中可以使用下面的语句得到其中的值:
session.getAttribute("x");
<c:out value="${sessionScope.x}"></c:out>
--%>
<c:set var="x" value="100" scope="session"></c:set>
JavaBean
对象的值:<%--获取JavaBean的对象person,如果没有那么就是直接创建一个对象,范围为session,下面可以用到 --%>
<jsp:useBean id="person" class="com.Person" scope="session"></jsp:useBean>
<%-- target是对象的person,这里使用EL表达式,得到session范围内的Person对象 --%>
<c:set target="${sessionScope.person }" property="username" value="陈加兵"></c:set>
<%-- 输出变量的username的值,这里使用的EL表达式 相当于 session.getAttribute("person").getUsername() --%>
<c:out value="${sessionScope.person.username }"></c:out>
<c:set scope="request">陈加兵</c:set>
<c:remove>
(一定要指定存活范围)<%--移除session范围内的变量x 相当于 session.removeAttribute("x")
这里一定要指定范围
--%>
<c:remove var="x" scope="session"/>
<c:out>
相当于out.println()
方法,是一个用来向网页中输出内容的 其中的属性有value
(输出的内容,其中可以是JEL的${}或者一个字符串) ,escapeXml
(这个使用来控制是否将输出的内容中有html
标签的是否用替代字符替换,默认为true
表示用替代字符替换),default
(如果输出的内容为null
或者为空的时候那么就直接不显示任何内容,但是我们可以定义default
的值来默认显示的值)
EL
表达式输出
<%--输出request范围内的属性x 相当于 out.println(request.getAttribute("x"))--%>
<c:out value="${requestScope.x}"></c:out>
<c:out value="我是陈加兵"></c:out>
html
语句
<%--设置escapeXml为false--%>
<c:out value="<h1>我是陈加兵</h1>" escapeXml="false"></c:out>
<%--如果${param.username}为空,那么就输出0--%>
<c:out value="${param.username}" default="0"></c:out>
流程处理就是判断,循环语句
<c:if>
可以判断语句是否正确,如果正确即可执行,但是这个标签没有else
语句,只能处理判断为正确的结果 其中的属性有test
,这个是设置判断条件的,如果为true
即可执行,反之不执行,var
是保留判断结果的test
中的判断条件既可以是EL
表达式也可以是<%=%>
<c:set var="salary" value="${3000 }"></c:set>
<%-- test中写的是判断条件,如果为true那么才执行,这里写的是EL表达式,当然也是可以用<%=%> --%>
<c:if test="${salary>2000 }">
<c:out value="这个员工的工资大于2000"></c:out>
</c:if>
前面的说过的
<c:if>
仅仅当判断为真时才执行,但是我们想要当不为真时也执行语句,这时我们要使用<c:choose>
,<c:when>
,<c:otherwise>
<%-- 判断题必须在choose中 --%>
<c:choose>
<%-- 如果提交的username和password都对的话,那么就登录成功 相当于if --%>
<c:when test='${param.username=="陈加兵" && param.password=="123456"}'>
<h1>
<c:out value="${param.username }"></c:out>
登录成功
</h1>
</c:when>
<%-- 相当于else --%>
<c:otherwise>
<h1>
<c:out value="${param.username }"></c:out>
登录失败
</h1>
</c:otherwise>
</c:choose>
之前学过JSP中的网页导入,一个是静态导入,一个是动态导入,详情请看上篇文章。 在JSTL中也有一个标签(
<c:import>
),用于动态导入网页,并且还可以使用<c:param
>设置传入的参数
<%-- url就是要导入的网页,name是设置初始值的变量,value是设置的值。在demo1.jsp中可以使用 request.getParameter(String name)取得参数 --%>
<c:import url="demo1.jsp">
<c:param name="username" value="陈加兵"></c:param>
<c:param name="password" value="123456"></c:param>
</c:import>
除了导入
web
应用程序中的网页,我们还可以导入非目前web
应用程序中的网页
<%--导入百度的首页,并且设置字符集为utf-8,注意这里一定要设置网页的字符集格式和当前的jsp格式一样,否则会出现乱码--%>
<c:import url="http://www.baidu.com"></c:import charEncoding="utf-8">
之前的重定向必须使用
HttpServletResponse
的sendRedirect()
方法 现在我们可以使用JSTL
标签<c:redirect url>
<c:redirect url="demo1.jsp"></c:rediect>
当然我们也是可以传入参数的,使用
<c:param name="" value="">
<c:redirect url="demo1.jsp">
<c:param name="username" value="陈加兵"/>
</c:rediect>
在之前的JSP文件中,必须定义
errorPage
属性才能跳转到指定的页面或者处理错误 现在我们使用JSTL
标签<c:catch>
,可以捕捉异常,如果有异常就会将异常对象保存下来
<%--捕捉异常,如果有了异常,那么保存在error变量中 --%>
<c:catch var="error">
${10/0 }
</c:catch>
<%-- 如果捕捉到了异常,那么error就不是null --%>
<c:if test="${error!=null }">
<h1>
<c:out value="${error.message }"></c:out>
</h1>
</c:if>
迭代标签用于数组,集合,列表的输出。
forEach既可以循环也可以迭代
var
变量,用于输出items
将要迭代的对象valueStatus
迭代的状态begin
如果指定了bengin,就在items下标为begin的位置进行迭代end
如果指定了end,那么就在items下表为end的位置结束迭代step
指定迭代的步长,默认的是1 <!-- 循环输出[0,8]之中的所有的整数 -->
<c:forEach var="item" begin="0" end="8">
<c:out value="${item}"></c:out>
</c:forEach>
<br>
<!-- 循环输出[0,8]之中的所有的整数 ,指定步长为2-->
<c:forEach var="item" begin="0" end="8" step="2">
<c:out value="${item}"></c:out>
</c:forEach>
<%
List list=new ArrayList();
for(int i=0;i<3;i++){
list.add(i);
}
request.setAttribute("items", list);
%>
<!-- item是创建的变量用来存储迭代中的值,items是迭代的对象,其中的值使用EL表达式给出 -->
<c:forEach var="item" items="${requestScope.items }">
<c:out value="${item }"></c:out>
</c:forEach>
用于将一个字符串按照定义的符号分隔出来。
var
变量,用于输出items
将要迭代的string对象delims
指定分隔字符串的分隔符,可以定义多个分隔符varStatus
迭代的状态begin
end
step
<%
String str="c,v,d,s,a|v,d";
request.setAttribute("str",str);
%>
<c:forTokens var="item" items="${requestScope.str }" delims=",|">
<c:out value="${item }"></c:out>
</c:forTokens>