page:在一个页面内保存属性,跳转之后无效 request:在一次服务请求范围内,服务器跳转后依然有效 session:-在一次会话范围内,无论何种跳转都可以使用,但是新开浏览器无法使用 application:在整个服务器上保存,所有用户都可以使用
1.2、4种属性范围都支持的操作下面,我们来对四种范围来分别进行详细的介绍
1.3、page范围
在JSP中设置一个页的属性范围,必须通过pageContext完成,PageContext属性范围是最重要的JSP属性之一,但是如果使用纯粹的JSP代码开发,此属性显示不出用处,其发挥作用在 Struts ,WebWork 中
如下:
${pageScope.name}这里用了EL表达式来取得值,输出结果如下,
这里要注意发果在其它页面使用:
如下:
输出结果:
这说明page范围的值只能在本页使用!
1.4、request属性范围request将属性保存在一次请求范围之内: 前提:必须使用服务器端跳转: 应用点:MVC设计模式、Struts、 Webwork
应用实例
首先是设置request:
request.jsp
然后是显示requestResult.jsp
访问结果:
这时比如requestResult1.jsp也想来访问这两个属性
内容和requestResult.jsp一样:
结果如下,说明request只针对服务器跳转有效,在两次跳转之间保存。
1.5、session属性范围
session:只要设置上去,则不管是什么跳转,都可以取得属性,主要用于验证用户是否登陆。EMAIL--->用户需要先进行登陆,登陆成功后再编辑邮件。与session有关的任何打开的页面都可以取得session
比如session.jsp设置如下:
然后是取出sesson的值sessionResult.jsp
输出结果:
如果还有一个sessionResult1.jsp和sessionResult.jsp一样如下
注意看上面的GIF动画和这里的获取到的时间是一样的,这也说明了这两个jsp页面取得了同一个值
1.6、application属性范围只要设置一次,则所有的页面窗口都可以取得数据。这里的值将会保存在服务器上,所以每一个用户都可以看见。
如下面application.jsp:
然后是applicationResult.jsp
输出结果:
如果这时在新建一个网页或新建一个新的web项目,但是它们两个要运行在同一个Tomcat中,那么它同样也能访问到这个值。
注意:
pplication、session、request--==--》都与要跨多个页,属性保存是有内存开销的,设置过多的application或每一个session保存过多的对象,性能就降低了。 原则:能用request就不要用session,能用session就不要用application application应用:在线人员统计、在线人员名单列表,要释放application资源,只能重新启动服务器.
使用application缓存数据库的连接,每次使用时,从缓冲中取出,用完就返回。
二、JSP九大内置对象详解内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用
JSP内置对象映射表
request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request response 响应对象 类型 javax.servlet.SrvletResponse 作用域 Page pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page session 会话对象 类型 javax.servlet.http.HttpSession 作用域 Session application 应用程序对象 类型 javax.servlet.ServletContext 作用域 Application out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page config 配置对象 类型 javax.servlet.ServletConfig 作用域 Page page 页面对象 类型 javax.lang.Object 作用域 Page exception 例外对象 类型 javax.lang.Throwable 作用域 page
JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception 2.1、request对象 request 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。实现常有的方法
1、获取数据
2、对所有数据进行再编码
如下实例将byte数组编码转换
4、获取requst信息:
我们第一次访问是默认用GET方法,表单提交后使用POST方式。
2.2、response对象
response 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。response对象的主要使用1.设置HTTP头信息、重定向、设置COOKie (1).Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,向客户端发送数据找HttpServletResponse,从客户端取数据找HttpServletRequest; (2).HttpServletResponse对象可以向客户端发送三种类型的数据:a.响应头b.状态码c.数据 2.2.1、response对象所提供的方法。 (1)设定表头的方法
(2)设定响应状态码的方法 (3)用来URL 重写(rewriting)的方法 (4)设置重定向 2.2.2、使用范例 (1)使用response对象可以设置HTTP的头信息。格式response.setHeader(“头信息名称”,”参数”),其中一个重要的头信息:refresh(刷新)。例如,每秒刷新一次也没,显示刷新次数:
输出结果如下:
(2)重定向
来输出结果看看:
输入http://localhost:8080/JspLearning/responseObject1.jsp,三秒后自动跳转到http://localhost:8080/JspLearning/index.jsp
当然还可以使用response.sendRedirect("**.jsp");命令
如下:
输出结果,直接重定向返回到首页了,
(3)设置cookie
(4)读取cookie2.3、session对象
session 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
(1)session(会话)对象是类javax.servlet.Httpsession的一个对象。session是从客户端连接服务器开始,到与服务器断开为止。 (2)session对象用于保存每个与服务器建立连接的客户端的信息,session的ID保存于客户端的Cookie中,这个session ID标识唯一和用户,与其他用户的session ID不同。 (3)session对象的ID: 当一个客户端访问服务器的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,并发给客户端。客户端将其存储于Cookie.a其标志了一个唯一的ID;采用getID()方法返回session对象在服务器端的编号。服务器端通过此ID,唯一地识别一个用户,并提供特殊的服务。 (4)session对象的有效期: 存在以下几个情况时,session对象和其存储的数据会消失,情况有: 当用户关闭当前正在使用的浏览器时; 关闭网页服务器。 用户未向服务器提出请求超预设时,Tomcat服务器预设为30分钟; 运行程序结束session. 出现以上四种情况时,session对象会消失。
以下是一个简单的session登陆实例:
login.jsp
welcome.jsp
logout.jsp
结果如下:输入正确用户名和密码后,等三秒,自动跳转到欢迎界面welcome.jsp。欢迎界面里点注销,重定向的注销界面login.jsp,等2秒后自动跳转到login.jsp
application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
运用实例:网页访问计数器。
输出结果:
运行结果就是访问到该页面之后显示你是第几位访客,刷新之后数目会增加,更换浏览器或者更换客户端地址都会使其访问值正常递增。 application的存活范围比request和session都要大。只要服务器没有关闭,application对象中的数据就会一直存在,在整个服务器的运行过程当中,application对象只有一个,它会被所有的用户共享。其中getRealPath这个方法可以获取资源在服务器上的物理路径(绝对路径),常用来获取上传文件时要存储文件的路径。
2.5、out 对象out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
out对象的方法
使用out对象进行页面的输出
这里在页面上输出是没有什么区别的,如果想换行要使用html元素 使用out对象获得缓冲区使用大小
输出结果
pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。 这个对象代表页面上下文,该对象主要用于访问JSP之间的共享数据。
实例:
输出结果:
config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
config 对象代表当前JSP 配置信息,但JSP 页面通常无须配置,因此也就不存在配置信息。该对象在JSP 页面中非常少用,但在Servlet 则用处相对较大。因为Servlet 需要配置在web.xml 文件中,可以指定配置参数。
web.xml配置里加上:
输出结果:
page 对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。
1 什么是page对象 ? (1) page对象代表JSP页面本身 page对象是当前JSP页面本身的一个实例,page对象在当前JSP页面中可以用this关键字来替代。 (2) 在JSP页面哪些地方可以使用page对象 在JSP页面的Java程序片中可以使用page对象 在JSP页面的JSP表达式中可以使用page对象 (3) page对象的基类是:java.lang.Object类。 注意:如果直接通过page对象来调用方法,就只能调用Object类中的那些方法。 (4) javax,servlet.jsp.JspPage接口 JspPage接口继承于javax.servlet.Servlet接口。 我们可以使用JspPage接口对page对象进行强制类型转换,再调用JspPage接口中的各种方法。 (5) javax,servlet.jsp.HttpJspPage接口 HttpJspPage接口继承于: javax.servlet.jsp.JspPage接口和javax.servlet.Servlet接口。 我们可以使用HttpJspPage接口对page对象进行强制类型转换,再调用HttpJspPage接口中的各种方法。 (6) 在JSP页面中使用this关键字,可调用哪些方法? 在JSP页面中,this关键字表示当前JSP页面这个对象,可以调用的常见方法,如下所示:
如下实例:
输出结果:
Exception对象是用来处理Jsp页面文件在执行时所有发生的错误和异常;Jsp页面文件必须在isErrorPage=true的情况下才可以使用该对象;该对象一般配合Page指令一起使用,通过指定某个页面为错误处理页面,把所有的错误都集中到那个页面进行处理,可以使整个系统的性能得到加强;常用方法如下 getMessage():返回错误信息 toString:以字符串的形式返回一个对异常的描述 printStackTrace():以标准错误的形式输出一个错误和错误的堆栈
(1) 可能出错的页面: 在有可能产生异常或错误的JSP页面中,使用page指令设置errorPage属性,属性值为能够进行异常处理的某个JSP页面。 简单来说,只要在当前JSP页面中产生了异常,就交给另外一个专门处理异常的JSP页面。
(2) 专门处理错误的页面: 在专门负责处理异常的JSP页面中,使用page指令设置isErrorPage属性为true,并使用exception对象来获取出错信息。
error.jsp
出错的页面
输出的结果:
不加errorPage="error.jsp"
这句的话:代码就会暴出来了