一、jsp基础部分
1、介绍
概念
JSP(Java Server Page),java服务器端页面,可以定义html标签,又可以定义java代码。
原理
JSP本质上就是一个Servlet
2、JSP定义Java代码的方式
-
- <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
-
- <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。
-
- <%= 代码 %>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
3、注释
- html注释:
- <!-- -->只能注释html代码片段
- jsp注释:推荐使用
- <%-- --%>可以注释所有
4、指令
作用
用于配置JSP页面,导入资源文件
格式
<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
分类
-
1、page:用来配置JSP页面的
1、contentType:等同于response.setContentType() 高级的IDE才能生效,设置响应体的mime类型以及字符集 <%@ page contentType="text/html;charset=gbk" pageEncoding="GBK" %> 低级工具,需要设置pageEncoding属性设置当前页面的字符集 <%@ page contentType="text/html" pageEncoding="GBK" %> 2、import:导包 <%@ page import="java.util.ArrayList" %> 3、errorPage:当前页面发生异常后,会自动跳转到指定的错误页面 <%@ page errorPage="500.jsp" %> 4、isErrorPage:标识当前也是是否是错误页面,默认为false,表示不可以使用内置对象exception
<!-- 500.jsp --> <%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %> <html> <head><title>Title</title></head> <body> <h1>服务器正忙...</h1> <% String message = exception.getMessage(); out.print(message); %> </body> </html>
-
2、include:页面包含的。导入页面的资源文件
<%@ include file="header.jsp"%>
-
3、taglib:引入标签库的定义,如jstl
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
5、JSP的内置对象(9个)
jsp页面中不需要获取和创建,可以直接使用的对象,他们分别是:
变量名 | 真实类型 | 作用 |
---|---|---|
request | HttpServletRequest | 一次请求访问的多个资源(转发) |
response | HttpServletResponse | 响应对象 |
response | JspWriter | 输出对象,数据输出到页面上。和response.getWriter()类似,区别是response.getWriter()数据输出永远在out.write()之前 |
pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
session | HttpSession | 一次会话的多个请求间 |
application | ServletContext | 所有用户间共享数据 |
page | Object | 当前页面(Servlet)的对象 this |
config | ServletConfig | Servlet的配置对象 |
exception | Throwable | 异常对象,需要使用page指令的isErrorPage属性为true |
二、jsp高级部分
1、EL表达式
介绍
Expression Language 表达式语言,用于替换和简化jsp页面中java代码的编写
语法及注意事项
${表达式}
注意:jsp默认支持el表达式,如果要忽略el表达式:
1、设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式。
2、${表达式} :忽略当前这个el表达式。
使用
运算符类型 | 运算符 | 功能 |
---|---|---|
算数运算符 | + - * /(div) %(mod) | |
比较运算符 | > < >= <= == != | |
逻辑运算符 | &&(and) ||(or) !(not) | |
空运算符 | empty、not empty | empty用于判断字符串、集合、数组对象是否为null或者长度是否为0,not empty则相反 |
获取值,el表达式只能从域中获取值
域名称 | 描述 |
---|---|
pageScope | page作用域 |
requestScope | request作用域 |
sessionScope | session作用域 |
applicationScope | application作用域 |
语法:
-
1、${域名称.键名}:从指定域中获取指定键的值
-
2、${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止
<% request.setAttribute("name","张三"); %> <div>获取的值为:${requestScope.name}</div>
-
3、获取对象
${域名称.键名.属性名}:本质上会去调用对象的getter方法 -
4、获取List集合
${域名称.键名[索引]} -
5、获取Map集合
${域名称.键名.key名称}或者${域名称.键名["key名称"]}
2、JSTL
介绍
JavaServer Pages Tag Library JSP标准标签库,是由Apache组织提供的开源的免费的jsp标签,主要用于简化和替换jsp页面上的java代码。
使用步骤
- 1、导入jstl相关jar包(两个)
javax.servlet.jsp.jstl.jar、jstl-impl.jar - 2、引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 3、使用标签
常用的JSTL标签
- 1、if:相当于java代码的if语句
<!-- test 必须属性,接受boolean表达式 -->
<%
//判断request域中的一个number为奇数还是偶数
request.setAttribute("number",4);
%>
<c:if test="${number % 2 != 0}">
${number}为奇数
</c:if>
<c:if test="${number % 2 == 0}">
${number}为偶数
</c:if>
- 2、choose:相当于java代码的switch语句
<%
//数字编号对应星期几
request.setAttribute("number",4);
%>
<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>
- 3、foreach:相当于java代码的for语句
<c:forEach begin="1" end="10" var="item" step="1" varStatus="s">
值:${item}---索引:${s.index}----循环次数(从1开始):${s.count}
</c:forEach>