JSP九大内置对象

1. 内置对象简介

在这里插入图片描述

  1. Request对象:该对象存储客户端的请求信息,主要用于接受通过Http协议传送到服务器的数据。

  2. Response对象:该对象主要负责将JSP页面响应给客户端,对客户端的请求做出应答。

  3. Session对象:会话对象由服务器创建,服务器会为每一个请求的用户分别创建一个,主要用于保存用户的信息跟踪用户的操作状态。当打开浏览器第一次请求时就会生成,直到关闭或者间隔多久Session才会失效。

  4. application对象:本质是ServletContext对象,是整个程序的上下文对象。能够获取当前Web下的所有Servlet、资源…拥有最高的权限。

  5. pageContext对象:当前页面的上下文对象,所有获取 JSP 页面的out、request、reponse、session、application 等对象。

  6. page对象:代表当前页面只有在JSP页面内才是合法,page隐含对象本质上包含当前Servlet接口引用的变量类似于Java编程中的 this 指针。

  7. out对象:用于将数据输出到前端响应给用户,并且管理应用服务器上的输出缓冲区。

  8. config对象:本质是ServletConfig对象,用于管理当前Web项目下web.xml中的所有配置信息。

  9. exception对象:作用是显示异常信息,当页面发生错误爆出的一些状态码错误都是由它负责的,比如常见的500错误,exception对象会再页面中显示异常的堆栈调用信息。


2. 内置对象原理分析

在这里插入图片描述
JSP页面的本质还是一个个的Servlet页面,每一个JSP页面在服务器第一次访问时会进行转为Java文件Servlet,之后进行编译生成.class文件。因此JSP页面的对象几乎都来自于Servlet。编译后的.class文件的_Jspservice方法是整个JSP页面的核心,里面可以看到所有的内置对象。

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {
	//方法头中有   request   response   exception
	
    if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      final java.lang.String _jspx_method = request.getMethod();
      if ("OPTIONS".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        return;
      }
      if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP 只允许 GET、POST 或 HEAD。Jasper 还允许 OPTIONS");
        return;
      }
    }

    final javax.servlet.jsp.PageContext pageContext;		//pagecontext
    javax.servlet.http.HttpSession session = null;			//session
    final javax.servlet.ServletContext application;			//ServletContext
    final javax.servlet.ServletConfig config;				//ServletConfig
    javax.servlet.jsp.JspWriter out = null;					//out输出
    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("<html>\r\n");
      out.write("<head>\r\n");
      out.write("    <title>Title</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("    hello jsp\r\n");
      out.write("</body>\r\n");
      out.write("</html>\r\n");
    } catch (java.lang.Throwable t) {			
      if (!(t instanceof javax.servlet.jsp.SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try {
            if (response.isCommitted()) {
              out.flush();
            } else {
              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);
    }
  }
final javax.servlet.http.HttpServletRequest request final javax.servlet.http.HttpServletResponse response java.io.IOException, javax.servlet.ServletException

上面这三个对象在public void _Jspservice方法头中可以看到

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;

另外6个在_Jspservice方法内可以看到。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值