l每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用。
l由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。
lJSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用。
这9个对象分别是哪些,以及作用也是笔试经常考察的知识点
---------------------------------------------------------------------------------------
lRequest
lResponse
lSession
lApplication //统计首页访问次数
lConfig
lPage
lexception
lOut
lpageContext
==================================================
lout隐式对象用于向客户端发送文本数据。
lout对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
lJSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
l只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
ü设置page指令的buffer属性关闭了out对象的缓存功能
üout对象的缓冲区已满
ü整个JSP页面结束
lpageContext对象是JSP技术中最重要的一个对象,它代表JSP页面的运行环境,这个对象不仅封装了对其它8大隐式对象的引用,它自身还是一个域对象,可以用来保存数据。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其它资源、检索其它域对象中的属性等。
lgetException方法返回exception隐式对象
lgetPage方法返回page隐式对象
lgetRequest方法返回request隐式对象
lgetResponse方法返回response隐式对象
lgetServletConfig方法返回config隐式对象
lgetServletContext方法返回application隐式对象
lgetSession方法返回session隐式对象
lgetOut方法返回out隐式对象
lpageContext封装其它8大内置对象的意义,思考:如果在编程过程中,把pageContext对象传递给一个普通java对象,那么这个java对象将具有什么功能?
lpageContext对象的方法
üpublic void setAttribute(java.lang.String name,java.lang.Object value)
üpublic java.lang.Object getAttribute(java.lang.String name)
üpublic void removeAttribute(java.lang.String name)
lpageContext对象中还封装了访问其它域的方法
üpublic java.lang.Object getAttribute(java.lang.String name,int scope)
üpublic void setAttribute(java.lang.String name,java.lang.Object value,int scope)
üpublic void removeAttribute(java.lang.String name,int scope)
l代表各个域的常量
üPageContext.APPLICATION_SCOPE
üPageContext.SESSION_SCOPE
üPageContext.REQUEST_SCOPE
üPageContext.PAGE_SCOPE
lfindAttribute方法 (*重点,查找各个域中的属性)
lPageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法。
l方法接收的资源如果以“/”开头, “/”代表当前web应用。
JSP标签也称之为JspAction(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护