八、Java ServerPages(jsp)
1、什么是jsp,以及作用
1.1、什么是jsp
1、内容
1、jsp全称是java Server pages 。java的服务器页面
2、jsp 的主要作用是代替Servlet程序回传html页面的数据
3、因为servlet回传html页面数据很繁琐,开发成本和维护成本很高
4、jsp和html页面一样,都是存放在web目录下,访问也一样
2、jsp页面的本质
2.1、jsp本质是一个servlet程序
1、内容
1、第一次访问jsp页面,tomcat服务器会帮我们把jsp页面翻译成一个java源文件,并且进行编译为.class字节码文件
2、HttpJspBase类、直接继承HttpServlet
3、底层实现,通过输出流。把html页面数据回传给客户端
3、jsp的三种语法
3.1、jsp的头部page指令
1、内容
1、jsp的page指令可以修改jsp页面中的一些重要属性,或者行为。
2、属性

3.2、jsp的常用脚本
1、声明脚本(使用少)
1、格式
<% 声明的java代码 %>
2、声明脚本和代码翻译对照
1、例子

3.3、表达式脚本(常用)
1、格式
1、格式
<%= 表达式 %>
2、作用:jsp页面上的数据数据
2、表达式脚本的特点
1、所有表达式脚本都会被翻译到_jspService()方法中
2、表达式脚本都会被翻译成为out.print()输出到页面上
3、由于表达式脚本翻译的内容都是在_jspService()方法中,所以_jspService()方法中的对象都是可以直接使用的
4、表达式脚本中的表达式不能以分号结束。
3、翻译对照

3.4、代码脚本
1、脚本格式

2、脚本的特点
1、代码脚本翻译之后都是在_jspService()方法中
2、代码脚本由于翻译到_jspService()方法中,所以在_jspService()方法中的现有对象都可以直接使用
3、还可以由多个代码脚本块组合完成一个完整的java语句。
4、代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据
3、例子

4、jsp中的三种注释
4.1、html注释
1、格式
<!-- 注释内容弄 -->
2、html注释会被翻译到java源码中,在_jspService()方法中,以out.writer输出到客户端。
4.2、java注释

4.3、jsp注释

5、jsp的内置对象
5.1、九大内置对象
1、内容
1、jsp中的内置对象,是指tomcat在翻译jsp页面成为servlet源码后,内部提供的九大对象,也叫内置对象。
2、内置对象
| 对象名 | 内容 |
|---|---|
| request | 请求对象 |
| response | 响应对象 |
| pageContext | jsp的上下文对象 |
| session | 会话对象 |
| application | ServletContext对象 |
| config | ServletConfig对象 |
| out | jsp输出对象 |
| page | 指向当前jsp对象 |
| exception | 异常对象 |
5.2、jsp的四大对象
1、内容
1、四个域对象

2、域对象是可以像Map一样存储数据的对象。四个域对象功能一样。不同的是它们对数据的存储范围。
3、虽然四个域对象都可以存取数据,使用上是有先后顺序的。
4、域对象的优先级
1、使用的先后顺序,从小到大的范围

5.3、jsp中的out输出和response.getWriter输出的区别
1、简介
1、response中表示响应,我们经常用于设置返回给客户端的内容(输出)
2、out也是用户做输出的使用。
2、图解
1、jsp页面中所有代码执行完成后会做以下两个操作和图解

3、注意事项
1、由于jsp翻译后,底层源代码都使用out进行输出,所以一般情况下。我们在jsp页面中统一使用out进行输出。避免打乱页面输出内容的顺序。
2、out.write():输出字符串没有问题
3、out.print():输出任意数据都没有问题(都转化成字符串后调用的write输出)
4、在jsp页面中,可以统一使用out.print()进行输出
6、jsp的常用标签
6.1、jsp静态标签
1、内容
1、格式
<%@ include file="xxxx"
2、file 属性指定你要包含的 jsp 页面的路径
3、地址中第一个斜杠 / 表示为 http://ip:port/工程路径/ 映射到代码的 web 目录
2、特点
1、静态包含不会翻译被包含的jsp页面
2、静态包含其实是把被包含的jsp页面的代码拷贝到包含的位置进行输出
3、例子
1、包含页面代码
<%--静态包含--%>
<%-- 哈哈哈<br>--%>
<%-- <%@ include file="/include/footer.jsp"%>--%>
2、被包含页面代码
<body>
脚本信息<br>
脚本事件<br>
</body>
6.2、jsp动态包含
1、内容
1、格式
<jsp:include page=""></jsp:include>
2、特点
1、动态包含会把包含的jsp页面翻译成为java代码
2、动态包含底层代码使用如下的代码去调用被包含的jsp页面执行输出。JSPRuntimeLibrary.include(request,response,"/include/footer.jsp",out,false);
3、动态包含,还可以传递参数

3、底层原理

6.3、jsp标签-请求转发
1、实例说明
