JSP 内置对象
- 了解和掌握 JSP 的常用内置对象。包括 request 对象、response 对象、session 对象、out 对象、pageContext 对象、exception 对象和 application 对象。
3.session 对象
- HTTP 协议是一种无状态协议,即一个用户向服务器发送请求(request),服务器返回响应(response),然后连接就被关闭,在服务器端不保留连接的相关信息。因此,当下一次请求连接时,服务器端已没有以前的连接信息,无法判断这一次连接和以前的连接是否属于同一用户,所以必须使用会话记录有关连接的信息。session 对象用于存储特定的用户会话所需的信息。当用户在应用程序的 Web页之间跳转时,存储在 session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,Web 服务器将自动创建一个 session 对象。当会话过期或被抛弃后,服务器将终止该会话。
(1)session 对象介绍
- session 对象处理客户端与服务器的会话,从客户端连接到服务器开始,直到客户端与服务器断开连接为止。session 对象用来保存每个用户的信息,以便跟踪每个用户的操作状态。其中,session 信息保存在容器里,session 的ID 保存在客户计算机的 Cookie 中。用户首次登录系统时容器会给用户分配一个唯一的 session ID 标识用于区别其他用户。当用户退出系统时,这个 session 就会自动消失。
- 当一个用户首次访问服务器上的一个 JSP 页面时,就会产生一个 session 对象,同时分配一个 String 类型的 ID 号,并将这个 ID 号发送到客户端,存放在 Cookie 中,这样 session 对象和用户之间就建立了一个一一对应关系。当用户在访问连接该服务器的其他页面时,不在分配给其新的 session 对象。直到关闭浏览器后,服务器端该用户的 session 对象才消失,与用户的对应关系也一并消失。当重新打开浏览器在连接到该服务器时,服务器会为该用户创建一个新的 session 对象。
- session 对象提供很多的方法,常用的方法如下:
方法 | 作用 |
---|---|
getAttribute(String name) | 用于获取与指定名称相关联的属性,如果属性不存在,将会返回 null |
getAttributeNames() | 用于返回 session 对象中存储的每一个属性对象,结果集是一个 Enumerical 类的实例 |
getCreateTime() | 用于返回 session 对象被创建的时间,单位为毫秒 |
getId() | 用于返回 session 对象在服务器端的编号,此编号是惟一的 |
getLastAccessedTime() | 用于返回和当前 session 对象相关的客户端最后发送请求的时间 |
getMaxInactiveInterval() | 用于返回 session 对象的生存时间,单位为秒 |
setAttribute(String name,java.lang.Object value) | 用于设定指定名字的属性值,并且把它存储在 session 对象中 |
setMaxInactiveInterval(int interval) | 用于设置 session 的有效时间,单位为秒 |
removeAttribute(String name) | 用于删除指定的属性(包含属性名和属性值) |
isNew() | 用于判断目前的 session 是否是新的 session,若是则返回 true,否则返回 false |
invalidate() | 将 session 设置为失效,一般在客户退出时使用,但要慎用,会清楚 session 中的所有数据 |
(2)session 对象实训
- 通过两个个实训来了解和掌握 session 对象常用的方法
【实训一】
本实训综合使用了 session 对象的多个方法,除此外,实现了统计页面访问次数的功能,页面每被访问一次数值加 1
- session1.jsp 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import = "java.util.Date" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>sesssion 对象实训1</title>
</head>
<body bgcolor = "CCCFFF">
<hr>
session 的创建时间:<%=session.getCreationTime() %> 
<%=new Date(session.getCreationTime()) %>
<br>
session 的 ID 号:<%=session.getId() %>
<br>
客户最近一次访问时间是:<%=session.getLastAccessedTime() %>
<%=new java.sql.Time(session.getLastAccessedTime()) %>
<br>
两次请求间隔多长时间 session 将被取消(ms):
<%=session.getMaxInactiveInterval() %>
<br>
是否新创建的 session:<%=session.isNew()?"是":"否" %>
<hr>
<%
session.setAttribute("name", "哥只是个传说");
session.setAttribute("password","1008611");
%>
姓名:<%=session.getAttribute("name") %>
<br>
密码:<%=session.getAttribute("password") %>
<br>
ID 号:<%=session.getId() %>
<br>
<%
session.setMaxInactiveInterval(500);
%>
最大有效时间:<%=session.getMaxInactiveInterval() %>
<br>
<%
session.removeAttribute("name");
%>
姓名:<%=session.getAttribute("name") %>
<hr>
<!-- 实现网页访问计数功能 -->
<%
int number = 10000;
// 从 session 对象获取 number
Object obj = session.getAttribute("number");
if(obj == null){
// 设定 session 对象的变量值
session.setAttribute("number", String.valueOf(number));
}
else{
number = Integer.parseInt(obj.toString());
number += 1;
session.setAttribute("number",String.valueOf(number));
}
%>
<br><br>
<br><br>
<center>
<h3>
您是第<%=number %>个用户访问本网站
</h3>
</center>
</body>
</html>
- 页面效果如下:
【实训二】
本实训包括三个文件:session2Login.jsp、shop.jsp、account.jsp。本实训模拟网上购物系统功能,客户登录(session2Login.jsp)后方可在网上购物(shop.jsp),购物完成后进行结账(account.jsp)
- session2Login.jsp 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>session 对象实训2——登录页面</title>
</head>
<body bgcolor = "CCCFFF">
<h2 align = "center">请先登录后购物</h2>
<hr>
<%
session.setAttribute("customer", "客户");
%>
<form action="shop.jsp" method = "post">
<table>
<tr>
<td>客户名:</td>
<td><input type = "text" name = "loginName"></td>
<td><input type = "submit" name = "submit" value = "登录">
</tr>
</table>
</form>
</body>
</html>
- 登录页面效果如下:
- shop.jsp 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>session 对象实训2——购物页面</title>
</head>
<body bgcolor = "CCCFFF">
<%
String na = request.getParameter("loginName");
session.setAttribute("name", na);
%>
<h2 align = "center">请输入想购买的商品:</h2>
<hr>
<form action="account.jsp" method = "post">
<table>
<tr align = "center">
<td>要购买的商品:</td>
<td><input type = "text" name = "goodsName"></td>
<td><input type = "submit" name = "submit" value = "购买">
</tr>
</table>
</form>
</body>
</html>
- 购物页面效果如下:
- account.jsp 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>session 对象实训2——结账页面</title>
</head>
<body bgcolor = "CCCFFF">
<%
String gn = request.getParameter("goodsName");
session.setAttribute("goods", gn);
String 客户 = (String)session.getAttribute("customer");
String 姓名 = (String)session.getAttribute("name");
String 商品 = (String)session.getAttribute("goods");
%>
<h2 align = "center">结账信息:</h2>
<hr>
<%=客户 %>的姓名是:<%=姓名 %>
<br>
你购买的商品是:<%=商品 %>
</body>
</html>
- 结账页面效果如下:
- 注意,实训二如果输出的是汉字会出现乱码现象,这个问题有待解决
**4.out 对象**
- out 对象用来向客户端输出数据
(1)out 对象介绍
- out 对象主要用于向客户端输出各种数据,同时管理应用服务器上的输出缓冲区(buffer)。应用服务器缓冲区默认值是 8KB,可以通过 page 指令中的 buffer 属性来设置缓冲区大小。
- out 对象提供多种方法,常用的方法如下:
方法 | 作用 |
---|---|
print()/println() | 用于输出数据。print 方法把数据输出到客户端,println 方法把数据输出到客户端并换行 |
newLine() | 用于输出一个换行符,实现换行功能 |
flush() | 用于输出缓冲区的数据。该方法将缓冲区数据输出到客户端后,在清空缓冲区数据 |
clearBuffer() | 先用于清除缓冲区数据,然后把数据输出到客户端 |
clear() | 用于清除缓冲区的数据,但不会将缓冲区数据输出到客户端 |
getBufferSize() | 用于获取缓冲区的空间大小 |
getRemaining() | 用于获取缓冲区剩余大小 |
isAutoFlush() | 用于判断是否自动刷新缓冲区。自动刷新返回 true,否则返回 fasle |
close() | 用于关闭输出流 |
(2)out 对象实训
- 通过一个实训来了解和掌握 out 对象常用方法的使用
【实训一】
- out1.jsp 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>out 对象实训</title>
</head>
<body bgcolor = "CCCFFF">
<%
out.print("<hr>");
String str = "努力学习 ";
String str1 = "天天向上";
out.print(str+"<br>");
out.println(str1);
out.print("<hr>");
out.print(str);
out.print(str1);
out.print("<br>");
out.print("以下是 out 对象其他常用方法的使用" + "<br>");
out.print("<hr>");
%>
获取缓冲区大小:<%=out.getBufferSize() %>
<hr>
获取剩余缓冲区大小:<%=out.getRemaining() %>
<hr>
获取是否是自动刷新:<%=out.isAutoFlush() %>
<hr>
<%
for(int i = 0;i < 2;i ++){
out.println("<h3>知识改变命运</h3>");
}
out.print("<hr>");
out.println("当前可用缓冲区大小:" + out.getRemaining());
out.print("<hr>");
out.flush();
out.println("当前可用缓冲区大小:" + out.getRemaining());
out.print("<hr>");
out.clearBuffer();
out.println("当前可用缓冲区大小:" + out.getRemaining());
out.flush();
%>
</body>
</html>
- 页面效果如下:
- 通过结果可以发现,最后一个 out.getRemaining() 语句没有出结果。
5.pageContext 对象
- 如果要操作 request、response、session、out 等对象中的数据,需要使用它们的相应对象进行操作。有一种对象可操作 request、response、session、out 等对象中的数据,这种对象就是 pageContext 对象。
(1)pageContext 对象介绍
- pageContext 对象提供了对 JSP 页面所有的对象及命名空间的访问路径,如访问 out 对象、request 对象、response 对象、session 对象、application 对象,即使用 pageContext 对象可以获取其他内置对象中的数据。
- pageContext 对象提供很多方法,常用方法如下:
方法 | 作用 |
---|---|
getRequest() | 用于返回当前页面的 request 对象 |
getResponse() | 用于返回当前页面的 response 对象 |
getSession() | 用于返回当前页面的 session 对象 |
getOut() | 用于返回当前页面的 out 对象 |
getException() | 用于返回当前页面的 exception 对象 |
getServletContext() | 用于返回当前页面的 application 对象 |
findAttribute(String name) | 用于按照页面、请求、会话以及应用程序范围的顺序实现对某个已命名属性的搜索,返回其属性或 null |
forward(String relativeUrlPath) | 用于把页面重定向到另一个页面或 Servlet 组件上 |
moveAttribute(String name) | 用于删除默认页面范围或特定对象范围之中的已命名属性 |
release() | 用于释放 pageContext 所占资源 |
include(String relativeUrlPath) | 用于在当前位置包含另一个文件 |
setAttribute(String name,Object attribute) | 用于设置指定属性及属性值 |
setAttribute(String name,Object obj,int scope) | 用于在指定范围内设置指定属性及属性值 |
getAttribute(String name,int scope) | 用于在指定范围内获取指定属性的值 |
getAttribute(String name) | 用于获取指定属性的值 |
(2)pageContext 对象实训
- 通过一个实训来了解和掌握 pageContext 对象常用方法的使用
【实训一】
- pageContext1.jsp 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>pageContext 对象实训</title>
</head>
<body bgcolor = "CCCFFF">
<h3>使用 pageContext 对象获取其他内置对象中的值</h3>
<hr>
<%
request.setAttribute("name", "好嗨哟");
session.setAttribute("name","我也是");
application.setAttribute("name", "难受");
%>
request 对象中的值:<%=pageContext.getRequest().getAttribute("name") %>
<hr>
session 对象中的值:<%=pageContext.getSession().getAttribute("name") %>
<hr>
application 对象中的值:<%=pageContext.getServletContext().getAttribute("name") %>
<hr>
</body>
</html>
- 页面效果如下:
6.exception 对象
- exception 对象用来处理 JSP 文件的异常,当一个页面在运行过程中发生了异常,就产生该对象。exception 对象可以配合 page 指令一起使用,此时 page 指令中的 isErrorPage 属性应设为 true,否则无法通过编译。
(1)exception 对象介绍
- 通过 exception 对象的方法指定某一个页面为错误处理页面,把所有的错误都集中到该页面进行处理,可以使整个系统的健壮性得到加强,也使程序的流程更加简单清晰。
- exception 对象提供很多方法,常用的方法如下:
方法 | 作用 |
---|---|
getMessage() | 用于返回描述异常错误的提示信息 |
getlocalizedMessage() | 用于获取本地化错误信息 |
printStackTrace() | 用于输出异常对象及其堆栈跟踪信息 |
toString() | 返回关于异常的简短描述信息 |
(2)exception 对象实训
- 通过一个实训来了解和掌握 exception 对象的常用方法的使用
【实训一】
- exception1.jsp 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>exception 对象实训</title>
</head>
<body bgcolor = "CCCFFF">
<h3>以下是异常信息:</h3>
<hr>
<%
int x= 6;
int y = 0;
int z;
try{
z = x / y;
}catch(Exception e){
out.print(e.toString() + "<br>");
out.print("<hr>");
}
finally{
out.print("产生了除以 0 的错误!");
}
%>
<hr>
</body>
</html>
- 页面效果如下:
7.application 对象
- application 对象用来保存 Java Web应用程序使用的变量,所有用户不论何时皆可存取使用该对象的数据。application 对象最大的特点是没有生命周期,即不论客户端的浏览器是否关闭,application 对象都存在于服务器上。
(1)application 对象介绍
- application 对象保存 Java Web 应用程序中的公有数据,可存放全局变量。服务器启动后自动创建 application 对象,该对象一直有效,直到服务器关闭。不同用户可以对该对象的同一属性进行操作;在任何地方对该对象属性的操作,都将影响其他用户对该对象的访问。
- session 对象和 application 对象的区别是:在使用 session 对象时,一个客户对应一个 session 对象,而application 对象为多个应用程序保存信息,对于一个容器而言,在同一个服务器中的多个 JSP 文件共享同一个 application 对象。
- application 对象提供很多方法,常用的方法如下:
方法 | 作用 |
---|---|
getAttribute(String name) | 用于返回指定 application 对象的属性值 |
getAttributeNames() | 用于以 Enumeration 类型返回 application 对象属性的所有值 |
getServerInfo() | 用于返回 servlet 编译器的版本信息 |
setAttribute(String name,Object obj) | 用于设定 application 对象指定属性及其属性值 |
removeAttribute(String name) | 用于删除 application 对象指定属性及其属性值 |
(2)application 对象实训
- 通过一个实训来了解和掌握 application 对象常用方法的使用
【实训一】
- application1.jsp 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>application 对象实训</title>
</head>
<body bgcolor = "CCCFFF">
<hr>
JSP 引擎名及 Servlet 版本号为:<%=application.getServerInfo() %>
<hr>
<%
application.setAttribute("name", "好嗨哟");
out.print(application.getAttribute("name") + "<br>");
out.print("<hr>");
application.removeAttribute("name");
out.print(application.getAttribute("name") + "<br>");
%>
<hr>
</body>
</html>
- 页面效果如下: