一,JSP
1.1 概念
jsp:java server pages,java 服务器页面
jsp是一种可以在html页面中嵌入java代码的的页面,以
.jsp
结尾作用:简化java代码的书写
jsp的本质是一个Servlet,jsp页面在编写代码后第一次被访问时编译执行
一个jsp页面被编译的过程:
test.jsp->test_jsp.java->test_jsp.class
test.jsp的文件被翻译成了test_jsp.java,这个继承了HttpJspBase,HttpJspBase继承了HttpServlet
1.2 jsp的语法
jsp中编写java代码的格式:
<%= java代码 %> java代码在service()方法的out.print()方法的参数中 <% java代码 %> java代码在service()方法中 <%! java 代码%> java代码在jsp转换成servlet的成员位置
jsp的注释:
<%-- --%>
java的注释:
//
/* */
/** */
html的注释:
<!-- -->
css的注释:
/* */
js的注释:
//
/* */
1.3 jsp的内置对象
在jsp中由tomcat服务器创建,不需要手动创建,可以直接使用的对象(9个)
内置对象 所属的类 作用 **request HttpServletRequest 获取提交的参数、共享数据、请求转发 **response HttpServletResponse 重定向,设置Cookie **session HttpSession 共享数据 **application ServletContext 共享数据、获取绝对路径 page Object 就是当前Servlet的对象 *pageContext PageContext 获取其它八个内置对象,域对象 out JspWriter 向页面输出内容 config ServletConfig *exception Throwable 处理异常 注:
response向页面输出的优先级高于out的输出,原因是response和out输出的内容都先输出到缓冲区中,而response的缓冲区优先被访问,所以使用response输出一定在out输出之前
exception这个内置对象的使用前提,是当前jsp的配置指令中配置了
isErrorPage="true"
1.4 jsp的指令
jsp指令的格式:
<%@ 指令名称 属性名=属性值 属性名=属性值 ... %>
1.4.1 page指令
用于配置当前jsp页面
格式:
<%@ page 属性名=属性值 属性名=属性值 ... %>常用属性:
language
contentType:配置当前jsp页面响应给客户端时指定的编码格式
import:导包
session:配置当前页面是否可以使用session内置对象,默认值是true
errorPage:用于配置如果当前页面发生了异常,跳转到哪个指定页面
isErrorPage:当页面发生异常后跳转到的指定页面可以配置isErrorPage来明确当前页面是否可以使用内置对象exception,默认值是false,只有值是true时,才能使用exception内置对象
isELIgnored:每一个jsp页面都默认具有解析el表达式的能力,true表示忽略当前页面中所有el表达式,false不忽略
1.4.2 include指令
在当前页面中嵌入其他页面
格式:
<%@ include file="页面资源的路径" %>
1.4.3 taglib指令
用于引入标签库
jstl:jsp standard tag library,jsp标准标签库
二,EL
2.1 概念和基本语法
EL:Expression Language,表达式语言
作用:简化jsp中的java代码,用于获取数据
语法格式:
${ 表达式 }注:
jsp默认支持EL
EL表达式的结果如果是null对象,则显示空字符串
忽略EL表达式
忽略整个页面的EL表达式,在jsp的page指令中配置
isELIgnored="true"
忽略指定的一条EL语句
\${name}
2.2 EL的运算符
.
:访问属性和方法
[]
:访问数组、集合
+、-、*、/(div)、%(mod)
==(eq)、!=(ne)、>(gt)、<(lt)、>=(ge)、<=(le)
&&(and)、||(or)、!(not)
empty
:判断容器对象是否为空或者内容是否为空
2.3 EL的隐式对象
pageScope
requestScope
sessionScope
applicationScope
param
paramValues
header
headerValues
initParam
cookie
pageContext
2.3.1 获取域对象中的数据
pageScope
requestScope
sessionScope
applicationScope
语法格式:
${ 域对象的名称.键 }注:在获取域对象中值的时候,可以简化成
${键}
,会根据从小到大的范围查找,一旦找到了就返回结果不再继续查找,pageScope < requestScope < sessionScope < applicationScope
获取域对象中对象的属性值:
语法格式:
${ 域对象的名称.键.属性名 }注:获取属性值本质上是在调用对象的getXxx()方法,getXxx()方法必须有返回值。当我们调用属性名时,系统会判断当前对象的类中是否有getXxx()方法将get去掉,剩下的首字母变小写与这个属性名是一致的,如果有就调用该对象的getXxx()方法并获取返回值
获取域对象中List集合中对象的属性:
${ 域对象的名称.键[索引] }:获取集合中指定索引的对象 ${ 域对象的名称.键[索引].属性名 }:获取集合中指定索引的对象的指定属性值
获取域对象中Map集合中对象的属性:
获取集合中的值
${ 域对象的名称.键["Map中的键"] } ${ 域对象的名称.键.Map中的键 }获取集合中值的属性
${ 域对象的名称.键["Map中的键"].属性名 } ${ 域对象的名称.键.Map中的键.属性名 }
2.3.2 获取请求参数
param
${ param.键 }paramValues
${ paramValues.键 }:获取数组,需要${ paramValues.键[索引] }来获取数组中的某个元素
2.3.3 获取请求头中的参数
header
${ header.键 } ${ header["键"]}headerValues
${ headerValues.键 } ${ headerValues["键"]}
2.3.4 获取cookie中的参数
cookie
${ cookie.键} 例如:${ cookie.age}:获取键为age的Cookie对象${ cookie.键.value}:获取指定Cookie对象的value值
2.3.5 获取全局初始化参数
initParam
${ initParam.键 }
2.3.6 pageContext
获取其他8个内置对象
${ pageContext.request} ${ pageContext.out} ${ pageContext.session } ...
常用于获取虚拟路径
${ pageContext.request.contextPath}
三,JSTL
3.1 概念
jstl:jsp standard tag library,jsp标准标签库
它由Apache组织提供的开源免费的jsp标签库
作用:简化jsp中的java代码,提供了对el结果的流程控制
注:jstl的使用要结合el
准备工作:
必须先引入jstl的依赖
<dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>
配置jsp页面中的taglib
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3.2 if 标签
<c:if test=""></c:if>
if
标签有一个必需的属性test
test
属性用于接收条件表达式,表达式的结果为true,执行标签体内的代码,false,则不执行注:
c:if
标签没有对应的else标签,如果需要定义与if对立的else情况,需要重新定义一个c:if
<c:if test="${u == null}"> <a href="/login.jsp">登录</a> <a href="">注册</a> </c:if> <c:if test="${ u!=null}"> 欢迎,<a href="/home.jsp">${u.username}</a> <a href="/exit">退出</a> </c:if>
3.3 choose 标签
<c:choose> <c:when test=""></c:when> <c:when test=""></c:when> <c:when test=""></c:when> <c:when test=""></c:when> <c:otherwise></c:otherwise> </c:choose>
when
标签用于根据test
这个必需的属性来判断是否执行when
标签体内的内容,test
为true执行,反之,不执行;如果多个
when
中的test
的结果为true,则执行第一个test
结果为true的;如果没有一个
when
中的test
的结果为true,则执行otherwise
标签体内的内容;
3.4 forEach 标签
普通for循环
需要的属性:
begin:起始值
end:结束值
step:步长
var:临时遍历
varStatus
index属性:临时变量的值
count属性:循环的次数
<c:forEach begin="1" end="10" step="1" var="a"> <button>按钮${ a }</button> <br> </c:forEach>
增强for循环
需要的属性:
items:域对象中的集合
var:当前遍历到的集合中的对象
varStatus
index属性:集合中元素的下标
count属性:循环的次数
<table border="1px"> <tr> <td>用户名</td> <td>密码</td> </tr> <c:forEach items="${ users }" var="t"> <tr> <td>${t.username}</td> <td>${t.password}</td> </tr> </c:forEach> </table>