第一,哪9大内置对象?
1.request
2.response
3.Exception
4.pageContext
5.session
6.application
7.config
8.out
9.page
第二,jsp是什么?
全称Java server pages,就是Java服务器页面。所以它的本质还是Java,并不是另一种开发语言。有些人就会说啦,你说是Java它就是啊?证据呢!
证据如下:
1.每个jsp页面的顶部都有这样一句代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
具体什么意思我就不翻译了,但是看见import="java.util.*"这句话就知道它和Java有点关系了。
2.服务器在读.jsp文件的时候,会将其转成.java文件,然后在由编译器处理生成.class文件。
该文件的存在路径是:(Tomcat安装路径)\work\Catalina\localhost\_\org\apache\jsp\jsp
打开其中的.java文件可以看见,.jsp文件已经被转成相对应的类文件了,如下图
(上图为list_jsp.java在notepad++中打开的样子)
从代码中可以看出,该类有4条import语句,前3个包是在JavaEE 6.0 Generic Library中。
该类中有四个方法(每个.jsp生产的.java中都有这个四个方法),如下:
1.getDependants(); //返回值是一个带泛型的Map集合
2._jspInit(); //初始化方法
3._jspDestroy(); //卸载方法
4._jspService(); //此时9大内置对象隆重登场!
第三,欢迎9大内置对象隆重登场!
在_jspService()方法中,方法参数为request和response,且抛出异常;方法中的局部变量里又有剩下的6个内置对象。
1.javax.servlet.http.HttpServletRequest类型的request对象:(接口)
2.javax.servlet.http.HttpServletResponse类型的response对象:(接口)
这里说个题外话,引用数据类型interface就算不写abstract修饰符,它默认也是抽象的,所以写不写都可以。
3.Exception
4.javax.servlet.jsp.PageContext类型的pageContext对象:(抽象类)
5.javax.servlet.http.HttpSession类型的session对象:(接口)
6.javax.servlet.ServletContext类型的application对象:(接口)
7.javax.servlet.ServletConfig类型的config对象:(接口)
8.javax.servlet.jsp.JspWriter类型的out对象:(抽象类)
9.java.lang.Object类型的page对象:(普通类)
--------------------------------------华丽的分割线--------------------------------
有人会问了,为什么_jspx_out和_jspx_page_context这两个不属于内置对象呢?
因为从下面的代码可以看出,它们是分别被out和pageContext赋值的!
补充一点,每个.jsp生成的类都继承org.apache.jasper.runtime.HttpJspBase这个抽象类
实现org.apache.jasper.runtime.JspSourceDependent这个接口。这个抽象类和接口在
(MyEclipse安装路径)\plugins\org.apache.jasper.glassfish_2.2.2.v201205150955.jar中,内容如下: