什么是隐式对象?
JSP的隐式对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显式声明即可使用。
1、application:
1.1 application对象有效的范围是从web应用程序服务器一开始执行,到web服务器结束服务为止。
1.2 对于一个网站中所有的JSP页面,application对象只有一个。它们操作的是同一个application对象。
1.3 application是一个全局变量,所有访问同一服务器的客户都可访问application对象。
使用下面一个小例子来证明,在开启了服务器后,在不同的浏览器中访问,可以看到计数器是不断上升的,而不会从1开始。
<% int count = 0; if(application.getAttribute("count") == null){ count = 1; application.setAttribute("count", count); }else{ //值得注意的是,如果存进去的是int值,那么返回的也将是int值,而不是String类型的值 count = (Integer)(application.getAttribute("count")); count ++; application.setAttribute("count", count); } out.print("你是第"+count+"位访客..."); %>
1.4 获取服务器系统相关信息
application对象负责提供应用程序在服务器中运行时的一些全局信息,因此我们可以利用application来获取一些系统相关信息。
<% out.print("服务器信息: " + application.getServerInfo()+"
"); out.print("Java Servlet API 主版本号: " + application.getMajorVersion()+"
"); out.print("Java Servlet API 次版本号: "+application.getMinorVersion()+"
"); out.print("本网页的真实路径:"+application.getRealPath("index1.jsp")+"
"); %>
将得到输出结果:
服务器信息: Apache Tomcat/7.0.55
Java Servlet API 主版本号: 3
Java Servlet API 次版本号: 0本网页的真实路径:E:\Code\Java-Newer\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\jsp_ysdx\index1.jsp
2、config
2.1 config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数及服务器的有关信息。
2.2 主要是对web.xml的数据进行读取。实际上是通过getServletContext()方法获得application对象,再根据application对象获得。
可以直接在网页中获得web.xml中设置的数据
Config /index1.jsp username Chalmers password 123456 Config /servlet/config
out.print("username: " + config.getInitParameter("username") + "
"); out.print("password:" + config.getInitParameter("password"));
输出结果为:
username: Chalmers
password:123456
3、exception
作用如名所示,用来处理页面异常的。
3.1 exception对象常用方法如下
(1)getMessage()方法
(2)toString()方法
(3)printStackTrace()方法
(4)getLocalizedMessage()方法
(5)fillStackTrace()方法
3.2 用法:
注意:exception对象只能在定义了<%@ page isErrorPage="true"%>中使用,否则没有该对象
testException.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page errorPage="handleException.jsp"%> <% int a = 0; int b = 10 / a; %>
handleException.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page isErrorPage="true"%> <% out.print(exception.getMessage() + "
"); exception.printStackTrace(); %>
4、out
4.1 out对象主要用于向浏览器端输出数据
4.2 out实际上是带有缓冲特性的PrinterWriter,可以称之为JspWriter。缓冲区容量是可以设置的,甚至也可以关闭,
只要通过page指令的buffer属性就可以达到此目的。
4.3 JSP文件代码中的文件内容会自动生成out.print()或者out.println()输出。
5、page
5.1 page对象指代JSP页面本身、代表了正在运行的由JSP文件产生的类对象。
5.2 page对象的常用方法如下。
(1)getClass()方法
(2)equals()方法
(3)clone()方法
实际上就是从Object中继承的方法
6、request
6.1 请求有效:请求页面A,并向A中传递某些参数。
6.2 请求有效对象在处理结束时就会失效。
6.3 request对象可以获取哪些信息
6.3.1 建立HTML表单
6.3.2 用REQUEST对象处理
JSP页面将数据存放在request对象里,并将该请求传递到下一个页面,下一个页面访问request对象,处理上一个JSP页面传递过来的数据。
6.3.3 通过超链接来传递
6.3.4 通过jsp动作标签param来进行传递
6.4 传递一组数据
//发送一组数据到receive.jsp
//接收
//参数要一致
String[] habits = request.getParameterValues("habits"); for(String s : habits){ out.print(s+"
"); }
7、response
7.1 response对象负责将服务器端的数据发送回浏览器的客户端。主要用于向客户端发送数据,如Cookie、HTTP文件头等信息。
7.2 利用response实现自动刷新
7.2.1 刷新当前界面
response.setHeader("refresh", "3"); out.print(new Date().toString());
结果:每隔3秒刷新一次界面,显示当前时间
7.2.2 跳转界面
<% out.print("3秒后刷新..."); response.setHeader("refresh", "3;url=count.jsp"); %>
7.3 添加Cookie
<% Cookie cookie = new Cookie("username", "Chalmers"); //设置保存时间为60*60秒 cookie.setMaxAge(60 * 60); response.addCookie(cookie); %>
<% Cookie[] cookies = request.getCookies(); for (Cookie c : cookies) { if (c.getName().equals("username")) { out.print(c.getValue()); return; } } out.print("没有..."); %>
8、pageContext
8.1 pageContext对象能够存取其他隐含对象。
8.2 当隐含对象本身也支持属性时,pageContext对象也提供存取那些属性的方法。
9、session
9.1 session对象用于存储一个用户的会话状态,也就是说,session对象是对某个用户的会话过程中的信息存储。
9.2 当客户端访问服务器时,会在服务器中搜索对应的sessionID,如果没有找到,那么便会创建一个,如果找到了便直接使用。
所以在session 的有效时间内,每个客户端只有一个sessionID。
10、pageContext,request、session、application传递参数的使用范围:
10.1 设置参数值
<% pageContext.setAttribute("pageContext", "true"); request.setAttribute("request", "true"); session.setAttribute("session", "true"); application.setAttribute("application", "true"); %>
10.2 当前页面中,所有的对象都可以通过getAttribute获得值
10.2 在request的forward方法传递中,pageContext接收数据失败,所以pageContext只能在定义页面中使用。
10.3 request的include方法同上
10.4 如果使用response的sendRedirect方法,那么request也将接收失败。原因:客户端向服务端请求数据,服务端在向客户端发送数据
完成后,该request便已经结束,客户端访问url时已经是一个新的request了,所以request的使用范围是一个request内。
10.5 在session的有效时间内,数据都是存在的,特别强调的是,关闭浏览器不会清除掉session。
10.6 而application只有在关闭服务端后才会被清除,可见上面的application介绍。
10.7 总结:范围大小: application>session>request>pageContext
11.Cookie与Session的区别
Cookie是存在浏览器中的
Session是存在服务器中的
Cookie的安全性要低于Session
Cookie可能会被用户禁用
Session的数据是存在服务器内存中,关掉浏览器,会清空Session
临时性Cookie存在浏览器的缓存中,关掉浏览器,会清空
永久性Cookie是存在临时文件中,到达有效期前,一直存在