核心标签库
<c:out> 文本输出
<c:set><c:remove> 设置、删除 属性值
<c:catch> 异常捕获
<c:if> 和<c:choose><c:when><c:otherwise> 条件选择
<c:forEach><c:forToken> 循环迭代
掌握标签的属性用法:
属性名
属性的作用
属性值的类型
属性值是否支持el表达式
【ElTestSerlet.java】
package com.rupeng.web3;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ELTest1Servlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
req.setAttribute("age", 50);
req.setAttribute("name", "hello a>b<c>d"); //escapeXml属性默认为true使特殊字符转义输出
Person p1 = new Person();
p1.setId(5);
p1.setName("tom");
p1.setAge(50);
Person p2 = new Person();
p2.setId(6);
p2.setName("jerry");
p2.setAge(15);
List<Person> list = new LinkedList<Person>();
list.add(p1);
list.add(p2);
req.setAttribute("persons", list);
req.getRequestDispatcher("/ElTest1.jsp").forward(req, resp);
}
}
【然后配置web.xml】
【注意】uri="http://java.sun.com/jsp/jstl/core"
【核心标签库 <c:out>】
l <c:out> 输出一段文本内容到pageContext对象当前保存的“out”对象中
l <c:out>的属性
属性名 | 是否支持EL表达式 | 属性值类型 | 属性说明 |
value | true | Object | 用来指定要输出的内容 |
escapeXml | true | Boolean | true:对特殊字符进行转义 |
default | true | Object | 默认值,当value为null时输出 |
对应的主要Java代码
out.print(obj);
和${name}的区别是<c:out>支持escapeXml,对于可能有特殊字符的要用<c:out>
【核心标签库 <c:forEach>】
循环迭代标签可以迭代的对象:Collection、Map、Iterator、Enmuration、String、ResultSet
属性名 | 是否支持EL | 属性类型 | 属性说明 |
items | true | 集合等 | 将要迭代的集合对象 |
var | false | String | 代表当前迭代到的元素,并存入page中 |
begin | true | int | 迭代开始的索引位置 |
end | true | int | 迭代结束的索引位置 |
step | true | int | 迭代增量,也成为步长 |
varStatus | false | String | 为迭代状态对象命名,并放在page中 |
【ElTest1.jsp】
<pre name="code" class="html"><%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@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>Insert title here</title>
</head>
<body>
<c:out value="${name}" ></c:out>
<p>${name }</p>
<p><c:out value="${nickname}" default="${age}"/></p> //没有值时候默认输出default
<p><c:out value="${requestScope.age}" /></p>
<table>
<tr><td>id</td><td>name</td><td>age</td></tr>
<c:forEach items="${persons}" var="p">
<tr style="color:${p.age gt 18?'red':'black' }"><td>${p.id }</td><td>${p.name }</td><td>${p.age }</td></tr>
</c:forEach>
</table>
</body>
</html>
实际上一般不在jsp中储存数据
【核心标签库 <c:set>(*)】
把数据存放到web域、Map、JavaBean中
属性名 | 是否支持EL表达式 | 属性值类型 | 属性说明 |
value | true | Object | 需要设置的变量的值 |
var | false | String | 需要设置的变量的名称 |
scope | false | String | 变量所放置的范围对象:page、request、session、application,和var配合使用 |
target | true | Object | 指定在JavaBean或Map中的变量,和property配合使用 |
property | true | String | 指定JavaBean的字段名或者Map的key。不能xx.xxx这样多段的 |
1)scope var是一对,用来在scope范围中设定名字为var的值;
2)target property是一对,是用来在通过target的EL表达式获取的对象中设置属性名为property的值。
【核心标签库 <c:remove> (*)】
l <c:remove>标签用于删除各种Web域中的属性。
其语法格式如下:
<c:remove var="varName"
属性名 | 支持EL表达式 | 属性值类型 | 属性说明 |
var | false | String | 需要删除的变量的名称 |
scope | false | String | 变量所属的范围对象:page、request、session、application,和var配合使用 |
【核心标签库 <c:catch> (*)】知道即可
l 用于捕获异常,仅仅是捕获,并不做处理。如果指定var属性,则会把异常对象存入page对象中
属性列表
属性名 | 是否支持EL表达式 | 属性类型 | 属性说明 |
var | false | String | 指定在page中的变量名 |
注意点
由于JSP有错误页面机制,所以一些关键的错误异常还是要跳转到错误页面,那些次要的异常可以使用此标签捕获
【ELTest2】
<pre name="code" class="html"><%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="com.rupeng.web3.Person"%>
<%@page import="java.util.HashMap"%>
<%@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>Insert title here</title>
</head>
<body>
<c:set scope="request" var="name" value="rupeng"></c:set>
<c:set scope="session" var="name" value="baidu"></c:set>
<%
Person p1 = new Person();
request.setAttribute("p",p1);
HashMap<String,String> map = new HashMap();
session.setAttribute("map1",map);
%>
${requestScope.name }<br/>
${sessionScope.name }<br/>
<c:set target="${requestScope.p}" property="name" value="yzk"/>
${p.name}<br/>
<c:set target="${map1}" property="tom" value="123"/>
<p>
${sessionScope.map1.tom}
</p>
<p>
${name}
</p>
<c:remove var="name" scope="request"/>
<p>
${name}
</p>
<c:catch var="ex">
<%
String s = request.getParameter("name");
s.toString();
%>
</c:catch>
异常对象:<c:out value="${pageScope.ex}"></c:out>
异常堆栈:<c:out value="${ex.stackTrace}"></c:out>
</body>
</html>