1.0 jsp作用
JSP 的主要作用是代替 Servlet 程序回传 html 页面的数据。因为 Servlet 程序回传 html 页面数据是一件非常繁锁的事情。开发成本和维护成本都极高。
1.1 JSP的原理
**JSP页面本质上是一个 Servlet 程序。**当我们第一次访问 jsp 页面的时候。Tomcat 服务器会帮我们把 jsp 页面翻译成为一个 java 源文件。并且对它进行编译成为.class 字节码程序。我们打开 java 源文件不难发现其里面的内容是:
我们跟踪原代码发现,HttpJspBase 类。它直接地继承了 HttpServlet 类。也就是说。jsp 翻译出来的 java 类,它间接了继承了 HttpServlet 类。也就是说,翻译出来的是一个 Servlet 程序。
翻译出来的 Servlet 程序的源代码,不难发现。其底层实现,也是通过输出流。把 html 页面数据回传
给客户端。
out.write("\r\n");
out.write("\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("
<title>Title</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("
a.jsp 页面\r\n");
out.write("</body>\r\n");
out.write("</html>\r\n");
1.2 JSP运行过程
JspServlet 首先会将 jsp 文件代码翻译成 Servlet 的 Java 代码,然后再编译成字节码文件执行,其底层就是一个 Servlet。
- 浏览器请求 JSP 页面,Tomcat 中的 JspServlet 会先 JSP 文件翻译成 Servlet 文件:xxx_jsp.java。
- 将 xxx_jsp.java 文件编译产生字节码文件:xxx_jsp.class。
- 加载字节码文件 xxx_jsp.class 并创建 xxx_jsp 对象。
- 调用 xxx_jsp 的 service 方法处理请求并响应数据。
浏览器第一次访问 JSP 的时候,由 Tomcat 将 JSP 翻译成了 Servlet,并且编译成字节码文件,只生成1次。如果这期间修改了JSP内容,就会重新翻译。
1.3 jsp头部的指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
属性名 | 作用 |
---|---|
langauage | 表示JSP页面翻译后是什么语言文件,暂时只支持Java |
contentType | 表示JSP页面返回的数据类型是什么,也是源码中response.setContentType()的参数值 |
pageEncoding | 当前页面的字符集 |
import | 跟Java源码类似,用于导包、导类 |
autoFlush | 当out输出流缓冲区满了后,是否自动刷新。默认值是true |
buffer | 设置out缓冲区的大小,默认是8kb |
errorPage | 当JSP页面出错时,自动跳转的页面,属性值是跳转后的页面名 |
isErrorPage | 设置当前页面是否是错误信息页面。默认是false,如果是true,可以获得异常信息(在被翻译的java文件中会出现异常信息对象) |
session | 设置访问当前页面,是否创建HTTPSession对象。默认是true |
extends | 属性值是JSP页面被翻译后的Java类继承值。默认值是org.apache.jasper.runtime.HttpJspBase |
1.5 jsp九大内置对象
-
由JSP规范提供,不用编写者实例化。
-
通过Web容器实现和管理
-
只有在脚本元素的表达式或代码段中才可使用(<%=使用内置对象%>或<%使用内置对象%>)
-
所有JSP页面均可使用
1、request对象
request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
2、response对象
response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
3、session对象
session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
4、application对象
application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
5、out 对象
out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
6、pageContext 对象
pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
7、config 对象
config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
8、page 对象
page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。
9、exception 对象
exception 对象的作用是显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。
1.4 jsp四大域对象
四个域对象功能一样,存取范围不一样
对象 | 继承类 | 范围 |
---|---|---|
pageContext | pageContextImpl类 | 当前jsp页面数据有效 |
request | HttpServletRequest类 | 一次请求有效 |
session | HttpSession类 | 一次会话 |
application | ServletContext类 | 整个web工程有效, |