美文网首页JavaWeb
JavaWeb-012-JSP9个隐含对象

JavaWeb-012-JSP9个隐含对象

作者: 53b3f4658edc | 来源:发表于2017-11-21 10:54 被阅读23次

观察jsp转换后的java代码中的_jspService方法

public void _jspService(HttpServletRequest request,
  HttpServletResponse response)
  throws java.io.IOException, ServletException
{
  JspFactory _jspxFactory = null;
  PageContext pageContext = null;
  HttpSession session = null;
  ServletContext application = null;
  ServletConfig config = null;
  JspWriter out = null;
  Object page = this;
  ...
  ...
  Throwable exception = 
  org.apache.jasper.runtime.JspRuntimeLibrary.getThrowable(request);
  if (exception != null) {
  response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
  }
  <%   我们自己写的代码   %>
}

所以我们在自己写的<% %>代码里,就可以直接使用:request、response、pageContext、session、application、config、out、pag这八个隐含对象(还有一个exception)。


注册与配置JSP页面的访问路径

微信公众号:JavaWeb架构师

JSP与Servlet的应用比较

  • JSP是一种以产生网页显示内容为中心的WEB开发技术,它可以直接使用模版元素来产生网页文档的内容。
  • JSP页面的源文件要比Servlet源文件简单,并且JSP页面的开发过程要比Servlet的开发过程简单得多。
  • JSP引擎可以对JSP页面的修改进行检测,并自动重新翻译和编译修改过的JSP文件。
  • JSP技术是建立在Servlet技术基础之上的,所有的JSP页面最终都要被转换成Servlet来运行。
  • 在大型WEB应用程序的开发中,Servlet与JSP经常要混合使用,各司其职,Servlet通常用作控制组件,并处理一些复杂的后台业务,JSP则作为显示组件。
  • 一次响应过程可以划分成几个功能模块来协同完成,首先由Servlet完成流程控制和业务处理,并将结果数据存储在request或session域中,然后将请求转发(forward)到JSP页面,再由JSP页面从request或session域中取出结果数据并完成响应内容的输出。通过这种方式实现业务逻辑与显示内容的分离,从而将应用程序开发者和网页作者的工作分离。

out隐式对象

  • 在JSP页面中应使用out隐式对象来向客户端发送文本形式的实体内容。
  • out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
  • JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
  • JSP页面中的out隐式对象相当于插入到ServletResponse.getWriter方法返回的PrintWriter对象前面的缓冲包装类对象。
  • 只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
    • 设置page指令的buffer属性关闭了out对象的缓存功能
    • 写入到out对象中的内容充满了out对象的缓冲区
    • 整个JSP页面结束
微信公众号:JavaWeb架构师

pageContext对象

  • pageContext对象简介
  • 获得其他隐式对象
  • 引入和跳转到其他资源
  • 访问各个域范围中的属性

pageContext对象简介

  • pageContext对象封装了当前JSP页面的运行信息,它提供了返回JSP页面的其他隐式对象的方法。
  • PageContext类中定义了一个setAttribute方法来将对象存储进pageContext对象内部的一个HashMap对象中,同时也定义了一个getAttribute方法来检索存储在该HashMap对象中的对象。
    PageContext类除了可以存储和检索自身中的属性对象外,还定义了可以存储和检索其他域范围内的属性对象的方法。

获得其他隐式对象

  • getException方法返回exception隐式对象
  • getPage方法返回page隐式对象
  • getRequest方法返回request隐式对象
  • getResponse方法返回response隐式对象
  • getServletConfig方法返回config隐式对象
  • getServletContext方法返回application隐式对象
  • getSession方法返回session隐式对象
  • getOut方法返回out隐式对象

引入和跳转到其他资源

  • PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和RequestDispatcher.include方法的调用:
    • public void forward(java.lang.String relativeUrlPath)
      throws javax.servlet.ServletException,java.io.IOException
    • public void include(java.lang.String relativeUrlPath)
      throws javax.servlet.ServletException,java.io.IOException
      public void include(java.lang.String relativeUrlPath,boolean flush)
      throws javax.servlet.ServletException,java.io.IOException
  • 传递给这些方法的资源路径都只能是相对路径,如果路径以“/”开头,表示相对于当前WEB应用程序的根目录,否则,表示相对于当前JSP所映射到的访问路径。

