一,Jsp
1.1 概念
jsp:java server pages,java 服务器页面
jsp是一种特殊的页面,可以在html中嵌入java代码的页面,以 .jsp 结尾
简化 java 代码的书写
jsp的本质是一个Servlet,在第一次访问jsp页面时,这个jsp中的java代码会经历编译和运行
jsp被翻译成的java代码继承了HttpJspBase,HttpJspBase继承HttpServlet
1.2 jsp脚本
在jsp中定义java代码的格式
<% java代码 %>:定义的java代码,在service方法中
<%! java代码 %>:定义的java代码在jsp转换后的servlet的成员位置
<%= java代码 %>:定义的java代码会在service方法的print()方法的参数中,“=”后的内容是什么,在页面中就输出什么
1.3 jsp的内置对象
内置对象:在jsp页面中不需要手动创建和获取,可以直接使用的对象
jsp中一共有9个内置对象
- *request -> HttpServletRequest
- *response -> HttpServletResponse
- *session -> HttpSession
- *application -> ServletContext
- out -> JspWriter
注:
- out.write():在服务端响应输出内容前,输出的内容会先存储在out缓冲区中
- response.getWriter().write():在服务端响应输出内容前,输出的内容会先存储在response缓冲区中
- response缓冲区一定优先于out缓冲区被访问,所以使用response.getWriter().write()输出的内容一定在out.write()输出之前
- config -> ServletConfig
- page -> 当前页面的对象 this
- *pageContext -> pageContext
- 在当前页面中共享数据(域对象)
- 获取其他8个内置对象
- *exception -> Throwable
1.4 jsp的指令
格式:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
1.4.1 page
配置当前的jsp页面,必须写在页面的第一行
<%@ page 属性名1=属性值1 属性名2=属性值2 ... %>
- language:表示在当前jsp中嵌入的是什么指定的语言
- contentType:配置当前jsp响应给客户端时的编码
- pageEncoding:当前文档保存的编码格式
- import:导包
- errorPage:当前页面发生异常后,跳转到某个指定页面,由errorPage来配置,不需要写虚拟路径
- isErrorPage:配置在发生异常后跳转到的页面
- true:当前页面可以使用exception内置对象
- false:默认值,当前页面不可以使用exception内置对象
- isELIgnored:配置当前页面是否忽略EL表达式
- true:表示忽略EL表达式,EL表达式会按照字符串原样数据
- false:默认,不忽略EL表达式
1.4.2 include
在当前页面中去嵌入指定的其他页面
<%@ include file="资源名" %>
1.4.3 taglib
专门用于导入标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
1.5 注释
java:
- //
- /* */
- /** */
css:
- /* */
js:
- //
- /* */
html:
jsp:
- <%-- --%>
二,EL
1.1 概念
概念:Expression Language 表达式语言
作用:简化jsp中java代码的编写,专门用于获取数据
语法:${ 表达式 }
注:
- jsp默认支持el表达式
- 要忽略el表达式
- 忽略页面中的所有el表达式:在jsp的page指令下配置isELIgnored=“true”
- 忽略指定的某一句el
\${ 表达式 }
1.2 运算符
- 算术运算符:+、 -、 *、 /(div)、 %(mod)
- 比较运算符:>、 <、 >=、 <=、 ==、 !=
- 逻辑运算符:&&(and)、 ||(or)、 !(not)
- 空运算符:empty,作用:判断字符串、集合、数组对象是否为null或者长度是否为0
1.3 获取域对象中的数据
语法:${ 域对象的名称 . 键的名称 }
域对象的名称:
- pageScope -> pageContext
- requestScope -> request
- sessionScope -> session
- applicationScope -> application
注:
- 如果指定的域中没有这个键,那么什么也不显示
- 可以简化成 ${ 键的名称 },此时系统会根据域的范围大小,以从小到大的顺序来查询数据,直到找到为止,pageScope < requestScope < sessionScope < applicationScope
1.4 获取对象
- 获取自定义对象的值
语法:${ 域对象的名称 . 键的名称 . 属性名 }
本质:调用对象的getter方法,
例如 ${ user . name } user :键的名称,name:getName -> Name -> name - 获取List集合中的元素
语法:${ 域对象的名称 . 键的名称[ 索引 ] } - 获取Map集合中的元素
语法:
- ${ 域对象的名称 . 键的名称 . Map中的键 }
- ${ 域对象的名称 . 键的名称 [" Map中的键 "] }
1.5 使用 el 动态的获取虚拟路径
${ pageContext.request.contextPath }
三,JSTL
3.1 概念
概念:jsp standard tag library,jsp标准标签库
它是由Apache组织提供的开源苗费的jsp标签库
作用:简化jsp页面的java代码
3.2 使用步骤
- 导入jstl相关的jar包,javax.servlet.jsp.jstl.jar 和 jstl-impl.jar
- 引入标签库:在jsp中使用taglib指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- 使用标签
3.3 常用标签
3.3.1 if
- 属性:
- test:接收条件表达式
- 条件表达式的结果为true,则执行if标签体内容的代码
- 条件表达式的结果为false,则不执行if标签体内容的代码
注:c:if 标签没有对应 else 标签,如果需要有对立的else情况,需要重新定义一个 c:if
- 代码
<c:if test="${ empty arr }">
<a>登录</a>
<a>注册</a>
</c:if>
<c:if test="${ not empty arr }">
<a>欢迎</a>
<a>退出</a>
</c:if>
3.3.2 choose
c:choose 相当于 java 中的 switch
c:choose 标签的子标签 c:when ,相当于 java 中的 case
c:when 的必须属性:test
c:choose 标签的子标签 c:otherwise ,相当于 java 中的 default
演示:
<c:choose>
<c:when test="${ score >= 92.973 and score <= 100 }">A</c:when>
<c:when test="${ score >= 87.63 and score < 92.973 }">B</c:when>
<c:when test="${ score >= 76.44 and score < 87.63 }">C</c:when>
<c:when test="${ score >= 73.12 and score < 76.44 }">D</c:when>
<c:otherwise>E</c:otherwise>
</c:choose>
3.4 forEach
- 相当于 java 中的 普通 for 循环
- 属性
- begin:开始值
- end:结束值
- var:临时变量
- step:步长
- varStatus:循环状态的对象
- count:次数
- 代码
<c:forEach var="t" begin="1" end="10" step="2"varStatus="s">
${t }---${s.count }<br>
</c:forEach>
- 相当于 java 中的增强 for 循环
- 属性:
- items:容器对象
- var:临时变量
- varStatus:循环状态的对象
- index:索引
- count:次数
- 代码:
<c:forEach items="${list }" var="t" varStatus="s">
${t }---${s.index }---${s.count }<br>
</c:forEach>
items:存储在域对象中的容器
var:用于标识容器中每一个元素的临时变量