博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsp jsp九个内置对象
阅读量:6155 次
发布时间:2019-06-21

本文共 5255 字,大约阅读时间需要 17 分钟。

   每个JSP页面在第一次被访问的时候,WEB容器都会把请求交给JSP引擎(即一个JAVA)程序。JSP引擎先将JSP翻译成一个_jspServlet实质也是一次servlet,然后按照Servlet的调用方式进行调用。    由于jsp第一次访问时候会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,jsp引擎如果发现jsp没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响。    jsp引擎在调用jsp对应的_jspServlet时,会传递或创建9个web开发相关的对象供_jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面的时候获得这些web对象的引用,特意定义了9个相应的变量。这样JPS页面中通过这些变量就可以快速获得9大对象的引用。

9个内置对象

pageContext   javax.servlet.jsp.PageContextrequest       javax.servlet.http.HttpServeletRequestresponse      javax.servlet.http.HttpServletResponsesession       javax.servlet.http.httpSessionapplication   javax.servlet.ServletContextconfig        javax.servlet.ServletConfigout           javax.servlet.jsp.JspWriterpage          java.lang.Objectexception     java.lang.Throwable

page对象

  page对象表示当前一个jsp页面,可以理解为对象本身,即:把一个jsp当做一个对象来看待。在开发中几乎不用

request对象

    request对象是HttpServletRequest类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。    requst对象提供了一系列方法来获取http头信息,cookies,http方法等。

response对象

    response对象是HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象    response对象也定义了处理HTTP头模块的接口。通过这个对象开发者可以添加新的cookies,时间戳,http状态码等等。

session对象

session对象是javax.servlet.http.HttpSession类的实例。和java Servlet中的session对象有一样的行为。session对象用来跟踪在各个客户端请求间的回话。

application对象

application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext类的对象。这个对象在JSP页面的整个生命周期中都代表着整个JSP页面。这个对象在jsp页面初始化时被创建,随着jspDestory()方法的调用而被移除。通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。

out对象

  out对象用于向客户端发送文本数据  out对象是通过调用pageConext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的printWriter对象相似。jsp页面中的out对象的类型为JspWriter,JspWriter相当于一种带缓存功能PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓冲大小,甚至关闭它的缓冲。  只有向out对象中写入内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将,out对象的缓冲去中的内容真正写入到Servlet引擎提供的缓冲区中  设置page指令的buffer属性关闭了out对象的缓存功能  out对象的缓冲区已满  整个jsp页面结束

config对象

config对象是java.Servlet.ServletConfig类的实例,直接包装了ServletConfig类的对象这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。config.getServletName();返回包含在
元素中的servlet名字,注意,
元素在WEB-INF/web.xml文件中定义

pageContext对象

  pageContext对象是jsp技术中最重要的一个对象,它代表jsp页面的运行环境。这个对象不仅封装了对其他8大隐式对象的引用,它自身还是一个域对象(容器)。并且,这个对象还封装了web开发中经常涉及到的一些常用操作,例如引入和跳转其他资源,检索其他域对象中的属性都能 pageContext获取其他对象 getException 方法返回exception隐式对象 getPage方法返回page隐式对象 getRequest方法返回request隐式对象 getResponse方法返回response隐式对象 getServletConfig方法返回config隐式对象 getServletContext方法返回application隐式对象 getSession方法返回session隐式对象 getOut方法返回out隐式对象 pageContext封装其他8大内置对象的意义。如果在编程过程中,把pageContext对象传递给一个普通java对象,那么这个java对象将可以获取8大隐式对象,此时这个java对象就可以和浏览器交互了。此时这个java对象就成为一个动态web资源了,这就是pageContext封装其他8大内置对象的意义。 把pageContext传递给谁,谁就能成为一个动态web资源,那么什么情况下需要把pageContext传递一个java类呢,什么情况下需要使用这种技术呢,在比较正规的开发中,jsp页面是不允许出现java代码的,如果jsp页面出现了java代码就应该想办法把java代码给移除掉,我们可以开发一个自定义的标签来移除jsp页面上出现的java代码。jsp引擎在执行自定义的标签的时候会调用围绕在自定义标签写的那个java类,在调用java类的时候就会把pageContext对象传递传递给这个java类。由于pageContext对象还封装其他8个隐式对象的引用,因此这个java类就可以使用jsp页面中8个隐式对象(request,response,config,application,session,page,out,exception)pageContext可以用来作为容器使用,因此可以将一些数据存储在pageContext中。pageContext常用的方法  public void setAttribute(name,value);  getAttribute(name);  removeAttribute(name);  public object findAttribute(name);  其中findAttibute 是用来查找各个域中的属性的,顺序是page-request-session-application,只要找到就返回属性值,如果都没有找到则返回null<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%>
Insert title here
设置信息内容JAVA代码
<% pageContext.setAttribute("n1", "高硕"); request.setAttribute("n2", "杭州"); session.setAttribute("s1", "session"); application.setAttribute("a1", "application"); %>
获取对应的属性值
<% String _pageContext_str=(String)pageContext.findAttribute("n2"); %> <%= pageContext.findAttribute("n2") %>   ---》(输出为杭州)
使用EL表达式
pageContext:n1:<%= _pageContext_str %> ---》(输出为杭州)pageContext引入和跳转到其他资源    pageContext类中定义个一个forward方法(用来跳转页面)和两个include方法(用来引入页面)来分别简化和替代RequestDispacher.forward和include方法方法接受的资源如果以"/"开头,"/"代表当前web应用<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
Insert title here
<% pageContext.forward("/pageContext/forward"); %>
​@WebServlet("/pageContext/forward")public class PageContextForward extends HttpServlet { private static final long serialVersionUID = 1L;    public PageContextForward() {        super();   } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("name", "高硕"); request.getRequestDispatcher("/WEB-INF/business/first.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }​}pageContext.forward('/url/**')这种写法用来简化代替pageContext.getRequest.getRequestDispatcher("/url/**").forward(request,response)但是在实际开发中使用pageContext.forward('/url/**')跳转的不多,因为这样就在jsp页面中嵌入了java代码,一般使用
来将请求转发给另外一个请求。<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
Insert title here
<% //pageContext.forward("/pageContext/forward"); %>

exception 对象

exception 对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应

转载于:https://www.cnblogs.com/ssgao/p/8866470.html

你可能感兴趣的文章
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
linux后台运行程序
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
登记申请汇总
查看>>
Android Jni调用浅述
查看>>