测试代码

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
        <title>Insert title here</title>
    </head>
    <body>
        <!-- 脚本代码编写在下面(不仅仅可以编写Java代码)-->
        <% 
            Date date = new Date();
        %>
        
        <%
            System.out.println(date);       //这两段代码其实是在一个方法中的(可以去看java文件)
        %>
        
        <%
            /*
                1.第一个隐含对象:HttpServletRequest request        
                - 说明:这个request就是前面学习的doXxx方法里面的request
            */
            String name = request.getParameter("name"); 
            System.out.println("name: " + name);
            //http://localhost:8080/Course_010_FirstJSP/index.jsp?name=mac
            //name: mac
            
            /*
                2.第二个隐含的对象:HttpServletResponse response
                    - 说明:这个request就是前面学习的doXxx方法里面的response
                    - 基本不会用到这个对象的方法
            */
            
            /*
                3.第三个隐含对象:  PageContext pageContext
                    -说明:这是页面的一个上下文
                    -可以从这里获取当前页面的几乎一切信息,包括另外8个对象
                    -后面再仔细学习
            */      
            
            /*
                4.第四个隐含对象:  HttpSession session
                    -说明:代表浏览器和服务器的一次会话
                    -后面再仔细学习
            */
            
            /*
                5.第五个隐含对象:  ServletContext application
                    -说明:代表了当前web应用。
            */
            String user = application.getInitParameter("user");
            System.out.println("user: " + user);        //root
            
            /*
                6.第六个隐含对象:  ServletConfig config
                    -说明:当前JSP对象的Servlet的对象。
                    -几乎不使用。
                    -使用JSP的时候,它的servlet-class改成jsp-file
            */
            String users = config.getInitParameter("users");
            System.out.println("users: " + users);
            
            /*
                7.第七个隐含对象:  JspWriter out
                    -说明:可以直接内容打印到浏览器上
            */
            out.println("uers: " + users);
            
            /*
                8.第八个隐含对象:  Object page = this;
                    -说明:代表了当前的Servlet对象
                    -几乎不使用
            */
            
            /*
                9.第九个隐含对象:  Throwable exception
                    -说明:只有在页面类型为Error的情况下这个对象才能使用(isErrorPage="true")
                    -后面学习
            */
        %>
    </body>
</html>

其它

  • 源码下载
关注下方公众号,回复:javaweb_course.code
完整教程PDF版本下载

相关文章

  • JavaWeb-012-JSP9个隐含对象

    观察jsp转换后的java代码中的_jspService方法 所以我们在自己写的<% %>代码里,就可以直接使用:...

  • Jsp(二)

    JSP隐含对象 JSP支持九个自动定义的变量,江湖人称隐含对象。这九个隐含对象的简介见下表: |对象|描述||--...

  • JavaWEB 开发基础4-2

    JavaWEB_JSP 页面的 9 个隐含对象 页面的隐含变量:没有声明就可以使用的对象,称之为隐藏对象。JSP一...

  • jsp

    JSP隐含对象

  • JSP内置对象

    HTTP协议 HTTP请求 HTTP响应 JSP内置对象 1、内置对象(又叫隐含对象,有9个内置对象)。2、不需要...

  • JSP对象

    JSP 九个隐含JSP对象http://www.cnblogs.com/bmbm/archive/2012/01/...

  • 控制器支持的方法返回参数

    1. modelandview ModelAndView对象,其中model隐含填充了命令对象,以及注解了@Mod...

  • JSP九大内置对象 , 可能是全网最详细的

    JSP九大内置对象 : 内置对象( 又叫隐含对象, 有九个内置对象 ) : 不需要预先声明就可以在脚本代码和表达式...

  • 无用之用

    一、什么是“有用” 有用就是做一个行为作用于一个对象产生一个结果。有用的世界隐含着目的,隐含着得失,有目的就会有得...

  • JSP九大隐含对象

    JSP九大隐含对象: 是在JSP页面可以直接使用的对象 五大常规对象 ServletConfig config; ...

网友评论

    本文标题:JavaWeb-012-JSP9个隐含对象

    本文链接:https://www.haomeiwen.com/subject/uamivxtx.html