一:要使用C标签库,首先得在JSP页面加入:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
二:Core核心标签库
运算符:out,set,remove,catch
流程控制:if,choose,when,otherwise
循环:forEach,forTokens
URL操作:import,param,redirect,url
三:<c:out>
主要用来显示内容,就像是<%=%>一样。
如:hello!<c:out value="${username}">
//servlet页面
package com.action;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ChapterServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
request.setAttribute("name", "李四");
request.getRequestDispatcher("chapter2.jsp").forward(request, response);
}
}
//jsp页面
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>chapter2.jsp</title>
</head>
<body>
<div>
<div>
<c:out value="${name}"></c:out>
</div>
</div>
</body>
</html>
导航:http://localhost:8080/jstl/Chapter2Servlet先导航servlet,再由servlet跳转jsp页面。
将后台servlet改为
request.setAttribute("name", "李<b>四</b>");
将前台jsp页面改为
<c:out value="${name}"></c:out>
输出结果为:李<b>四</b>
如果将前台jap改为:
<c:out value="${name}" escapeXml="false"></c:out>
输出结果:李四 (四字加粗)
可以看到escapeXml默认值为true,转换,可以设置为false,不转换,不转换页面就会解析html代码。
如果后台servlet没有值
前台:<c:out value="${name}" default="无名氏"></c:out>
输出结果:无名氏
说明当从四个范围内取不到值得时候,默认值起作用。
如果没有设置默认值,当取不到值或取到null时,则显示“”
四:<c:set/>
主要用来将变量存储在四个范围之中
此标签有五个属性:
value:要存储的值内容
var:给存储的值起变量名
scope:可以指定四个page,request,session,application范围其中之一。
target:可以指定JavaBean
property:指定JavaBean属性
语法一:
将value的值,存储在四个范围其中之一,默认为page
<c:set var="name" value="张三"/>
${name}
语法二:
将name存储在session范围中,然后在其它页面中取出查看
<c:set var="userName" value="张三" scope="session" />
<c:set var="userName" value="李四" scope="request" />
<jsp:forward page="a.jsp"></jsp:forward>
其它页面中取出
${name}可以看到取出request范围中的值
a.jsp中分别取出:
request:${requestscope.userName}
session:${sessionscope.userName}
五:<c:remove />
语法: <c:remove var="" scope=""/>
var指定变量, scope指定范围
示例:
<c:set var="userName" value="张三" />
<c:set var="userName" value="李四" scope="request" />
<c:set var="userName" value="王五" scope="session" />
显示:
<br />
<c:out value="${pageScope.userName}" />
<br />
<c:out value="${requestScope.userName}" />
<br />
<c:out value="${sessionScope.userName}" />
<br />
<br />
移除page中的userName
<br />
<c:remove var="userName" scope="page" />
<c:out value="${pageScope.userName}" default="无名氏" />
<br />
<c:out value="${requestScope.userName}" />
<br />
<c:out value="${sessionScope.userName}" />
<br />
<br />
页面1
<c:set var="userName" value="张三" />
<c:set var="userName" value="李四" scope="request" />
<c:set var="userName" value="王五" scope="session" />
<jsp:forward page="a.jsp"></jsp:forward>
页面2
移除request中的userName
<br />
<c:remove var="userName" scope="request" />
<br />
page:<c:out value="${pageScope.userName}" default="page无名氏"></c:out><br />
request:<c:out value="${requestScope.userName}" default="request无名氏"></c:out><br />
session:<c:out value="${sessionScope.userName}" default="session无名氏"></c:out><br />
如果不指定移除范围
<c:set var="userName" value="张三" />
<c:set var="userName" value="李四" scope="request" />
<c:set var="userName" value="王五" scope="session" />
<br/>
<c:remove var="userName"/>
page:<c:out value="${pageScope.userName}" default="page无名氏"></c:out> <br />
request:<c:out value="${requestScope.userName}" default="request无名氏"></c:out><br />
session:<c:out value="${sessionScope.userName}" default="session无名氏"></c:out><br />
可以看到,如果不带范围的话,会删除所有范围内同名的变量.
六:<c:catch/>错误处理
示例:
<c:catch var="error_Message">
<%
int i = Integer.parseInt("a");
%>
</c:catch>
${error_Message}