一、JSP内置对象
- 输入输出对象:
out对象、response对象、request对象
- 通信控制对象:
pageContext对象、session对象、application对象
- Servlet 对象:
page对象、config对象
- 错误处理对象:
exception对象
对象 | 类型 | 作用 | 作用域 |
---|---|---|---|
out | javax.servlet.jsp.jspWriter | 页面输出 | Page |
response | javax.servlet.http.HttpServletResponse | 服务器向客户端的回应信息 | Page |
request | javax.servlet.http.HttpServletrequest | 获取用户的请求信息 | Request |
PageContext | javax.servlet.jsp.PageContext | JSP的页面容器 | page |
session | javax.servlet.http.HttpSession | 用来保存每一个用户的信息 | Session |
application | javax.servlet.ServletContext | 表示所有用户的共享信息 | Application |
config | javax.servlet.ServletConfig | 服务器配置信息,可以取得初始化参数 | Page |
page | java.lang.object | 页面对象 | Page |
exception | java.lang.Throwable | 例外对象 | Page |
二、四个作用域
page(pageContext):
只能在一个页面中保存属性。 跳转之后无效。
request:
只能在一次请求中有效,服务器跳转之后有效。 但客户端跳则无效。
session:
在一次会话中有效。服务器、客户端跳转都有效。 网页关闭重新打开则无效
application:
在服务器上保存,所有用户都可使用。 重启服务器后则无效
*注意:设置过多的application属性范围会影响服务器性能。 *
什么是作用域
当我们访问index.jsp
的时候,分别对pageContext, request, session, application
四个作用域中的变量进行累加。累加完成后就从index.jsp执行forward跳转到test.jsp。在test.jsp里再进行一次累加,然后将这四个变量显示出来。
从显示的结果来看,我们可以直观的得出结论:
page
里的变量没法从index.jsp传递到test.jsp。只要页面跳转,它就不见了。
request
里的变量可以跨越forward前后的两页。但是只要刷新页面,它就重新累加。
session
里的变量一直在累加,但关闭浏览器后重启浏览器访问,session里的变量就会重新累加。
application
里的变量一直在累加,除非重启tomcat,否则会一直累加。
1、把变量放到pageContext
里,则他的作用域是page
,有效范围只在当前jsp页面里。
从把变量放到pageContext开始,到jsp页面结束。
2、把变量放到request
里,则它的作用域是request
,有效范围是当前请求周期。
请求周期:从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里都可使用该变量。
3、把变量放到session
里,则它的作用域是session
,有效范围是当前会话。
当前会话:从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。
4、把变量放到application
里,则它的作用域是application
,有效范围是整个应用。
整个应用是指从应用启动,到应用结束。
5、application作用域里的变量,存活时间最长,如果不进行手工删除,就可以一直使用。
与上述三个不同的是,application
里的变量可以被所有用户共用。如果用户甲的操作修改了application
中的变量,用户乙访问时得到的是修改后的值。其他作用域中是不能被共用的,page, request,session
都是完全隔离的,无论如何修改都不会影响其他用户的数据。
6、
使用public Object getAttribute(String name)
获得变量值。
例子:
Integer countPage = (Integer) pageContext.getAttribute("countPage");
7、使用 public void setAttribute (String name, Object value)
将变量值保存到相应作用域。
例子:
request.setAttribute("curruser", curruser);
session.setAttribute("curruser", curruser);
说明:
name
:要设置的属性名
value
:要设置的属性值
三、详解