> 文档中心 > JSP的内置对象详解

JSP的内置对象详解


JSP内置对象


文章目录

  • JSP内置对象
  • 前言
  • 一、out对象
    • 1.原理
    • 2. 向客户端输出数据
  • 二、page对象
    • 1.范围
  • 三、pageContext 对象
    • 1.获取内置对象
    • 2.存储数据
  • 四、request对象
    • 1.创建及获取请求
    • 2.范围
  • 五、response 对象
    • 1.重定向网页
    • 2.处理HTTP文件头
  • 六、session对象
    • 1.创建及获取客户的会话
    • 2.从会话中移动指定的绑定对象
    • 3.范围
  • 七、application对象
    • 1.创建及获取应用程序的属性
    • 2.范围
  • 总结

前言

什么是域对象:
在JSP页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会十分麻烦。为了简化Web应用程序的开发,JSP规范中提供了9个隐式(内置对象),它们是JSP默认创建的,可以直接在JSP页面中使用,这9个内置对象的名称、类型、功能、范围如下图所示哦。本篇文章主要介绍前7个。

JSP的内置对象详解

一、out对象

在JSP页面中,经常需要向客户端发送文本内容,这时可以使用out对象来实现。

代码如下(示例):

  out.print("大家好呀!!!");  

1.原理

out对象的类型为JspWriter,相当于一种带缓存功能的PrintWriter。下面这张图可以描述JSP页面的out对象与Servlet引擎提供的缓冲区之间的工作关系,具体如图所示。
1222222
从图中可以看出,在JSP页面中,通过out内置对象写入数据相当于将数据插入到JspWriter对象的缓冲区中,只有调用了ServletResponse.getWriter()方法,缓冲区中的数据才能真正写入到Servlet引擎所提供的缓冲区。为了验证我所说的是否正确,接下来通过一个具体的案例来演示。

代码如下(示例):

  out.println("你好1"+"
"
); response.getWriter().println("我在后面");

结果为下图 ,可见后者比前者先运行。
JSP的内置对象详解

2. 向客户端输出数据

out对象一个最基本的应用就是向客户端浏览器输出信息。out对象可以输出各种数据类型的数据,在输出非字符串类型的数据时,会自动转换为字符串进行输出。out对象提供了print()和println()两种向页面中输出信息的方法,下面分别进行介绍。
1.print()方法
print()方法用于向客户端浏览器输出信息。通过该方法向客户端浏览器输出信息与使用JSP表达式输出信息相同。
通过两种方式实现向客户端浏览器输出文字“啊对对对!”。代码如下:

        

2.println()方法
println()方法也是用于向客户端浏览器输出信息,与print()方法不同的是,该方法在输出内容后,还输出一个换行符。
通过println()方法向页面中输出数字666666的代码如下:

    

说明
在使用print()方法和println()方法在页面中输出信息时,并不能很好地区分出两者的区别,因为在使用println()方法向页面中输出的换行符显示在页面中时,并不能看到其后面的文字真的换行了,例如上面的两行代码在运行后,将显示如图所示的效果。
JSP的内置对象详解

二、page对象

应答或请求的page对象,page对象代表JSP本身,只有在JSP页面内才是合法的。page对象本质上是包含当前Servlet接口引用的变量,可以看作是this关键字的别名。page对象的常用方法如下表所示。

方法 功能
getClass() 返回当前Object的类
hashCode() 返回该Object的哈希代码
toString() 把该Object类转换成字符串
equals(Object o()) 比较该对象和指定对象是否相等

代码如下(示例):

<%!Object object;%><ul><li>getClass()方法的返回值:<%=page.getClass() %>></li><li>hashCode()方法的返回值:<%=page.hashCode() %></li><li>toString()方法的返回值:<%=page.toString() %></li><li>与Object对象比较的返回值:<%=page.equals(object) %></li><li>与this对象比较的返回值:<%=page.equals(this) %></li></ul>

