问题思考:
在Java web开发的过程中,我们不可避免的要接触这几个对象,在了解他们的区别之前,要先普及一个知识。可曾想过,为什么jsp页面中不用创建就可以直接使用这几个对象?
那是因为我们看到的jsp页面不是用户最终看到的页面内容,每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器(Servlet引擎)像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序,用户看到的是被编译处理之后生成的HTML页面。而这几个对象的创建就是在这个servlet类的父类org.apache.jasper.runtime.HttpJspBase类(HttpJspBase类是HttpServlet的一个子类)中创建的,有关JSP的运行原理详见JSP起源、JSP的运行原理、JSP的执行过程
具体区别:
这四个对象都可以通过setAttribute(String,Object)和getAttribute(String)方法来设置和访问数据,他们的主要区别在于数据的使用范围,(pageContext,request,session,application影响范围从小到大)具体区别如下:
1. pageContext