JSP程序设计实训(六)——JSP内置对象(二)

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() %>&nbsp
		<%=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>
  • 页面效果如下:

在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值