1.什么是jsp,它有什么用?
jsp的全称是java server pages。Java 的服务器页面。
jsp的主要作用是代替Servlet 程序回传html页面的数据。
因为Servlet 程序回传html页面数据是一件非常繁锁的事情。开发成本和维护成本都极高。
<%@ page contentType-"text/html ;charset-UTF - 8" language-"java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
这是html页面数据
</body>
</html>
2.jsp的本质是什么。
jsp页面的本质是什么一个Servlet程序。
当我们第一次访问 jsp页面的时候。Tomcat 服务器会帮我们把jsp 页面翻译成为一个java源文件。并且对它进行编译成为.class字节码程序。我们打开java源文件不难发现其里面的内容是:
我们跟踪原代码发现,HttpJspBase类它直接地继承了HttpServlet 类。也就是说,jsp 翻译出来的java类,它间接了继承了HttpServlet类,所以说翻译出来的是一个 Servlet程序
大家也可以去观察翻译出来的Serlet程序的源代码,不难发现。其底层实现,也是通过输出流。把html页面数据回传给客户端
总结:通过翻译的java 源代码我们就可以得到结果: jsp 就是Servlet程序。
3.jsp的三种语法
a)jsp头部的page指令
jsp的page指令可以修改jsp页面中一些重要的属性,或者行为。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
属性 | 作用 |
---|---|
language | 表示jsp翻译后是什么语言文件。暂时只支持java。 |
contentType | 表示jsp返回的数据类型是什么。也是源码中esponse.setContentType()参数值 |
pageEncoding | 表示当前jsp页面文件本身的字符集。 |
import | 跟java源代码中一样。用于导包,导类。 |
autoFlush | 设置当out输出流缓冲区满了之后,是否自动刷新冲级区。默认值是true。 |
buffer | 设置out缓冲区的大小。默认是8kb |
errorPage | 设置当jsp页面运行时出错,自动跳转去的错误页面路径。 |
isErrorPage | 设置当前jsp页面是否是错误信息页面。默认是false。如果是true可以获取异常信息。 |
session | 设置访问当前jsp页面,是否会创建HttpSession对象。默认是true。 |
extends | 设置jsp翻译出来的java类默认继承谁。 |
b)jsp中的常用脚本
i. 声明脚本
声明脚本的格式是:
<%!
声明java代码
%>
作用:可以给jsp翻译出来的java类定义属性和方法甚至是静态代码块。内部类等。
例:
<%!
private Integer id;
private String name;
private static Map<String, object> map;
%>
ii.表达式脚本
表达式脚本的格式是: <%=表达式%>
表达式脚本的作用是:的jsp页面上输出数据。
表达式脚本的特点:
- 所有的表达式脚本都会被翻译到 _ jspService() 方法中
- 表达式脚本都会被翻译成为out.print()输出到页面上
- 由于表达式脚本翻译的内容都在_ jspService() 方法中,所以_jspService()方法中的对象都可以直接使用。
- 表达式脚本中的表达式不能以分号结束。
例:
<%=12 %>
<%=12.12 %>
<%="this is string" %>
iii.代码脚本
代码脚本的格式是:
<%
java语句
%>
代码脚本的作用是:可以在jsp页面中,编写我们自己需要的功能(写的是java语。
代码脚本的特点是:
- 代码脚本翻译之后都在jspService 方法中
- 代码脚本由于翻译到jspServicel(方法中, 所以在jspServicel(方法中的现有对象都可以直接使用。
- 还可以由多个代码脚本块组合完成一个完整的java语句。
- 代码脚本还可以和表达式脚本一起组合使用,在jsp页面上输出数据
例:
c)jsp中的三种注释
i.html注释
<!--这是html注释-->
html注释会被翻译到java源代码中。在jspService 方法里,以out.writer输出到客户端。
ii.java注释
<%
//单行java 注释
/*多行java注释 */
%>
java注释会被翻译到java源代码中。
iii. jsp注释
<%--这是jsp注释--%>
jsp注释可以注掉jsp 页面中所有代码。
4.jsp九大内置对象
九大内置对象 | 对应的对象 |
---|---|
request | 请求对象 |
response | 响应对象 |
pageContext | jsp的上下文对象 |
session | 会话对象 |
application | ServletContext对象 |
config | ServletConfig对象 |
out | jsp输出流对象。 |
page | 指向当前jsp的对象 |
exception | 异常对象 |
5.四个域对象
域对象是可以像Map 一样存取数据的对象。四个域对象功能一样。不同的是它们对数据的存取范围。
域对象 | 作用域范围 |
---|---|
pageContext(PageContextlmpl类) | 当前jsp页面范围内有效 |
request(HttpServletRequest类) | 一次请求内有效 |
session(HttpSession类) | 一个会话范围内有效(打开浏览器访问服务器,直到关闭浏览器) |
application(ServletContext类) | 整个web工程范围内都有效(只要web工程不停止,数据都在) |
6.jsp中的out输出和response.getWriter输出的区别
response中表示响应,我们经常用于设置返回给客户端的内容(输出)out也是给用户做输出使用的。
当jsp页面中所有代码执行完成后会做以下两个操作:
- 执行out. flush()操作,会把out缓冲区中的数据追加写入到response缓冲区末尾
- 执行response的刷新操作,把全部数据写给客户端
由于jsp翻译之后,底层源代码都是使用out来进行输出,所以一般情况下。我们在jsp页面中统一使用 out来进行输出。避免打乱页面输出内容的顺序。
7.jsp的常用标签
a)jsp静态包含
b)jsp动态包含
c)jsp标签转发
等价于
小结:jsp的作用(主要用于展示画面)
将servlet查询的数据转发到jsp页面进行动态展示