JSP隐式对象——out对象、pageContext对象、exception对象

JSP隐式对象的概述

在JSP页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会非常麻烦。为了简化Web应用程序的开发,JSP2.0规范中提供了9个隐式(内置)对象,它们是JSP默认创建的,可以直接在 JSP 页面中使用。这9个隐式对象的名称、类型和描述如表所示。

名称类型描述范围
outjavax.servlet.jsp.JspWriter用于输出页面page
requestjavax.servlet.http.HttpServletRequest得到用户信息request
responsejavax.servlet.http.HttpServletResponse服务器向客户端回应消息page
configjavax.servlet.ServletConfig服务器配置,可以取得初始化参数page
sessionjavax.servlet.http.HttpSession用来保存用户的信息session
applicationjavax.servlet.ServletContext所有用户的共享信息,与应用上下文有关,它代表当前web应用。application
pageJava.lang.Object指当前页面转换后的Servlet类的实例,代表当前被访问JSP页面的实例化page
pageContextjavax.servlet.jsp.PageContextJSP的页面容器提供对JSP页面所有对象以及命名空间的访问,是页面上下文对象page
exceptionjava.lang.Throwable表示JSP页面所发生的异常,在错误页中才起作用page

out对象

out对象是javax.servlet.jsp.JspWriter类的实例对象,它的作用与ServletResponse.getWriter()方法返回的PrintWriter对象非常相似,都是用来向客户端发送文本形式的实体内容。不同的是,out对象的类型为JspWriter,它相当于一种带缓存功能的PrintWriter
在这里插入图片描述
在 JSP 页面中,通过 out 隐式对象写入数据相当于将数据插入到JspWriter 对象的缓冲区中,只有调用了 ServletResponse.getWriter()方法,缓冲区中的数据才能真正写入到Servlet引擎所提供的缓冲区中

out对象使用

创建一个jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>out</title>
</head>
<body>
<% 
	out.println("第一行<br>");
	response.getWriter().println("第二行<br>");
%>
<%--
	out.println通过print语句写入数据后直到整个jsp页面结束才会将其中的
	内容真正的写到Servlet缓冲区中,Servlet引擎按照缓冲区的数据存放顺序输出
	要将out对象直接写入Servlet引擎可以用page指令中的buffer属性实现 设置为“0kb”
--%>
</body>
</html>

运行结果
在这里插入图片描述
从图可以看出,尽管out.println();语句位于response.getWriter().println();语句之前,但它的输出内容却在后面。由此可以说明
out 对象通过 print 语句写入数据后,直到整个JSP页面结束,out对象中输入缓冲区的数据(即first line)才真正写入到Serlvet引擎提供的缓冲区中。而response.getWriter().println();语句则是直接把内容(即第二行)写入Servlet引擎提供的缓冲区中,Servlet引擎按照缓冲区中的数据存放顺序输出内容。

设置page对象的**buffer=“0kb”**属性,将out对象的数据直接写入Servlet引擎提供的缓冲区中
修改上面代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" buffer="0kb"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>out</title>
</head>
<body>
<% 
	out.println("第一行<br>");
	response.getWriter().println("第二行<br>");
%>
</body>
</html>

运行结果:
在这里插入图片描述
由此可见,out对象中的数据直接写入了Servlet引擎提供的缓冲区中。此外,当写入到out对象中的内容充满了out对象的缓冲区时,out对象中输入缓冲区的数据也会真正写入到Servlet引擎提供的缓冲区中。

pageContext对象

JSP页面中,**使用pageContext对象可以获取JSP的其他8个隐式对象。**pageContext对象是javax.servlet.jsp.PageContext类的实例对象,它代表当前JSP页面的运行环境,并提供了一系列用于获取其他隐式对象的方法。

pageContext获取隐式对象的方法

方法名功能描述
JspWriter getOut()用于获取out隐式对象
Object getPage()用于获取page隐式对象
ServletRequest getRequest()用于获取request隐式对象
ServletResponse getResponse()用于获取response隐式对象
HttpSession getSession()用于获取session隐式对象
Exception getException()用于获取exception隐式对象
ServletConfig getServletConfig()用于获取config隐式对象
ServletContext getServletContext()用于获取application隐式对象

pageContext操作属性的相关方法

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

其中,参数name指定的是属性名称,参数scope指定的是属性的作用范围。pageContext对象的作用范围有4个值,具体如下。
• pageContext.PAGE_SCOPE:表示页面范围
• pageContext.REQUEST_SCOPE:表示请求范围
• pageContext.SESSION_SCOPE:表示会话范围
• pageContext.APPLICATION_SCOPE:表示Web应用程序范围

需要注意的是,当使用 findAttribute()方法查找名称为 name 的属性时,会按照 page、request、session和application的顺序依次进行查找,如果找到,则返回属性的名称,否则返回nul

pageContext对象使用案例

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>pageContext</title>
</head>
<body>
<%
	//获取request对象
	HttpServletRequest req=(HttpServletRequest)pageContext.getRequest();
	
	//设置page范围内属性
	pageContext.setAttribute("str", "Java",pageContext.PAGE_SCOPE);
	//设置request范围内属性
	req.setAttribute("str", "Java Web");
	//获得的page范围属性
	String str1=(String)pageContext.getAttribute("str",pageContext.PAGE_SCOPE);
	
	//获得的request范围属性
	String str2=(String)pageContext.getAttribute("str",pageContext.REQUEST_SCOPE);
%>
<%="page 范围:"+str1 %>
<br>
<%="request 范围:"+str2 %>
<br>
</body>
</html>

运行结果:
在这里插入图片描述
在上述代码中,首先使用pageContext获取了request对象,并设置page范围内属性;然后使用获取的request对象设置了request范围内属性,接下来使用pageContext对象获得page和request范围内的相应属性,最后使用JSP表达式输出数据。

exception对象

JSP 页面中,经常需要处理一些异常信息,这时,可以通过 exception 对象来实现。exception对象是java.lang.Exception类的实例对象,它用于封装JSP中抛出的异常信息
需要注意的是,**exception 对象只有在错误处理页面才可以使用,即 page 指令中指定了属性

<%@ page isErrorPage="true"%>

的页面。接下来,通过一个案例来学习exception对象的使用

exception对象使用

创建用于产生错误的jsp页面
添加属性:errorPage="error.jsp"

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>exception对象</title>
</head>
<body>
	<%
		int a=3;
		int b=0;
	%>
	输出结果为:
	<%=(a/b) %><!-- 此处会产生异常 -->
</body>
</html>

创建errpr.jsp,设置isErrorPage属性为true

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>exception对象</title>
</head>
<body>
 <!-- 显示异常信息 -->
 <%=exception.getMessage() %>
 <br>
</body>
</html>

运行结果:
在这里插入图片描述
需要注意的是,IE浏览器如果不能够显示出结果并且报出500错误时,可以点击浏览器菜单栏中的【工具】(IE11可以点击右上角的齿轮图标)→【Internet 选项】→【高级】,将“显示友好错误HTTP错误信息”复选框中的“√”去掉,然后点击窗口的【确认】按钮并刷新页面即可。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心醉瑶瑾前

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值