JSP中的四大作用域:page、request、session、application
这四大作用域,其实就是其九大内置对象中的四个,为什么说他们也是JSP的四大作用域呢?因为这四个对象都能存储数据,比如request.setAttribute()注意和request.setParameter()区分开来,一个是存储在域中的、一个是请求参数,session.setAttribute()、application其实就是SerlvetContext,自然也有setAttribute()方法。而page作用域的操作就需要依靠pageContext对象来进行了。在上面我们也有提到JSP的四大作用域,
page作用域:代表变量只能在当前页面上生效
request:代表变量能在一次请求中生效,一次请求可能包含一个页面,也可能包含多个页面,比如页面A请求转发到页面B
session:代表变量能在一次会话中生效,基本上就是能在web项目下都有效,session的使用也跟cookie有很大的关系。一般来说,只要浏览器不关闭,cookie就会一直生效,cookie生效,session的使用就不会受到影响。
application:代表变量能一个应用下(多个会话),在服务器下的多个项目之间都能够使用。
-------------------------------------------------------------------------------------------------------------------------------------
JSP有九个内置对象(又叫隐含对象),不需要预先声明就可以在脚本代码和表达式中随意使用
JSP九大内置对象分为四类:
- 输入输出对象:out对象(作用域 Page)、response对象(作用域 Page)、request对象(作用域 Request)
- 通信控制对象:pageContext对象(作用域 Page)、session会话对象(作用域 Session)、application对象(作用域 Application)
- Servlet对象:page对象(作用域 Page)、config对象(作用域 Page)
- 错误处理对象:exception对象(作用域 page)
九种对象简介:
- out对象:用于向客户端、浏览器输出数据。
- request对象:封装了来自客户端、浏览器的各种信息。
- response对象:封装了服务器的响应信息。
- exception对象:封装了jsp程序执行过程中发生的异常和错误信息。
- config对象:封装了应用程序的配置信息。
- page对象:指向了当前jsp程序本身。
- session对象:用来保存会话信息。也就是说,可以实现在同一用户的不同请求之间共享数
- application对象:代表了当前应用程序的上下文。可以在不同的用户之间共享信息。
- pageContext对象:提供了对jsp页面所有对象以及命名空间的访问。
1.out对象(常用)
out对象是一个输出流,用来向浏览器输出信息,除了输出各种信息外还负责对缓冲区进行管理。
out对象方法介绍:
方法名 |
说明 |
print或println |
输出数据 |
newLine |
输出换行字符 |
flush |
输出缓冲区数据 |
close |
关闭输出流 |
clear |
清除缓冲区中数据,但不输出到客户端 |
clearBuffer |
清除缓冲区中数据,输出到客户端 |
getBufferSize |
获得缓冲区大小 |
getRemaining |
获得缓冲区中没有被占用的空间 |
isAutoFlush |
是否为自动输出 |
2.request对象(常用)
request对象封装了从客户端到服务器发出的请求信息。
request对象方法介绍:
方法名 |
说明 |
isUserInRole |
判断认证后的用户是否属于某一成员组 |
getAttribute |
获取指定属性的值,如该属性值不存在返回Null |
getAttributeNames |
获取所有属性名的集合 |
getCookies |
获取所有Cookie对象 |
getCharacterEncoding |
获取请求的字符编码方式 |
getContentLength |
返回请求正文的长度,如不确定返回-1 |
getHeader |
获取指定名字报头值 |
getHeaders |
获取指定名字报头的所有值,一个枚举 |
getHeaderNames |
获取所有报头的名字,一个枚举 |
getInputStream |
返回请求输入流,获取请求中的数据 |
getMethod |
获取客户端向服务器端传送数据的方法 |
getParameter |
获取指定名字参数值 |
getParameterNames |
获取所有参数的名字,一个枚举 |
getParameterValues |
获取指定名字参数的所有值 |
getProtocol |
获取客户端向服务器端传送数据的协议名称 |
getQueryString |
获取以get方法向服务器传送的查询字符串 |
getRequestURI |
获取发出请求字符串的客户端地址 |
getRemoteAddr |
获取客户端的IP地址 |
getRemoteHost |
获取客户端的名字 |
getSession |
获取和请求相关的会话 |
getServerName |
获取服务器的名字 |
getServerPath |
获取客户端请求文件的路径 |
getServerPort |
获取服务器的端口号 |
removeAttribute |
删除请求中的一个属性 |
setAttribute |
设置指定名字参数值 |
3.response对象(常用)
response对象主要用于对客户端的请求进行回应。
以及处理http的连接信息,例如设置http文件头,设置cookie对象等。
response对象方法:
方法名 |
说明 |
addCookie |
添加一个Cookie对象 |
addHeader |
添加Http文件指定名字头信息 |
containsHeader |
判断指定名字Http文件头信息是否存在 |
encodeURL |
使用sessionid封装URL |
flushBuffer |
强制把当前缓冲区内容发送到客户端 |
getBufferSize |
返回缓冲区大小 |
getOutputStream |
返回到客户端的输出流对象 |
sendError |
向客户端发送错误信息 |
sendRedirect |
把响应发送到另一个位置进行处理 |
setContentType |
设置响应的MIME类型 |
setHeader |
设置指定名字的Http文件头信息 |
4.session: 会话失效时间 ,tomcat中默认是30分钟,可以设置。 每个用户的会话空间是隔离的。
5.application 应用对象
application,session,request:都可以通过setAttribute来设置属性,用getAttribute来获取属性,但是可见范围不一样。
application对象所设置的属性,所有会话可见,而session对象设置的属性,只有在同一个session中可见。
同样,前面讲过的request,它所设置的属性,只有在同一次请求之间可见。
application 不会过期,在整个服务器运行期间都有效,服务器重启后丢失。
application的其他一些方法:
application.getRealPath()
6.page对象
JSP网页本身,page对象是当前页面转换后的Servlet类的实例。从转换后的Servlet类的代码中,可以看到这种关系:Object page = this;在JSP页面中,很少使用page对象。
7.config对象:主要作用是取得服务器的配置信息。
常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。
通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
8.exception对象
在可能产生错误的文件中用page指令指定errorpage
在所指定的errorpage中,设置isErrorPage="true"这个page指令,然后用exception对象获取错误信息。
<%@page errorPage="error.jsp"%>
session也是需要在页面上设置page指令的。
9.pageContext对象(重要)
作用:a.可以用它获取其他八大内置对象的句柄(本身的句柄不用获取)
返回类型 | 方法名 | 作用 |
---|---|---|
JspWriter | getOut() | 用于获取out隐式对象 |
Object | getPage() | 用于获取page隐式对象 |
ServletRequest | getRequest() | 用于获取request隐式对象 |
ServletResponse | getResponse() | 用于获取response隐式对象 |
HttpSession | getSession() | 用于获取session隐式对象 |
Exception | getException() | 用于获取exception隐式对象 |
ServletConfig | getServletConfig() | 用于获取config隐式对象 |
ServletContext | getServletContext() |
b.可以用它设置或者获取4个不同范围(page,request,session,application)内的变量的值
方法名 | 作用 | |
---|---|---|
void | setAttribute(String name,Object value) | 向page域容器存放属性 |
void | setAttribute(String name,Object value,int scope) | 向指定域容器存放属性 |
Object | getAttribute(String name,int scope) | 根据name获取指定域的属性值 |
void | removeAttribute(String name,int scope) | 删除指定容器内名称为name的属性 |
void | removeAttribute(String name) | 删除所有容器内名称为name的属性 |
Object | findAttribute(String name) | 从4个域对象中依次查找名称为name的属性 |
比如:
设置的值只能在本页面内有效
pageContext.setAttribute (String name , Object value) ;
设置的值在同一个request请求中有效。
pageContext.setAttribute(String name , Object value, PageContext.REQUEST_SCOPE))
相当于request.setAttribute(String name , Object value); eg: request.setAttribute("name", "alex");
设置的值在同一个session请求中有效。
pageContext.setAttribute(String name , Object value, PageContext.SESSION_SCOPE))
相当于session.setAttribute(String name , Object value);
设置的值在整个应用中有效。
pageContext.setAttribute(String name , Object value, PageContext.APPLICATION_SCOPE))
相当于application.setAttribute(String name , Object value);
对应的get方法就不再详细列出了;
按照 page request session application顺序取:
pageContext.findAttribute(String name);
删除所有域中的值:
pageContext.removeAttribute(String name);
删除指定域中的值:
pageContext.removeAttribute(String name, int scope);