每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。

由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。


JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。

1、page当前servlet对象

2、confingservletconfig对象

3、applicationservletcontext对象,当前web应用

4、response

5、request

6、session

7、out

8、exception在错误提示页面的对象,表示上一页页面抛出的异常。

9、pageContext代表整个JSP页面对象

*out

1、相当于是response.getWriter得到PrintWriter对象

2、out和response.getWriter获取到的流,稍微有些不同,在于这个out对象本身就具有一个缓冲区。利用out写出的内容,会先缓冲在out缓冲区中,直到out缓冲区满了或者整个页面结束时,out缓冲区中的内容才会被写出到response缓冲区中,最终可以带到浏览器页面进行展示。

3、page指令中的

buffer="none | 8kb | sizekb" 可以用来禁用out缓冲区或设置out缓冲区的大小,默认8kb。

autoFlush="true | false"用来设置当out缓冲区满了以后如果在写入数据时out如何处理,如果是true,则先将满了的数据自动刷新到response中后再接受新数据;如果是false,则满了再写入数据直接抛异常。

4、在jsp页面中需要进行数据输出时,不要自己获取response.getWriter,而是要使用out进行输出,防止即用out又用response.getWriter而导致输出顺序错乱的问题

*pageContext

(1)可以作为入口对象获取其他八大隐式对象的引用

getException方法返回exception隐式对象

getPage方法返回page隐式对象

getRequest方法返回request隐式对象

getResponse方法返回response隐式对象

getServletConfig方法返回config隐式对象

getServletContext方法返回application隐式对象

getSession方法返回session隐式对象

getOut方法返回out隐式对象

(2)域对象,四大作用域的入口,可以操作四大作用域中的域属性

作用范围: 当前jsp页面

生命周期: 当对jsp页面的访问开始时,创建代表当前jsp的PageContext,当对当前jsp页面访问结束时销毁代表当前jsp的pageContext

作用:在当前jsp中共享数据

public voidsetAttribute(name,value)

public java.lang.ObjectgetAttribute(name)

public voidremoveAttribute(name)

public void setAttribute(name, value,intscope)

public java.lang.ObjectgetAttribute(name,intscope)

public voidremoveAttribute(name,intscope)

PageContext.APPLICATION_SCOPE大

PageContext.SESSION_SCOPE

PageContext.REQUEST_SCOPE

PageContext.PAGE_SCOPE小

findAttribute方法 -- 搜寻四大作用域中的属性,如果找到则返回该值,如果四大作用域中都找不到则返回一个null,搜寻的顺序是从最小的域开始向最大的域开始寻找

(3)提供了请求转发和请求包含的快捷方法

pageContext.include("/index.jsp");

pageContext.forward("/index.jsp");