jsp学习之(三)--------- jsp隐式对象
1.0 概述
jsp隐式对象就是jsp容器提供的不用声明就可以在jsp页面的Java程序块和表达式部分直接使用的对象,也称为jsp内置对象
1.1简介
我们知道JSP中的内容就只有两种,模版数据和元素,元素就包括了指令,脚本,标签(行为),脚本会慢慢被标签全部代替,也就是说JSP中基本上不会嵌入Java代码,但是我们也知道JSP会转换为servlet,
在Servlet中,输出数据时,都需要通过response.getWrite();但是在JSP中,直接使用out对象进行输出,为什么呢?这就是因为out为JSP的一个隐藏对象,JSP中内置了9个隐藏对象,使得JSP比Servlet使用起来更简单,更方便。
1.2分类
隐式对象所属接口一览表
按照作用分
2.0输入输出对象(out,request,response)
2.1 out对象
-
- request对象
常用方法如下
request对象应用实例
运行效果如图:
request.setCharacterEncodiong,request.setAttribute,request.getAttribute方法的应用
运行效果如下:
2.3 response对象
response对象提供的方法
response应用实例(实现页面的刷新)
实现效果如下
sendRedirect实现页面的重定向
实现效果如下
我们可以看到页面由responsDemo02跳转到了responseDemo02_01
cookie实现客户端用户信息的保存
- login.jsp 用户登录界面
实现效果如下图所示
- cookieSave.jsp (处理cookie值,,并添加超链接跳转到另外一个页面查看登录页面信息)
实现效果如下图所示
- cookieQuer.jsp(显示cookie保存的用户名密码信息)
实现效果如下图所示
选择保存密码
选择不保存密码
3.0 作用域对象(session对象,application对象,pageContext对象)
3.1 session对象
session对象是由服务器自动创建与用户请求相关的对象。服务器会为每一个用户创建一个session对象用来保存用户信息,跟踪用户操作。该对象内部使用Map类来保存数据,因此它的数据类型是key-value形式。对应javax.servlet.http.HttpSession.class对象。
服务器为不同的浏览器在内存中创建用于保存数据的对象叫seesion。并将这个对象的唯一身份认证SessionId(存放在cookie中)返回给浏览器,浏览器将这个SessionId保存,当浏览器向服务器再次发送请求的时候,连同这个cookie一起发送过去,由此找到对应的session。
session对象提供的方法
方法名 |
功能介绍 |
long getCreateTime() |
获取session对象建立的时间;返回的是从1970年1月1日到建立时间的毫秒数 |
String getId() |
获取当前session对象的ID号,这个ID是唯一的,用来表示每一个登录到IE浏览器的用户;当刷新浏览器时,这个值是不变的;但是当关闭当前浏览器再重新打开一个浏览器时,这个值就会改变 |
Enumeration getAttributeNames() |
获取session对象存储的所有值的名字,返回的是一个Enumeration的实例 |
void removeAttribute() |
删除session对象中名字为name的存储值 |
void Invalidate() |
中断当前的session对象 |
Boolean isNew() |
判断当前session对象是否是一个新创建的session对象 |
void setMaxInactiveInterval(int interval) |
用来指定时间,以秒为单位,servlet容器将会再这段时间保存会话有效 |
int getMaxInactiveInterval() |
返回最大时间间隔,以秒为单位,serlet容器将会在这段时间内保存会话打开 |
Session对象实例
login.jsp
loginSuccess.jsp
五秒之后刷新界面(会话有效期为5s,5s之后页面信息自动销毁)
3.2 application对象
该对象主要用于多个jsp页面或者servlet之间共享变量,负责提供应用程序在服务器中运行是的一些全局信息
Application对象方法运用
运行结果如下,在刷新之后数目会增加
3.3 pageContext对象(该对象比较重要)
PageContext对象是jsp页面本身的上下文,它的作用范围是在同一页面使用它可以访问页面作用域中定义的所有隐式对象,pageContext自身还是一个域对象,可用来保存数据,通过pageContext域对象还可以操作另外三个作用域(Request,Session,ServletContext)
pageContext常用方法
这个功能就比较强大了,基本上什么他都有,因为是它是JSP页面的管理者(上下文),所以JSP中的内置对象呀,它统统能够获得,下面介绍它的api:
1)获得其它八大内置对象 getXxx()
在普通类中可以通过PageContext获取其他JSP隐式对象。自定义标签时就使用。
pageContext.getOut(); //获得out对象
pageContext.getApplication(); //获得application对象
等等....
2)对作用域的属性进行操作(四大作用域)
对默认作用域的属性进行操作。page
Object getAttribute(String name); //获得page作用域数据
void setAttribute(String name,Object o); //给page作用域设置内容
void removeAttribute(String name); //给page作用域移除内容
3)对指定作用域的属性进行操作
Object getAttribute(String name,int Scope); //获得 指定作用域中的数据
void setAttribute(String name,Object o,int Scope); //给指定作用域设置内容
void removeAttribute(String name,int Scope); // 移除指定作用域的内容(page/request/session/application)
4)提供作用域常量
PageContext.PAGE_SCOPE page
PageContext.REQUEST_SCOPE request
PageContext.SESSION_SCOPE response
PageContext.APPLICATION_SCOPE application
page中最厉害的方法是:
findAttribute(String name); //自动从page request session application依次查找,找到了就取值,结束查找。
在2.jsp中
pageContext对象方法应用
1.与request对象作用域比较
pageContextDame01.jsp
pageContext01_01.jsp
运行效果如图
结果分析:pageContext对象保存的属性只在当前页面有限,页面跳转后为空,request对象在当前request请求范围内有效。
- 与session,application对象作用域比较
结果展示
结果分析:session对象(作用范围为一段用户持续和服务器所连接的时间),application对象(从服务器开始到关闭)比pageContext(只适用于当前页面)生命周期要长,而application生命周期最长。
类型:ServletConfig
能够获取servlet的初始化参数,获取servletContext对象,获取servletName。
这个我在servlet中详细的讲解了,可以去查看!
包含了异常的信息
使用它,必须结合page指令中的isErrorPage属性和errorPage属性。
exception.jsp 抛异常的一个NullPointException,并且跳转到error.jsp错误显示页面 errorPage属性的意思是如果发生未捕捉到的异常,将会跳转到error.jsp页面
举例:
error.jsp isErrorPage属性说明该页面是一个错误显示页面,则可以使用exception对象
访问:访问http://localhost:8080/Web_Jsp/exception.jsp