Java Server Pages:java服务器端页面
一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
JSP本质上就是一个Servlet
基础语法
定义代码块
<% 代码 %>
:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么<%! 代码 %>
:定义的java代码,在jsp转换后的java类的成员位置。<%= 代码 %>
:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
JSP的内置对象:
在jsp页面中不需要获取和创建,可以直接使用的对象(共九个)
request
response
out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
response.getWriter()和out.write()的区别:
在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
response.getWriter()数据输出永远在out.write()之前
JSP指令
page
配置JSP页面的
contentType:等同于response.setContentType()
设置响应体的mime类型以及字符集
设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
import:导包
errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
isErrorPage:标识当前也是是否是错误页面。
true:是,可以使用内置对象exception
false:否。默认值。不可以使用内置对象exception
include
页面包含的。导入页面的资源文件
<%@include file="hello.jsp"%>taglib
导入资源
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>prefix:前缀,自定义的
页面显示顺序
response.getWriter().write("写入的内容")<%@ include file="要导入的内容.jsp"%><h1>html标签</h1><%= 输出内容 %>
案例
index.jsp
<%@ page contentType="text/html;charset=UTF-8"pageEncoding="utf-8"import="java.util.List"errorPage="error.jsp"language="java" %><%@ include file="hello.jsp"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%--注释--%><html><head><title>Title</title></head><body><h1>hell1o</h1><% System.out.println("Hello World" + a); %><% response.getWriter().write("<h6>heeeello</h6>");%><%= "<h6>hello</h6>"%><%! int a = 10; %><c:forEach></c:forEach></body></html>

error.jsp<%@ page contentType="text/html;charset=UTF-8"pageEncoding="utf-8"isErrorPage="true"errorPage="error.jsp"language="java" %><html><head><title>Title</title></head><body><h1>页面错误</h1><%= exception.getMessage() %></body></html>
hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><h1>xxxxxxxxxxxx</h1>
内置对象
一共有9个:
| 变量名 | 真实类型 | 真实类型 |
|---|---|---|
| pageContext | PageContext | 当前页面共享数据,还可以获取其他八个内置对象 |
| request | HttpServletRequest | 一次请求访问的多个资源(转发) |
| session | HttpSession | 一次会话的多个请求间 |
| application | ServletContext | 所有用户间共享数据 |
| response | HttpServletResponse | 响应对象 |
| page | Object | 当前页面(Servlet)的对象 this |
| out | JspWriter | 输出对象,数据输出到页面上 |
| config | ServletConfig | Servlet的配置对象 |
| exception | Throwable | 异常对象 |
EL表达式
语法:${表达式}
运算表达式
算数运算符:
+ - * (div) %(mod)比较运算符:
> < >= <= == !=逻辑运算符:
&&(and) ||(or) !(not)空运算符:
empty功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
${empty list}
:判断字符串、集合、数组对象是否为null或者长度为0${not empty str}
:表示判断字符串、集合、数组对象是否不为null 并且 长度>0值
获取值
域名称:
pageScope --> pageContext
requestScope --> request
sessionScope --> session
applicationScope --> application(ServletContext)
举例:在request域中存储了name=张三
获取:${requestScope.name}
获取对象
对象:${域名称.键名.属性名}
本质上会去调用对象的getter方法
List集合:${域名称.键名[索引]}
Map集合:
${域名称.键名.key名称}
${域名称.键名["key名称"]}
JSTL
JavaServer Pages Tag Library JSP标准标签库
if
<c:if test="true"><h1>我是真...</h1></c:if>
choose
<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
<c:forEach begin="1" end="10" var="i" step="2" varStatus="s">${i} <h3>${s.index}<h3> <h4> ${s.count} </h4><br></c:forEach><c:forEach items="${list}" var="str" varStatus="s">${s.index} ${s.count} ${str}<br></c:forEach>




