JSP的隐式变量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cjmust/article/details/83186193

对重要变量的描述

1. request以及response

request和response是HttpServletRequest和HttpServletResponse的实例,但是在JSP当中响应对象存在着一些使用限制,例如:不应当调用getWriter和getOutputStream方法,因为JSP已经向响应中输出了一些内容,还有设置内容类型,字符编码,刷新,重置缓存…这些工作已经由JSP完成,如果重复执行可能会引发问题。

2. session

session是HttpSession的实例,可以通过page指令设置其开关,默认为打开,如果关闭的话则无法使用session变量

3. out

out是JspWriter的一个实例,所有的JSP当中都可以使用,可以在页面中直接输出内容;
但是为什么不用表达式或者直接写html呢?

4. application

application是javax.servlet.ServletContext接口的一个实例,提供了对Web应用程序配置的访问:包括上下文初始化参数etc
例如:

<!-- web.xml配置 -->
    <context-param>
        <param-name>settingOne</param-name>
        <param-value>foo</param-value>
    </context-param>
    <context-param>
        <param-name>settingTwo</param-name>
        <param-value>bar</param-value>
    </context-param>

在JSP中直接可以取值

        settingOne: <%= application.getInitParameter("settingOne") %>,
        settingTwo: <%= application.getInitParameter("settingTwo") %>

5. config

config是javax.servlet.ServletConfig接口的一个实例,该对象可以访问JSP Servlet的配置,例如Servlet初始化参数etc

6. pageContext

pageContext是javax.servlet.jsp.PageContext类的一个实例,可以通过它获取各种内容,看Serivce代码的开头

      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;

7. page

page是java.lang.Object的一个实例(说实话,我开始看代码的时候是一脸懵逼,这啥玩意)
它代表了JSP Servlet对象的this变量! 它可以强制转换为Servlet对象,只需要认为,page是this的代名词

8. exception

代码:

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    final java.lang.String _jspx_method = request.getMethod();
    if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD");
      return;
    }

    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("\n");
      out.write("<!DOCTYPE html>\n");
      out.write("<html>\n");
      out.write(" <head>\n");
      out.write(" <title>Hello World Application</title>\n");
      out.write(" </head>\n");
      out.write(" <body>\n");
      out.write(" Hello, World!\n");
      out.write(" </body>\n");
      out.write("</html>\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);
    }
  }

猜你喜欢

转载自blog.csdn.net/cjmust/article/details/83186193