目录
一、JSP
1、指令
【1】作用
- 用于配置JSP页面,导入资源文件
【2】格式
- <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ..... %>
【3】分类
- page:配置JSP页面的
- contenType:等同于response.setContentType()
- 设置响应体的mime类型以及字符集
- 设置当前JSP页面的编码(高级IDE,如果是低级编译器,需要设置 pageEncoding 属性来设置字符集)
- import:导包
- errorPage:当前页面发生异常后,会自动跳转到指定的错误提示页面
- isErrorPage:标识当前页面是否为错误页面
- true:是,可以使用内置对象 exception
- false:否,默认值,不可以使用内置对象 exception
- contenType:等同于response.setContentType()
- include:页面包含的,导入页面资源文件
- <%@include file="top.jsp"%>
- taglib:导入资源
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
2、注释
- <!-- -->:只能注释HTML代码片段
- <%-- --%>:可以注释所有代码片段
3、内置对象
在JSP页面中不需要创建,可以直接使用的对象称为内置对象,一共有 9 个内置对象
变量名 | 真实类型 | 作用 |
pageContext | PageContext | 当前页面共享数据,可以获取其他 8 个对象 |
request | HttpServletRequest | 一次请求访问的多个资源(转发) |
session | HttpSession | 一次会话的多个请求 |
application | ServletContext | 所有用户间数据共享 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(Servlet)对象 |
out | JspWrite | 输出对象,输出数据到页面上 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象 |
二、EL表达式
1、概念和作用
- Expression Language(表达式语言),主要用来替换和简化JSP页面中的java代码
2、语法
- ${表达式}
3、忽略EL表达式
- 设置JSP中page指令:isElignored="true" 忽略JSP中所有的 EL 表达式
- \${表达式}:忽略当前的EL表达式
4、EL 表达式的使用
【1】运算符
- 算数运算符:+ - * /(div) %(mod)
- 比较运算符:> < >= <= == !=
- 逻辑运算符:&&(and) ||(or) !(not)
- 空运算符:empty
- ${empty str}:用于判断字符串,集合数组对象是否为null或者长度是否为 0
- ${not empty str}:表示判断字符串、集合、数组对象是否不为null并且长度大于 0
【2】获取值
- EL 表达式只能从域对象中获取值
- 格式:${域名称.键名} ==> 从指定的域中获取指定的键值
域 对应的域名称 pageContext pageScope request requestScope session sessionScope application applicationScope ${键名}:表示依次从最小的域中查找是否有该键对应的值
-
获取对象:${域名称.键名.属性名}
本质上是调用Javabean中的getter方法 -
获取 List 集合:${域名称.键名[索引]}
-
获取 Map 集合
-
${域名称.键名.key名称}
-
${域名称.键名["key名称"]}
-
- 格式:${域名称.键名} ==> 从指定的域中获取指定的键值
【3】隐式对想
EL 表达式中有 11 个隐式对象,这里主要说 pageContext 隐式对象,pageContext 隐式对象主要功能有:
- 获取 JSP 其他八个内置对象
- 动态获取虚拟目录:
<%@ page import="Test.User" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
${3 > 4}
\${3 > 4}
<hr>
<h3>算数运算符</h3>
${3 + 4}<br>
${3 / 4}<br>
${3 % 4}<br>
<h3>比较运算符</h3>
${3 == 4}<br>
<h3>逻辑运算符</h3>
${3 > 4 && 3 < 4}
${3 > 4 and 3 < 4}
<hr>
<h3>在域中获取值</h3>
<%
//在request域中存储值
request.setAttribute("name","oneStar");
//在session域中存储值
session.setAttribute("age","18");
%>
${requestScope.name}
${sessionScope.age}
${name}
<h3>获取对象值</h3>
<%
User user = new User();
user.setName("oneStar");
user.setAge(18);
user.setBirthday(new Date());
request.setAttribute("u",user);
%>
${requestScope.u.name}<br>
${requestScope.u.age}<br>
${requestScope.u.birthday}<br>
<h3>获取List集合</h3>
<%
List list = new ArrayList();
list.add("oneStar");
list.add("twoStar");
list.add("threeStar");
request.setAttribute("list",list);
%>
${requestScope.list}<br>
${requestScope.list[2]}<<br>
<H3>获取map集合</H3>
<%
Map map = new HashMap<>();
map.put("name","oneStar");
map.put("age","18");
request.setAttribute("map",map);
%>
${requestScope.map}<br>
${requestScope.map.name}<br>
${requestScope.map["age"]}<br>
<h3>隐式对象</h3>
${pageContext.request}
<h4>在JSP页面动态获取虚拟目录</h4>
${pageContext.request.contextPath}
</body>
</html>
三、JSTL 标签
JSTL 标签(JavaServer Pages Tag Library),即JSP标准标签库,是由 Apache 组织提供的开源免费的JSP标签,主要是用来简化和替换JSP页面上的Java代码,具体使用步骤如下:
- 导入jstl相关jar包
- 引入标签库:taglib指令引入:<%@ taglib %>
- 使用标签
1、if 标签
- 属性:test 属性,为必须属性,接受 boolean 表达式
- 一般情况下,test属性值会结合 EL 表达式一起使用
- if 标签没有else情况,如果想要else效果,可以定义多个 if 标签
2、choose 标签
choose 标签就相当于switch 语句,switch 需要配合 case、default 来使用,而choose则需要配合when、otherwise 来使用
- 使用choose标签声明:相当于 switch 声明
- 使用 when 标签做判断:相当于 case
- 使用 otherwise 标签做其他情况的声明:相当于default
3、 foreach 标签
【1】完成重复操作
属性
- begin:开始值
- end:结束值
- var:临时变量
- step:步长
- varStatus:循环状态对象
- index:容器中元素的索引,从 0 开始
- count:循环次数,从 1 开始
【2】遍历容器
属性
- items:容器对象
- var:容器中元素的临时变量
- varStatus:循环状态对象
- index:容器中元素的索引,从 0 开始、
- count:循环次数,从 1 开始
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>OneStar</title>
</head>
<body>
<h3>if标签</h3>
<%
List list = new ArrayList();
list.add("oneStar");
list.add("twoStar");
request.setAttribute("list",list);
%>
<c:if test="${not empty list}">
集合非空
</c:if>
<c:if test="${3 % 2 != 0}">
是奇数
</c:if>
<hr>
<h3>choose标签</h3>
<%
request.setAttribute("number","12");
%>
<c:choose>
<c:when test="${number == 1}">星期一</c:when>
<c:when test="${number == 2}">星期二</c:when>
<c:when test="${number == 3}">星期三</c:when>
<c:when test="${number == 4}">星期四</c:when>
<c:when test="${number == 5}">星期五</c:when>
<c:when test="${number == 6}">星期六</c:when>
<c:when test="${number == 7}">星期日</c:when>
<c:otherwise>不正确字符!!!</c:otherwise>
</c:choose>
<h3>foreach标签</h3>
<c:forEach begin="0" end="10" var="i" step="1">
${i}
</c:forEach><br>
<%
List lists = new ArrayList();
lists.add("oneStar");
lists.add("twoStar");
request.setAttribute("lists",lists);
%>
<c:forEach items="${lists}" var="list" varStatus="s">
${s.index} ${s.count} ${list}<br>
</c:forEach>
</body>
</html>