JSP--9个内置对象和4个作用域详解

内置对象的概述

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

JSP隐式对象:

名称类型描述
outjavax.servlet.jsp.JspWriter用于页面输出
requestjavax.servlet.http.HttpServletRequest得到用户请求信息
reponsejavax.servlet.http.HttpServletResponse服务器向客户端的回应信息
configjavax.servlet.ServletConfig服务器配置,可以取得初始化参数
sessionjavax.servlet.HttpSession用来保存用户的信息
applicationjavax.servlet.ServletContext所有用户的共享信息
pagejava.lang.Object指当前页面转换后的Servlet类的实例
pageContextjavax.servlet.jsp.PageContextJSP页面容器
exceptionjava.lang.Throwable表示JSP页面所发生的异常,在错误页中才起作用
1. out对象

在JSP页面中,经常需要向客户端发送文本内容,这时,可以使用out对象来实现。out对象是javax.servlet.jsp.JspWriter类的实例对象,它的作用与ServletResponse.getWriter()方法返回的PrintWriter对象非常相似,都是用来向客户端发送文本形式的实体内容。不同的是,out对象的类型是JspWriter,它相当于一种带缓存共嗯那个的PrintWriter。

下图描述了JSP页面的out对象与Servlet引擎提供的缓冲区之间的工作关系:
在这里插入图片描述
从图中可以看出,在JSP页面中,通过out隐式对象写入数据相当于将数据插入到JspWriter对象的缓冲区中,只有调用了ServletResponse.getWriter()方法,缓冲区中的数据才能真正写入到Servlet引擎所提供的缓冲区中。

例子:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<%
		out.println("first line<br>");
		response.getWriter().println("second line<br>");
	
	%>
</body>
</html>

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

2. request对象

request 对象是javax.servlet.http.HttpServletRequest类型的对象,代表客户端的请求信息,主要用于获取客户端的参数和流。

主要方法:

  • String getMethod() //获得提交方式
  • String getRequestURI() //获得请求的URL地址
  • String getProtocol() // 得到协议名称
  • String getServletPath() //获得客户端请求服务器文件的路径
  • String getQueryString() //获得URL的查询部分,post方法获得不到信息
  • String getServerName() //得到服务器的名称
  • String getServerPort() //获得服务器口号
  • String getRemoteAddr() //得到客户端的IP地址
  • String fetParameter(String name) //获得客户端传给服务器的name参数的值
3. response对象

response 对象和request是一对相应的内置对象,代表对客户端的响应。

主要方法:

  • response.sendRedirect(目标页面路径); //重定向
  • response.setHeader(String,String); //设置HTTP头
4. config对象

config 对象是javax.servlet.ServletConfig类的实例对象。主要作用是取得服务器的配置信息。
通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

主要方法:

  • config.getServletName();//它返回包含在元素中的servlet名字,注意,元素在 WEB-INF\web.xml 文件中定义。
5. session对象

session 对象是由服务器自动创建的与请求相关的对象,服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session内部使用Map来保存数据,即key-value。

主要方法:

  • session.setAttribute(String,Object); //给Object命名String,加入session
  • session.getAttribute(String); //取名为String的session的值
  • session.removeAttribute(String); //将名为String的内容从session中移除
6. application对象

application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。

这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。

通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。

7. page对象

这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。

page 对象就是this对象的同义词

8. pageContext对象

pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。

在JSP页面中,使用pageContext对象可以获取JSP的其它8个隐式对象。
PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40余种方法,有一半继承自javax.servlet.jsp.JspContext 类。

pageContext对象获取隐式对象的方法:

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

pageContext对象不仅提供了获取隐式对象的方法,还提供了存储数据的功能。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的属性
JSP的4个作用域

pageContext对象的作用范围有4个值,具体如下:

  • PageContext.PAGE_SCOPE:表示页面范围
  • PageContext.REQUEST_SCOPE:表示请求范围
  • PageContext.SESSION_SCOPE:表示会话范围
  • PageContext.APPLICATION_SCOPE:表示Web应用程序范围

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

PageContext常量名描述作用域名称域对象类型
PageScope当前页面中有效pageContextPageContext
RequestScope一次请求范围requestHttpServletRequest
SessionScope一次会话范围sessionHttpSession
ApplicationScopeWeb应用范围applicationServletContext

例子:

<%@ 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>
	<%
	
		//使用pageContext域存数据
		pageContext.setAttribute("name", "page", PageContext.PAGE_SCOPE);//等价于:request.setAttribute("name", "request");
		pageContext.setAttribute("name", "request", PageContext.REQUEST_SCOPE);
		pageContext.setAttribute("name", "session", PageContext.SESSION_SCOPE);
		pageContext.setAttribute("name", "application", PageContext.APPLICATION_SCOPE);
	
	%>
	
	<!-- 下面两行代码等价,都是从request域获取数据 -->
	<%=request.getAttribute("name") %>
	<%=pageContext.getAttribute("name", PageContext.REQUEST_SCOPE)%>
	
	<!-- findAttribute会从小到大搜索域的范围中的name -->
	<!-- page域<request域<session域<application域 -->
	<%=pageContext.findAttribute("name") %>
	
</body>
</html>

页面显示:
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值