javaWEB总结(12):JSP页面的九个隐含对象

来源:互联网 发布:东东数据cf刷枪教程 编辑:程序博客网 时间:2024/06/14 01:52

前言

jsp本质上是一个servlet,而在jsp中有九个不用声明就可以使用的对象,我们叫他隐含对象。本文基于上文所写,如有需要可查看上一篇文章javaWEB总结(11):JSP简介及原理.



打开上次使用的login_jsp.java文件


    /*      * Generated by the Jasper component of Apache Tomcat      * Version: Apache Tomcat/7.0.54      * Generated at: 2016-11-26 07:51:43 UTC      * Note: The last modified time of this file was set to      *       the last modified time of the source file after      *       generation to assist with modification tracking.      */      package org.apache.jsp;            import javax.servlet.*;      import javax.servlet.http.*;      import javax.servlet.jsp.*;            public final class login_jsp extends org.apache.jasper.runtime.HttpJspBase          implements org.apache.jasper.runtime.JspSourceDependent {              private static final javax.servlet.jsp.JspFactory _jspxFactory =                javax.servlet.jsp.JspFactory.getDefaultFactory();              private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;              private javax.el.ExpressionFactory _el_expressionfactory;        private org.apache.tomcat.InstanceManager _jsp_instancemanager;              public java.util.Map<java.lang.String,java.lang.Long> getDependants() {          return _jspx_dependants;        }              public void _jspInit() {          _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();          _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());        }              public void _jspDestroy() {        }              public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)              throws java.io.IOException, javax.servlet.ServletException {                final javax.servlet.jsp.PageContext pageContext;          javax.servlet.http.HttpSession session = null;          final javax.servlet.ServletContext application;          final javax.servlet.ServletConfig config;          javax.servlet.jsp.JspWriter out = null;          final java.lang.Object page = this;          javax.servlet.jsp.JspWriter _jspx_out = null;          javax.servlet.jsp.PageContext _jspx_page_context = null;                      try {            response.setContentType("text/html; charset=utf-8");            pageContext = _jspxFactory.getPageContext(this, request, response,                      null, true, 8192, true);            _jspx_page_context = pageContext;            application = pageContext.getServletContext();            config = pageContext.getServletConfig();            session = pageContext.getSession();            out = pageContext.getOut();            _jspx_out = out;                  out.write("\r\n");            out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");            out.write("<html>\r\n");            out.write("<head>\r\n");            out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\r\n");            out.write("<title>my first jsp</title>\r\n");            out.write("</head>\r\n");            out.write("<body>\r\n");            out.write("\t");       out.write("Hello World") ;            out.write("\r\n");            out.write("</body>\r\n");            out.write("</html>");          } catch (java.lang.Throwable t) {            if (!(t instanceof javax.servlet.jsp.SkipPageException)){              out = _jspx_out;              if (out != null && out.getBufferSize() != 0)                try { out.clearBuffer(); } catch (java.io.IOException e) {}              if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);              else throw new ServletException(t);            }          } finally {            _jspxFactory.releasePageContext(_jspx_page_context);          }        }      }  

