最近的一段工作,发现学习离不开记忆,在理解的基础上一定要去记忆,否则每次工作效率都会很低的,通过死记硬背以及更多的实践操作去记忆。不光要记忆具体的知识点细节,更要记忆知识体系,遇到的问题和解决的办法!言归正传,JSP内置对象!
这部分学习JSP九大内置对象及对应的操作接口,4种属性范围及属性操作
一.JSP内置对象预览
【1】pageContext (javax.sevlet.jsp.PageContext) JSP的页面容器
【2】request (javax.sevlet.http.HttpServletRequest) 该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象
可以获取用户提交信息。
【3】response (javax.servlet.http.HttpServletResponse) 对客户的请求做出动态的响应,向客户端发送数据。
【4】session (javax.servlet.http.HttpSession) 用来保存每一个用户的信息
1.什么是Session:Session对象是一个jsp内置对象,它在第一个jsp页面被装载时自动创建,完成会话期管理。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
2.session对象的Id:当一个客户首次访问服务器上的一个jsp页面时, jsp引擎产生一个session对象,同时分配一个String类型的Id号,jsp引擎同时将这个Id号发送到客户端,存放在Cookie中,这样 session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。
【5】application (javax.servlet.ServletContext) 服务器启动后就产生了这个application对象,当客户再所访问的网站的各个页面之间浏览时,这个
application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对
象都是同一个,即所有客户共享这个内置的application 对象。
【6】config (javax.servlet.ServletConfig) 服务器配置,可以取得初始化参数
【7】out (javax.servlet.jsp.JspWriter) Out对象是一个输出流,用来向客户端输出数据。Out对象用于各种数据的输出
【8】page (java.lang.Object) 表示从该页面中表示出来的一个Servlet实例
【9】exception (java.lang.Throwable) 表示JSP页面所发生的异常,在错误页中才起作用
二.四种属性范围预览
属性范围是指一个内置对象可以在多少个页面中保存并继续使用
【1】pageContext(习惯称为page属性范围) 只在一个页面中保存属性,跳转之后无效
【2】request 只在一次请求中有效,服务器跳转后依然有效
【3】session 在一次会话范围中,无论何种跳转都可以使用,但是新开浏览器无法使用
【4】application 在整个服务器上保存,所有的用户都可以使用
这4个内置对象都支持以下的属性操作方法:
【1】public void setAttribute(String name,Object o) 设置属性的名称及内容
【2】public Object getAttribute(String name) 根据属性名称取得属性
【3】public void removeAttribute(String name) 删除指定的属性
例如:
request.setAttribute("message", "用户名或密码错误");
注意我们通过getAttribute(String name)方法返回的是Object类型,有时候我们需要进行强制类型转换
String message = (String)request.getAttribute("message");
1.page属性范围
如果在上图代码光标处加入代码:<jsp:forward page="pagescope02.jsp" />
并且编写jsp页面
结果:
即使是服务器端跳转,pagescope02.jsp也无法得到pagescope01.jsp中设置的pageContext的属性值
2.request属性范围
但是将服务器跳转改为超链接形式:<a href="pagescope02.jsp"
我们发现通过超链接并不能取得属性值
&&&详解request
request表示客户的请求。正常情况下,一次请求服务器只会给予一次回应,那么这时如果是服务器端跳转,请求的地址栏没有改变,所以也就相当于回应了一次;但是如果地址栏改变了,比如采取超链接形式,就相当于发出了第二次请求,则第一次请求的内容肯定就已经消失,无法取得。
3.session属性范围
不论是客户端跳转还是服务器端跳转,只要属性设置了就能取得
但是如果此时再打开一个新的浏览器再进行访问,则无法取得设置的session属性。
注意:当你打开一个浏览器的时候,有许多选项卡,如果只关闭pagescope02.jsp这个选项卡,不关闭浏览器,新开一个选项卡进行该页面的登录,仍然可以取得属性值。
每一个浏览器连接到服务器后,实际上都表示各自的session,表示每一位不通的上网者都有各自的属性,所以新的浏览器打开后无法取得其他session设置的属性。
4.application属性范围
设置了application属性范围,再新开一个浏览器直接访问pagescope02.jsp也可以获得属性,
因为本程序会将这两个属性保存在服务器上。
5.page属性范围扩展
在javax.sevlet.jsp.PageContext类中,还有一种设置属性的方法
public void setAttribute(String name, Object value, int scope)
在PageContext类中存在四个表示属性范围的常量;
【1】public static final int PAGE_SCOPE;
【2】public static final int REQUEST_SCOPE;
【3】public static final int SESSION_SCOPE;
【4】public static final int APPLICATION SCOPE;
使用这种方式较少。