JSP <% %>
概念:Java Server Pages,java 服务器端页面。一种动态网页技术标准。
- 可以理解为:
一个特殊的页面
,其中既可以指定定义html
标签,又可以定义java
代码。html 域 java 共处一个页面。 - 用于简化 Servlet 开发。
原理:JSP 本质上就是一个继承了 Servlet 的实现类
-
实现过程:浏览器访问.jsp资源;服务器解析请求消息,找到是否有.jsp资源;若有,会将.jsp文件转换为.java文件;编译java文件生成.class字节码文件;由该字节码文件给客户端提供响应。所以 JSP 本质上就是一个 Servlet。
-
JSP的脚本:JSP 页面定义 Java 代码的方式 <% %>
-
<% 代码 %>
:该定义的java代码,在 jsp 转换为 java 类后变成service方法中的内容。service方法中可以定义什么,该脚本中就可以定义什么。 -
<%! 代码 %>
:该定义的 java 代码,在 jsp 转换 java 类后放在成员位置。即可以用来定义成员变量和成员方法等。 -
<%= 代码 %>
:该定义的 java 代码,会输出到浏览器页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
-
-
jsp注释:
<%-- --%>:可以注释所有。 html 注释 <!-- --> 只能注释html代码片段
JSP 指令
-
作用:用于配置JSP页面,导入资源文件
- 格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
- 格式:
-
三种指令:
page
、taglib
、include
page: 配置 JSP 页面的信息。如:
<%@ page contentType="text/html; charset=UTF-8" language="java" %>
- contentType:等同于response.setContentType()
- 设置响应体的MIME类型以及字符集
- 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
- import:导入
java
包。 - errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
- isErrorPage:标识当前也是是否是错误页面。
- true:是,可以使用内置对象exception
- false:否。默认值。不可以使用内置对象exception
include: 包含其他 jsp 页面的,即导入 jsp 页面的资源文件。如:
<%@ include file="top.jsp"%>
taglib:导入 jstl 标签库资源。如:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- prefix:前缀,自定义的
- contentType:等同于response.setContentType()
JSP的内置对象
在jsp页面中不需要获取和创建,可以直接使用的对象。因为这些代码最终放到 service 方法中使用,而 service 方法中对这些对象已经声明了。
jsp一共有9个内置对象。
变量名 | 真实类型 | 作用 |
---|---|---|
pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
request | HttpServletRequest | 一次请求访问的多个资源(转发) |
session | HttpSession | 一次会话的多个请求间 |
application | ServletContext | 所有用户间共享数据 |
response | HttpServletResponse | 响应对象 |
page | Object | 当前页面(Servlet)的对象 this |
out | JspWriter | 输出对象,数据输出到页面上 |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象 |
out:字符输出流对象。可以将数据输出到浏览器页面上。和 response.getWriter()类似。
response.getWriter() 和 out.write() 的区别:在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。即 response.getWriter() 数据输出永远在 out.write() 之前。
EL表达式 ${ }
概念:Expression Language 表达式语言
作用:替换和简化 jsp 页面中 java 代码的编写,将结果显示在浏览器页面上。 简单来说EL表达式就是让程序员,简化了代码的书写量。在学EL表达式之前我们必须通过<%= %>来取出域中的数据,但这种方式过于繁琐,所以就诞生了EL表达式。
语法:${表达式}
-
注意:jsp 默认支持 EL 表达式的。如果要忽略 EL 表达式
1、设置 jsp 中page指令中:isELIgnored=“true” 忽略当前jsp页面中所有的el表达式
2、\${表达式} :忽略当前这个el表达式。
使用:
-
运算:
-
运算符:
1、算数运算符: + - * /(div) %(mod)
2、 比较运算符: > < >= <= == !=
3、逻辑运算符: &&(and) 、||(or)、 !(not)
4、空运算符: empty -
空运算符 empty 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0如:
${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且长度>0
-
-
获取值:
EL表达式只能从域对象中获取值,jsp中有四个域对象。
语法:
1、${域名称.键名}:从指定域中获取指定键的值,四个域对象名称:1、pageScope --> pageContext 域对象
2、requestScope --> request 域对象
3、sessionScope --> session 域对象
4、applicationScope --> application(ServletContext)域对象举例:从 request 域中存储 name = 张三
${requestScope.name}
2、${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
3、获取对象、List集合、Map集合的值
- 获取对象:${域名称.键名.属性名},本质上会去调用对象的getter方法
- 获取List集合:${域名称.键名[索引]}
- 获取Map集合:${域名称.键名.key名称} 或 ${域名称.键名[“key名称”]}
-
隐式对象:
EL 表达式中有11个隐式对象- pageContext:获取jsp其他八个内置对象,如:
${pageContext.request.contextPath}:动态获取虚拟目录
- pageContext:获取jsp其他八个内置对象,如:
JSTL <C:标签名>
概念:JavaServer Pages Tag Library,JSP 标准标签库。是由Apache组织提供的开源的免费的jsp标签。
作用:用于简化和替换jsp页面上的java代码,将 Java 代码换成标签。jstl出现的目的同 el 一样也是要代替 jsp 页面中的脚本代码。JSTL 标准标签库有5个子库,但随着发展,目前常使用的是他的核心库。
JSTL五大子库:
Core(核心库) 标签库的URI:http://java.sun.com/jsp/jstl/core 常用前缀:c
I18N(国际化) 标签库的URI:http://java.sun.com/jsp/jstl/fmt 常用前缀:fmt
SQL 标签库的URI:http://java.sun.com/jsp/jstl/sql 常用前缀:sql
XML 标签库的URI:http://java.sun.com/jsp/jstl/xml 常用前缀:x
Functions 标签库的URI:http://java.sun.com/jsp/jstl/functions 常用前缀:fn
使用步骤:
- 导入jstl相关jar包
- 引入标签库:使用taglib指令:<%@ taglib %>
- 使用标签
常用的JSTL标签
-
if 标签:相当于 java 代码的 if 语句
属性:- test 必须属性,接受boolean表达式的值。一般情况下,test属性值会结合el表达式一起使用,如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:if test="${not empty str}">不为空</c:if>
注意:
- c:if 标签没有else情况,想要else情况,则可以在定义一个c:if标签
- test 必须属性,接受boolean表达式的值。一般情况下,test属性值会结合el表达式一起使用,如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容。
-
choose 标签:相当于 java 代码的 switch 语句
-
使用 choose 标签声明, 相当于 switch 声明;
-
使用 when 标签做判断, 相当于 case;
-
使用 otherwise 标签做其他情况的声明, 相当于 default。
如:
<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>
-
-
foreach 标签:相当于 java 代码的 for 语句
-
完成重复的操作
属性:
- begin:开始值
- end:结束值
- var:临时变量
- step:步长
- varStatus :循环状态对象
- index:容器中元素的索引,从o开始
- count:循环次数,从1开始
如:
<c:forEach begin="1" end="10" var="i" step="1"> ${i}<br> </c:forEach>
-
遍历容器
属性:
- items:容器对象
- var:容器中元素的临时变量
- varStatus :循环状态对象
- index:容器中元素的索引,从o开始
- count:循环次数,从1开始
如:
<c:forEach items="${list}" var="str" varStatus="s"> ${s.index} ${s.count} ${str}<br> </c:forEach>
-