我们只看下面这段代码

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)        throws java.io.IOException, javax.servlet.ServletException {    //参数中定义了两个隐含变量 request和 response    //下面定义了六个隐含变量   pageContext,session,application,config,out,page   final javax.servlet.jsp.PageContext pageContext;    javax.servlet.http.HttpSession session = null;    final javax.servlet.ServletContext application;    final javax.servlet.ServletConfig config;    javax.servlet.jsp.JspWriter out = null;    final java.lang.Object page = this;//…………………………//<%%>中的代码//………………………… }

可以看到共有八个隐含对象

(1) request: HttpServletRequest的一个对象;

(2) response: HttpServletResponse的一个对象;(页面中几乎不用)

(3) pageContext: 页面的上下文,是PageContext的一个对象,可以从中获取其他8个隐含对象,也可以从中获取当前页面的其他信息(可参考如下API中PageContext对象的方法);(自定义标签时使用)


Method Summaryabstract  voidforward(String relativeUrlPath)
           This method is used to re-direct, or "forward" the current ServletRequest and ServletResponse to another active component in the application. ErrorDatagetErrorData()
          Provides convenient access to error information.abstract  ExceptiongetException()
          The current value of the exception object (an Exception).abstract  ObjectgetPage()
          The current value of the page object (In a Servlet environment, this is an instance of javax.servlet.Servlet).abstract  ServletRequestgetRequest()
          The current value of the request object (a ServletRequest).abstract  ServletResponsegetResponse()
          The current value of the response object (a ServletResponse).abstract  ServletConfiggetServletConfig()
          The ServletConfig instance.abstract  ServletContextgetServletContext()
          The ServletContext instance.abstract  HttpSessiongetSession()
          The current value of the session object (an HttpSession).abstract  voidhandlePageException(Exception e)
           This method is intended to process an unhandled 'page' level exception by forwarding the exception to the specified error page for this JSP.abstract  voidhandlePageException(Throwable t)
           This method is intended to process an unhandled 'page' level exception by forwarding the exception to the specified error page for this JSP.abstract  voidinclude(String relativeUrlPath)
           Causes the resource specified to be processed as part of the current ServletRequest and ServletResponse being processed by the calling Thread.abstract  voidinclude(String relativeUrlPath, boolean flush)
           Causes the resource specified to be processed as part of the current ServletRequest and ServletResponse being processed by the calling Thread.abstract  voidinitialize(Servlet servlet,ServletRequest request,ServletResponse response,String errorPageURL, boolean needsSession, int bufferSize, boolean autoFlush)
           The initialize method is called to initialize an uninitialized PageContext so that it may be used by a JSP Implementation class to service an incoming request and response within it's _jspService() method. BodyContentpushBody()
          Return a new BodyContent object, save the current "out" JspWriter, and update the value of the "out" attribute in the page scope attribute namespace of the PageContext.abstract  voidrelease()
           This method shall "reset" the internal state of a PageContext, releasing all internal references, and preparing the PageContext for potential reuse by a later invocation of initialize().

(4) session: 代表游览器和服务器的一次会话,是HttpSession的一个对象;

(5) application: 代表当前web应用,是ServletContext的一个对象;

(6) config: 当前jsp对应的servlet的ServletConfig对象,需要访问当前jsp配置的初始化参数(如下);(几乎不使用)

<servlet>          <servlet-name></servlet-name>        <jsp-file>            <!-- 与java文件不同在于此标签,填写jsp文件的具体路径                                     ,如WebContent下的index.jsp                                    则填写/index.jsp                                   -->        </jsp-file>    </servlet>        <servlet-mapping>        <servlet-name></servlet-name>        <url-pattern></url-pattern>    </servlet-mapping>

(7) out: JspWriter的一个对象,调用out.println()可以直接将字符串打印到游览器上;

(8) page: 指向当前JSP对应的Servlet对象的引用,但为Object类型,只能调用Object对象的方法;(几乎不使用)


第九个隐含对象

exception:在声明了page指令的isErrorPage="true"时才可以使用(如下);


<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><!-- 此处声明了page的isErrorPage --><%@ page isErrorPage="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>my first jsp</title></head><body><% out.write("Hello World") ;exception.getMessage();%></body></html>

作用域范围

pageContext--> request--> session--> application 对属性的作用域从小到大。


4 1
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高中生爱玩游戏怎么办 宝贝发烧不退烧怎么办 孩子行笔速度慢怎么办 孩子不会读英语怎么办 太注意小孩考试成绩怎么办 二年级成绩很差怎么办 班级差生应该怎么办 班级差生太多怎么办 初三孩子英语差怎么办 初三英语基础差怎么办 学生学习效率低怎么办 摔伤后皮下血肿怎么办 孩子学习效率低怎么办 很多作业没写完怎么办? 小学孩子成绩差怎么办 孩子脚上起水泡怎么办 小学一年级体育课哑铃怎么办 托福成绩失效后怎么办 去外国旅游不适应怎么办 一年级语文成绩差怎么办 一年级小孩成绩差怎么办 一年级小孩基础差怎么办 一年级小孩语文差怎么办 一年级小孩数学差怎么办 一年级小孩理解能力差怎么办 一年级小孩作文差怎么办 一年级小孩记忆力差怎么办 孩子的记忆力不好怎么办 孩子记忆力不好怎么办呢 小学三年级学生不听话怎么办 司法考试成绩单没打印怎么办 高一200分怎么办 初一孩子语文差怎么办 大学专业没选好怎么办 减肥口渴的厉害怎么办 开胸手术后胸闷气短怎么办 打游戏上网成瘾怎么办 老公打游戏成瘾怎么办 我老是沉迷游戏怎么办 18孩子沉迷游戏怎么办 志愿提交码丢失怎么办