JSP
JSP是一个特殊的页面,其中既可以定义html标签,又可以定义java代码,其本质上是servlet。
JSP中书写代码,有以下3种标签:
<% 代码 %>
:在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。<%= 代码 %>
:代码会直接输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。<%! 代码 %>
:在该标签内定义的java代码的变量是jsp转换为servlet类的成员变量。
需要说明的是,<% %>
内定义的变量可看作是servlet类中service方法定义的局部变量,而<%! %>
内定义的变量可看作servlet的成员变量。
JSP中的内置对象:
内置对象即可以直接获得的对象,
变量名 真实类型 作用
* pageContext PageContext 当前页面共享数据,还可以获取其他八个内置对象
* request HttpServletRequest 一次请求访问的多个资源(转发)
* session HttpSession 一次会话的多个请求间
* application ServletContext 所有用户间共享数据
* response HttpServletResponse 响应对象
* page Object 当前页面(Servlet)的对象 this
* out JspWriter 输出对象,数据输出到页面上
* config ServletConfig Servlet的配置对象
* exception Throwable 异常对象
JSP指令:
JSP指令用于设置JSP页面的信息,其格式如下:
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
<%@ page %>
contentType="text/html; charset=gbk"
:等同于response.setContentType()
,设置响应体的mime类型以及字符集,另外设置jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)import
:导入java包errorPage
:当前页面发生异常后,会自动跳转到指定的错误页面isErrorPage
:标识当前也是是否是错误页面。为true的话能用内置对象exception,为false的话则不能
<%@ include %>
: 页面包含的。导入页面的资源文件<%@include file="top.jsp"%>
<%@ taglib %>
: 导入资源<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
,prefix:前缀,自定义的
另外,JSP的注释为<%-- --%>
EL
在EL表达式中,有如下运算符
-
算数运算符:
+ - * /(div) %(mod)
-
比较运算符:
> < >= <= == !=
-
逻辑运算符:
&&(and) ||(or) !(not)
-
空运算符:
empty
功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0。
以下是一段示例:
${3 > 4}<br>
${3 + 4}<br>
${3 / 4}<br>
${3 div 4}<br>
${3 mod 4} <br>
${3 == 4}<br>
${3 > 4 && 3 < 4}<br>
${3 > 4 and 3 < 4}<br>
<%--为null或者长度为0--%>
${not empty str}<br>
${empty list}<br>
EL表达式获取值
EL表示的值只能从域对象中获取
-
通过
${域名称.键名}
获取: 获取对象属性是通过get方法的名称来获取 -
通过
${键名}
获取:依次从最小的域中查找是否有该键对应的值,直到找到为止
另外list可通过${域名称.键名[索引]}
获取其中集合中的成员,map可通过${域名称.键名["key名称"]}
或${域名称.键名.key名称}
获取
示例代码:
${sessionScope.name}
${requestScope.age}
${name}>
<h3>el表达式获取对象属性</h3>
<%--
el表达式获取对象属性是通过get方法的名称来获取
--%>
${requestScope.u.name}<br>
${requestScope.u.age}<br>
${requestScope.u.birthday}<br>
${requestScope.u.birthday.year}<br>
${requestScope.u.formatDate}<br>
<h3>获取list</h3>
${list}<br>
${list[0]}<br>
${list[1]}<br>
${list[10]}<br>
${list[2]}<br>
${list[2].name}<br>
<h3>获取map</h3>
${map["uname"]}<br>
${map.uname}<br>
${map.user.name}<br>
JSTL
JSTL全称JavaServer Pages Tag Library,是JSP标准标签库,其作用是简化和替换jsp页面上的java代码
由于我使用的是tomcat10,所以导入maven坐标有所不同
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
另外需要引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
常用JSTL标签如下:
-
if:相当于java的if语句,但是没有else
<c:if test="${num % 2 == 0}"> ${num}是偶数 </c:if>
-
choose相当于switch
<c:choose> <c:when test="${num == 1}">星期1</c:when> <c:when test="${num == 2}">星期2</c:when> <c:when test="${num == 3}">星期3</c:when> <c:when test="${num == 4}">星期4</c:when> <c:when test="${num == 5}">星期5</c:when> <c:when test="${num == 6}">星期6</c:when> <c:when test="${num == 7}">星期7</c:when> <c:otherwise>输入有误</c:otherwise> </c:choose> </body>
-
foreach:相当于for循环
<c:forEach begin="1" end="10" var="i" step="2" varStatus="s"> ${i} ${s.index} ${s.count}<br> </c:forEach> <!--------------> <c:forEach items="${list}" var="str" varStatus="s"> ${s.index} ${s.count} ${str} <br> </c:forEach>
var
:循环变量,step
:步长,items
:要遍历的集合 ,varStatus
:记录了循环的状态,可通过index获取循环的元素的下标,count获取遍历的次数等