JSP的内置对象详解

1.范围

本页面取得,服务器跳转后无效。所设置的属性仅在当前页面内有效。

三、pageContext 对象

1.获取内置对象

在JSP页面中,使用pageContext对象可以获取JSP的其他8个内置对象。它代表当前JSP页面的运行环境,并提供了一系列用于获取其他内置对象的方法。pageContext对象获取内置对象的方法如下表。

方法 功能
JspWriter getOut() 用于获取out内置对象
Object getPage() 用于获取page内置对象
ServletRequest getRequest() 用于获取request内置对象
ServleResponse getResponse() 用于获取response内置对象
HttpSession getSession() 用于获取session内置对象
Exception getException() 用于获取exception内置对象
ServletConfig getServletConfig() 用于获取appliction内置对象

2.存储数据

这样,当传递一个pageContext()对象后,就可以通过这些方法轻松的获取到其他内置对象。你以为就只有这些功能吗,no!pageContext()对象还提供了存储数据的功能。pageContext()对象存储数据是通过操作属性来实现的,下表是其一系列方法。

方法 功能
setAttribute(String name,Object value, int scope) 用于设置pageContext对象的属性
getAttribute(String name,Object value, int scope) 用于获取pageContext对象的属性
removeAttribute(String name,int scope) 删除指定范围内名称为name的属性
removeAttribute(String name) 删除所有范围内名称为name的属性
findAttribute(String name) 从4个域对象中查找名称为name的属性

四、request对象

request对象封装了由客户端生成的HTTP请求的所有细节,主要包括HTTP头信息、系统信息、请求方式和请求参数等。通过request对象提供的相应方法可以处理客户端浏览器提交的HTTP请求的各项参数。再进行请求转发时,需要把一些数据传递到转发后的页面进行处理。这时就需要使用request对象的setAttribute()方法将数据保存到request范围内的变量中。

1.创建及获取请求

request对象的setAttribute()方法的语法格式如下:

request.setAttribute(String name,Object object);

参数说明:
name:表示变量名,为String类型,在转发后的页面取数据时,就是通过这个变量名来获取数据的。
object:用于指定需要在request范围内传递的数据,为Object类型。
在将数据保存到request范围内的变量中后,可以通过request对象的getAttribute()方法获取该变量的值,具体的语法格式如下:

request.getAttribute(String name);

2.范围

服务器跳转有效,客户端跳转无效。如果是客户端跳转,就相当于是发出了两次请求,那么第一次请求就将不复存在了;如果希望不管是客户端还是服务器跳转,都能保存的话,就需要继续扩大范围。
所设置的属性仅在一次请求的范围内有效。

五、response 对象

response对象用于响应客户请求,向客户端输出信息。它封装了JSP产生的响应,并发送到客户端以响应客户端的请求。请求的数据可以是各种数据类型,甚至是文件。response对象在JSP页面内有效。

1.重定向网页

使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面。重定向操作支持将地址重定向到不同的主机上,这一点与转发不同。在客户端浏览器上将会得到跳转的地址,并重新发送请求链接。用户可以从浏览器的地址栏中看到跳转后的地址。进行重定向操作后,request中的属性全部失效,并且开始一个新的request对象。
sendRedirect()方法的语法格式如下:

    response.sendRedirect(String path);

参数说明
path:用于指定目标路径,可以是相对路径,也可以是不同主机的其他URL地址。

代码如下(示例):

response.sendRedirect("login.jsp");//重定向到login.jsp页面response.sendRedirect("https://www.baidu.com/");//重定向到百度页面

2.处理HTTP文件头

1.设置页面自动刷新
通过设置HTTP头还可以实现页面的自动刷新。
例使网页每隔10秒自动刷新一次。

<%reponse.setHeader("refresh","10");%>

2.定时跳转网页
通过设置HTTP头还可以实现定时跳转网页的功能。
例使网页10秒后跳转到指定的网页。

