1. 概念:
* Java Server Pages: java服务器端页面
* 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码
* 用于简化书写!!!
2. 原理
* JSP本质上就是一个Servlet。第一次访问jsp页面的时候,Tomcat会帮我们把jsp页面翻译成为一个Java源文件。并且对它进行翻译为.class字节码程序。我们打开Java源文件不难发现其里面的内容是:
我们跟踪源代码发现,HttpJspBase类,它直接地继承了HttpServlet类。也就是说。jsp翻译出来的Java类,它间接地继承了HttpServlet类,也就是说,翻译出来的是一个Servlet程序。
总结:通过翻译的Java源代码我们就可以得到结果:jsp就是Servlet程序。
大家可以去观察翻译出来的Servlet程序的源代码,不难发现,其底层实现,也是通过输出流,把html页面数据回传给客户端。
JSP头部的page指令
jsp的page指令可以修改jsp页面的一些重要的属性,或者行为。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
i. language属性 表示jsp翻译后是什么语言。暂时只支持Java。
ii. contenType属性 表示jsp返回的数据类型是什么,也是源码中 response.setContentType()参数值
iii.pageEncoding属性 表示当前jsp页面本身的字符集
iv.import属性 跟Java源代码中一样,用于导包、导类
============================以下两个属性给out输出流使用=====================
v. autoflush属性 设置当out输出缓冲流区满了之后,是否自动刷新缓冲区。默认 值是true。
vi.buffer属性 设置out缓冲区的大小。默认是8kb
=========================================================================
vii.errorPage属性 设置当jsp页面运行时出错,自动跳转去的错误页面路径。
viii. isErrorPage 属性 设置当前jsp页面是否是错误信息页面。默认是false。如果是true 可以获取异常信息。
ix. session属性 设置访问当前jsp页面,是否会创建HttpSession对象。默认是true
x. extends属性 设置jsp翻译出来的Java类默认继承谁。
3. JSP的脚本:JSP定义Java代码的方式
1. <% 代码 %>:代码脚本:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。可以定义局部变量或者调用方法,但不能定义方法。
2. <%! 代码 %>:定义的java代码,在jsp转换后的java类的成员位置。称作声明脚本 ,其中写的内容将来会直接翻译在Servlet类中,因为我们可以在类中定义方法和属性以及全局变量,所以我们可以在<%!%>中声明方法、属性、全局变量。一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,必须先声明这些变量和方法然后才能使用它们。
<%! int num = 1;%>
<%System.out.println(num);%>
//输出1
3. <%= 表达式 %>:表达式脚本,定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
由于表达式脚本翻译的内容都在_jspService()方法中,所以_jspService()方法中的对象都恶意直接使用。
表达式脚本中的表达式不能以分号结束。
4.<%@%>
这表示是指令,主要用来提供整个JSP 网页相关的信息,并且用来设定JSP网页的相关属性,
例如:网页的编码方式、语法、信息等。
目前有三种指令:page、include 和taglib,每一种指令都有各自的属性。
page 指令是最复杂的JSP指令,它的主要功能为设定整个JSP 网页的属性和相关功能。
include 指令表示:在JSP 编译时插入一个包含文本或代码的文件,这个包含的过程是静态的,
而包含的文件可以是JSP 网页、HTML 网页、文本文件,或是一段Java 程序。
taglib 指令能够让用户自定义新的标签。
//声明脚本语言的种类,目前只支持JAVA语言。默认为JAVA。
<%@ page language="java" %>
5.<%-- --%>和
是显式注释
<%-- --%>是隐式注释
在JSP中如果用
则在浏览器源代码中看得到
<%-- --%>则在浏览器源代码中看不到
这里注意一点,如果是这两个注释用在java代码上,会有隐性的坑:
这种注释是静态注释,只影响前端的代码,后端的代码还是会执行;
<%-- --%>这种注释是动态注释,前后端的代码都会被屏蔽
相当于
用来注释html或者xml的
<%-- --%>用来注释java代码的
一般禁止用 包含java代码
JSP的三种注释:
i. html注释
<-- 这是html注释 -->
html注释会被翻译到Java源代码中。在_jspService方法里,以out.write输出到客户端。
ii. java注释
//单行Java注释
iii. jsp注释
<%-- 这是jsp注释 --%>
jsp注释可以注释掉jsp页面中所有代码。
4. JSP的九大内置对象:
* 在jsp页面中不需要获取和创建,可以直接使用的对象
*是指Tomcat在翻译jsp页面成为Servlet源代码后,内部提供的九大内置对象。
* request 请求对象
* response 响应对象
*pageContext jsp的上下文对象
*session 会话对象
*application ServletContext对象
*config ServletConfig对象
* out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
* response.getWriter()和out.write()的区别:
* 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
* response.getWriter()数据输出永远在out.write()之前
*page 指向当前的jsp对象
*exception 异常对象
jsp四大域对象:
jsp静态包含:
jsp动态包含:
动态包含的 底层原理:
jsp请求转发:
<%--
是请求转发标签,它的功能是请求转发
page属性设置请求转发的路径
--%>



