博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP--9个内置对象和4个作用域详解
阅读量:2442 次
发布时间:2019-05-10

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

内置对象的概述

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

JSP隐式对象:

名称 类型 描述
out javax.servlet.jsp.JspWriter 用于页面输出
request javax.servlet.http.HttpServletRequest 得到用户请求信息
reponse javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息
config javax.servlet.ServletConfig 服务器配置,可以取得初始化参数
session javax.servlet.HttpSession 用来保存用户的信息
application javax.servlet.ServletContext 所有用户的共享信息
page java.lang.Object 指当前页面转换后的Servlet类的实例
pageContext javax.servlet.jsp.PageContext JSP页面容器
exception java.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"%>
Insert title here <% out.println("first line
"); response.getWriter().println("second line
"); %>

页面显示:

在这里插入图片描述
尽管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 当前页面中有效 pageContext PageContext
RequestScope 一次请求范围 request HttpServletRequest
SessionScope 一次会话范围 session HttpSession
ApplicationScope Web应用范围 application ServletContext

例子:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
Insert title here <% //使用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.getAttribute("name") %> <%=pageContext.getAttribute("name", PageContext.REQUEST_SCOPE)%>
<%=pageContext.findAttribute("name") %>

页面显示:

在这里插入图片描述

转载地址:http://pjsqb.baihongyu.com/

你可能感兴趣的文章
Wikipedia API Python教程
查看>>
python lcm()_Python LCM –找到LCM的2种方法
查看>>
seo传智播客2018_2018年最重要的4个SEO因素
查看>>
ccna考试_是否值得参加200-125 CCNA考试?
查看>>
hcf方法_Python GCD –查找GCD或HCF的4种方法
查看>>
语法和语义之间的差异_语法和语义之间的区别
查看>>
python中平方根_如何在Python中找到平方根
查看>>
wi-fi_您应该了解的有关Wi-Fi安全的知识
查看>>
python语音转文字_Python文字转语音示例
查看>>
windows 数据恢复_如何为Windows找到最佳的免费数据恢复解决方案
查看>>
python密码学凯撒密码_凯撒密码在Python
查看>>
编程自由职业_如何开始自己的自由编程业务?
查看>>
2018年web前端饱和了_2018年值得关注的15个Web设计趋势
查看>>
url uri urn区别_URI,URL和URN之间的区别
查看>>
dbms系统 rdbms_文件系统和DBMS之间的区别
查看>>
单精度 半精度 双精度_单精度与双精度
查看>>
移动2018年年报 下载_2018年让网站具有移动响应能力至关重要的7个原因
查看>>
python生成6位随机数_用Python生成随机数的6种方法
查看>>
最流行的编程语言2018_2018年十大最受欢迎的编程语言
查看>>
sql和nosql区别_SQL和NoSQL之间的区别
查看>>