<%reponse.setHeader("refresh","10,URL=login.jsp");%>

六、session对象

session在网络中被称为会话。实际上,一次会话的过程也可以理解为一个打电话的过程。通话从拿起电话或手机拨号开始,一直到挂断电话结束,在这个过程中,可以与对方聊很多话题,甚至重复的话题。一个会话也是这样,可以重复访问相同的Web页。由于HTTP协议是一种无状态协议,也就是当一个客户向服务器发出请求,服务器接收请求,并返回响应后,该连接就结束了,而服务器并不保存相关的信息。为了弥补这一缺点,HTTP协议提供了session。通过session可以在应用程序的Web页面间进行跳转时,保存用户的状态,使整个用户会话一直存在下去,直到关闭浏览器。

1.创建及获取客户的会话

通过session对象可以存储或读取客户相关的信息,如用户名或购物信息等,这可以通过session对象的setAttribute()方法和getAttribute()方法实现。下面分别进行介绍。

1.setAttribute()方法
该方法用于将信息保存在session范围内,其语法格式如下:

    session.setAttribute(String name, Object obj);

参数说明:
name:用于指定作用域在session范围内的变量名。
obj:保存在session范围内的对象。
例将用户名“张三”保存到session范围内的username变量中,可以使用下面的代码:

    session.setAttribute("username", "张三");

2.getAttribute()方法
该方法用于获取保存在session范围内的信息,其语法格式如下:

    getAtttibute(String name)

参数说明:
name:指定保存在session范围内的关键字。
读取保存在session范围内的username变量的值。代码如下:

    session.getAttribute("username");

2.从会话中移动指定的绑定对象

对于存储在session会话中的对象,如果想将其从session会话中移除,可以使用session对象的removeAttribute()方法,该方法的语法格式如下:

    removeAttribute(String name)

参数说明:
name:用于指定作用域在session范围内的变量名。一定要保证该变量在session范围内有效,否则将抛出异常。
将保存在session会话中的username对象移除的代码如下:

    

3.范围

无论客户端还是服务端都可以取得,但是现在重新开启一个新的浏览器,则无法取得之前设置的session了,因为每一个session值保存在当前浏览器中,并在相关的页面取得,对于服务器而言,每一个连接到它的客户端都是一个session,如果想要让属性设置一次,不管是否是新的浏览器打开都可以,则使用application。
所设置的属性仅在浏览器与服务器进行一次会话的范围内有效,当和服务器断开连接后,属性就会消失。

七、application对象

application对象用于保存所有应用程序中的公有数据。它在服务器启动时自动创建,在服务器停止时销毁。当application对象没有被销毁时,所有用户都可以共享该application对象。与session对象相比,application对象的生命周期更长,类似于系统的“全局变量”。

1.创建及获取应用程序的属性

与session对象相同,也可以在application对象中设置属性。与session对象不同的是,session只是在当前客户的会话范围内有效,当超过保存时间,session对象就被收回;而application对象在整个应用区域中都有效。application对象管理应用程序环境属性的方法分别介绍如下。

1.getAttributeNames()
获得所有application对象使用的属性名。
2.getAttribute(String name):从application对象中获取指定对象名。
3.setAttribute(String key, Object obj):使用指定名称和指定对象在application对象中进行关联。
4.removeAttribute(String name):从application对象中去掉指定名称的属性。

2.范围

所有的application属性直接保存在服务器上,所有的用户(每一个session)都可以直接访问取得,只要是通过appliction设置的属性,则所有的session都可以取得,表示公共的内容,但是如果此时服务器重启了,则无法取得了,因为关闭服务器后,所有的属性都消失了,所以需要重新设置。
所设置的属性在整个Web应用中都有效,直到服务器停止后才失效。

总结

大家好啊

以上就是今天要讲的内容,本文仅仅简单介绍了内置对象的定义使用,希望能与大家一起努力加油呀~