JavawebJSP教案.docx
- 文档编号:9056080
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:17
- 大小:289.34KB
JavawebJSP教案.docx
《JavawebJSP教案.docx》由会员分享,可在线阅读,更多相关《JavawebJSP教案.docx(17页珍藏版)》请在冰点文库上搜索。
JavawebJSP教案
第九章使用会话跟踪
授课时数:
4
一、教学重点
要求学生理解会话跟踪的概念,HTTP通信的特点以及无状态性,了解使用会话跟踪的意义所在。
重点是掌握如何使用会话对象session跟踪用户的会话信息。
二、教学难点
认真理解session作为容器进行使用的共享性,如何把用户在一个WEB页面的请求数据保存到会话对象session中,然后又如何在另一个WEB页面中把保存在会话对象session中的用户数据取出加以处理。
三、教学目标
通过学习,学生应能够在实际的WEB应用中运用会话对象session开发网上购物应用程序。
四、教学内容
会话跟踪
3HTTP的通信过程
3HTTP的无状态性
3会话的概念
3会话的特征
用session对象维护会话
3Session工作原理
3Session的ID
3Session的属性
3终止会话
五、教学过程
内容回顾:
上一节课,我们主要学习了JSP的3个内置对象,需要掌握的内容是:
3内置对象的概念
教师表述:
什么是内置对象,内置对象的作用,JSP中有几个内置对象,哪几个内置对象是比较常用的。
3内置对象request、response、out的用法
分别提问学生在JSP页面中什么情况下会用到request对象,什么情况下会用到response对象,什么情况下会用到out对象,教师给予指正。
1、会话跟踪
1.1HTTP的通信过程(板书)
3我们已经学过,JSP程序的运行是基于B/S的模式,用户通过客户端浏览器向Web服务器发送一个HTTP请求,当服务器收到请求时一个连接就建立了,服务器根据请求做必要的处理并生成一个响应信息,然后把它回送给客户端。
这个请求-响应过程是在一条网络连接上发生的。
这一过程结束后,服务器就关闭了该连接,而不会一直与客户端保持者连接的状态。
其过程如图2-1所示:
图2-1
举例:
这种情况如同寄信,地址姓名填好后往邮筒内一扔,收信人就能收到。
然而,和我们打电话的情形不一样,打电话也需要先建立连接,但在通话过程中,连接需要始终保持着直到通话完毕
3当用户发送另一条请求时,所有的请求-响应循环都将再次发生,客户和服务器之间必须重新建立连接。
解释:
日常生活中上网时,当你在IE的地址栏中输入然后回车,一个请求就发生了,这个请求根据URL中的域名对应的IP地址寻找到服务器,然后服务器再寻找到要执行的页面,默认寻找的文件名为index.*并进行解析执行,最后把执行的结果发送给客户端,这样我们就看到了新浪的主页面,当我们看到主页面时,这个请求-响应过程就已经发生并结束了,同时,这次连接就不存在了。
随后,我们通过点击新浪主页上面的超连接或导航按钮,这时,一个新的请求就发生了,又需要建立一个新的连接,而这个连接是完全不同于上次那个连接的一个新的连接。
还可以在类比到学生之前学习C、C++等编程语言中的函数调用,每次调用函数就会为该函数在内存中开辟运行空间,函数调用结束,这个运行空间就随之释放,所以,一个函数执行的情形就如同JSP页面的执行。
那么,大家可能会问,这样每次用户请求每次都要建立连接,挺浪费时间和资源的,为什么不能让用户第一次建立的连接一直保持着,以后的每次请求就可以不再建连接了呢?
原因是下面要讲到的:
HTTP协议被设计成为无状态性。
1.2HTTP的无状态性(板书)
3Web服务器需要为潜在的大量的用户服务。
对于一个服务器,接受一条网络连接就意味着通过一个套接字侦听进入的请求,如果一个服务器同时连接大量的用户(实际情况的确需要这样),这会消耗掉服务器大量的资源,包括线程和内存。
3为了能够服务于大量的用户,HTTP被设计成在每一次新请求中都使用新的连接,这种特性称为HTTP的无状态性。
结论:
由于HTTP具有的这种无状态性,使得我们不能通过把用户的数据存放在Servlet的实例变量中,进而引出需要使用会话对象session来保存用户需要在页面之间共享的的数据。
解释:
Servlet的实例变量又可称为是JSP页面中的变量,我们在第一节课中就讲到:
一个JSP页面在执行时会被服务器转译为一个Java类,也就是Servlet类,而页面中的变量对应的就是Servlet的实例变量。
我们知道,JSP页面的执行就如同一个被调函数的执行,当执行结果出来之后,页面中保存的数据都将自动消失,因为这个页面运行的空间被系统释放了。
所以,我们不能把用户的数据存放在Servlet的实例变量中。
3当一个用户连接到服务器时可能到不同的页面,而许多WEB程序需要用户在客户端的一系列请求之间能够互相关联,实现不同的页面之间数据的传递和共享,而HTTP协议是无状态的,基于WEB的应用程序需要维护这样的状态。
解释:
在实际应用中确实需要把一个页面中用户的数据保存起来,比如说一个网上购物的WEB应用,由很多页面组成,用户登录成功后在一个页面中挑选一种商品,添加到购物车中,然后点击超链接进入下一个商品页面,又挑选一种商品添加到购物车中。
注意:
这两次选择是在不同的HTTP连接中发生的,而用户希望两次挑选的商品在同一个购物车中一起结账,而不是每选一件商品都要结账一次。
这就需要一种机制来唯一的标识用户,以便跟踪用户在站点中的行为。
想一想:
我们在日常生活中到大型超市是如何购物的?
(让同学们思考)
JSP提供了内置对象Session,允许web容器针对每一个用户建立一个HTTP会话(即Session对象),每个HTTP会话将会自动被赋予一个唯一的会话编号(sessionID),因此可以利用会话对象session来唯一的标识用户,记录用户的数据信息。
下面我们先了解一下什么是会话?
1.3会话的概念
3从一个用户打开浏览器并连接到服务器开始到用户关闭浏览器离开这个服务器结束整个过程称做一个会话。
3在多次HTTP连接间利用内置对象session维护同一用户发出的不同请求时的数据称为维护一个会话
1.4会话的特征
3会话对象session就像一个容器一样能够存放用户在不同的页面中的会话数据。
session和用户是一一对应的,不同用户对应着不同的session。
3会话一旦建立就应当一直存在,直到用户空闲时间超过了某一个时间界限或用户退出了对服务器的访问,容器才应当释放该会话资源。
3在会话的存活期间,用户可能给服务器发送了很多请求,该用户的这些请求信息都可以存储在会话中。
3会话对象session的使用如图2-2所示:
图2-2
2、用session对象维护会话
2.1Session工作原理
3当用户第一次发出请求时,由WEB容器自动创建一个Session对象,该对象调用相应的方法可以存储用户在访问各个页面其间提交的各种信息,比如名字、号码等信息,同时这个Session对象被分配了一个唯一的SessionID与之对应。
这个SessionID也会随着HTTP响应内容传递给用户端浏览器。
传递的方式默认情况下为cookie,如果用户端浏览器关闭了cookie功能,就会使用URL重写技术传递给用户浏览器。
3在用户发出的后续请求中,请求信息中会包含WEB容器传递给它的SessionID。
WEB容器就会根据传回的SessionID寻找用户对应的Session对象,Session对象和客户之间是一个一一对应的关系,直到客户关闭浏览器后,服务器才将该用户的Session对象取消。
2.2Session的ID
3WEB容器在创建每一个新的HTTP会话对象时,都会赋予一个新的ID号。
WEB容器保证它在Web应用范围内是唯一的。
3这个ID号可以通过Session对象的getId()获得。
例如:
StringsessionId=session.getId();
案例1.用户在访问web应用的过程中,经常由一个页面跳转到另一个页面,JSP引擎不再为用户分配新的session对象,而是使用完全相同的一个,现在编写session.jsp、tom.jsp和jerry.jsp三个页面文件,分别在这些页面文件中获取session对象的ID,这些session对象的ID应该是相同的。
下面是源代码:
//文件session.jsp
<%@pagecontentType="text/html;charset=GB2312"%>
<%
Strings=session.getId();
%>
您的session对象的ID是:
<%=s%>
输入你的姓名连接到tom.jsp
程序运行结果如图2-3所示:
图2-3
讲解:
根据程序上述运行的结果讲解源代码,程序使用session.getId()获得session的ID号并在页面上显示,然后通过表单的提交请求去执行另一个页面tom.jsp。
//文件tom.jsp
<%@pagecontentType="text/html;charset=GB2312"%>
我是Tom页面
<%Strings=session.getId();
%>
您的在Tom页面中的session对象的ID是:
<%=s%>
点击超链接,连接到Jerry的页面。
欢迎到Jerry屋来!
程序运行结果如图2-4所示:
图2-4
讲解:
根据程序上述运行的结果讲解源代码,程序使用session.getId()再次获得session的ID号并在页面上显示,通过比较可知和第一个页面的ID号是一样的,然后通过超链接跳转到第三个页面jerry.jsp。
//文件jerry.jsp
<%@pagecontentType="text/html;charset=GB2312"%>
我是Jerry页面
<%Strings=session.getId();
%>
您在Jerry页面中的session对象的ID是:
<%=s%>
点击超链接,连接到session的页面。
欢迎到session屋来!
程序运行结果如图2-5所示:
图2-5
讲解:
根据程序上述运行的结果讲解源代码,程序使用session.getId()第三次获得session的ID号并在页面上显示,通过比较可知和前两个页面的ID号是一样的,从而说明三个页面用的Session对象是同一个对象。
2.3存取会话Session的属性
Session对象使用以下方法管理绑定到会话的属性
voidsetAttribute(Stringname,Objectvalue)
3将一个对象绑定到Session对象,使之成为Session对象的一个会话属性。
调用时由value指定的对象将变成其name属性。
3例如:
Accountacct=newAccount();
session.setAttribute("account",acct);
session.setAttribute("account",newInteger(100));
//标识为account的属性已经存在,将会把它原来对应的对象置换掉。
ObjectgetAttribute(Stringname)
3返回由name指定的会话属性,如果name指定的属性不存在将返回null。
例如:
在同一用户的会话有效期内的其他地方,我们可以把绑定到HttpSession对象上的对象取出来:
3例如:
Accountacct=session.getAttribute("account");
voidremoveAttribute(Stringname)
3删除由name指定的HttpSession对象的会话属性,如果由name指定的属性不存在,方法将直接返回。
3例如:
session.removeAttribute("account");
案例2.开发一个WEB应用,对用户登录进行验证,如果登录的用户名字为:
"zhangsan",登录的密码伟"12345",那么验证成功进入登录成功的页面,否则,进入登录页面。
//文件session_login.html
name: | |
password: | 登录类型: |
运行的结果如图2-6所示:
图2-6
讲解:
根据程序上述运行的结果讲解源代码,用户登录页面显示了需要用户输入名字和密码的文本框、登录的类型和登录安钮,用户输入的数据提交页面文件check_login.jsp进行验证。
//文件check_login.jsp
<%@pagecontentType="text/html;charset=GB2312"%>
<%
Stringname=request.getParameter("name");
Stringpassword=request.getParameter("password");
Stringtype=request.getParameter("type");
if(name.equals("zhangsan")&&password.equals("12345"))
{
session.setAttribute("name",name);
session.setAttribute("type",type);
session.setAttribute("mess","您已验证成功");
response.sendRedirect("loginsucess.jsp");
}
else
{
response.sendRedirect("session_login.html");
}
%>
讲解:
页面的功能是检查用户登录是否成功,这里假设用户名为zhangsan并且密码为12345就表示登录成功,用户的验证也可以通过连接数据库来进行。
如果验证成功则进入成功登陆的页面loginsucess.jsp,否则,重新返回登陆页面session_login.html,该页面是一个控制页面,并不产生任何的输出。
//loginsucess.jsp
<%@pagecontentType="text/html;charset=GB2312"%>
欢迎您!
<%=session.getAttribute("name")%>
<%=session.getAttribute("mess")%>
<%
if(session.getAttribute("type").equals("manager"))
{
%>
<%
}
else
{
%>
<%
}
%>
程序运行的结果如图2-7或2-8所示:
图2-7
图2-8
讲解:
页面的功能是从会话对象中取出用户的名字和登陆成功的数据信息,在页面上显示。
用户以管理员的身份登录成功后,则显示进入管理系统,否则,显示进入使用者界面。
2.4终止会话
如果要终止某个HTTP会话,可以使用下面的三种方式之一
publicvoidinvalidate()方法
3在web.xml中配置会话的生存时间,调用该方法将终止某个HTTP会话。
之后如果尝试向这个会话绑定属性,将会得到一个IllegalStateException异常。
3例如:
session.invalidate();
Accountacct=newAccount();
session.setAttribute("account",acct);
//本句将抛出IllegalStateException
publicvoidsetMaxInactiveInterval(intinterval)方法
3设置HTTP会话的超时时间,单位为秒。
3例如:
session.setMaxInactiveInterval(600);
//如果用户访问本Web应用程序的间隔超过了10分钟,容器将终止该会话。
如果interval的值为负数,HTTP会话将永不超时,除非容器被关闭,否则这个HTTP会话会一直存在于内存之中。
利用在web.xml文件中的设置终止会话
我们还可以在web.xml文件中设定所有HTTP会话的超时时间。
可在元素
如果在程序中没有另外指定,Web应用程序中的某一会话对应的用户访问间隔超过30分钟,容器将关闭该会话。
案例3.分别一个用三种不同的方法修改案例1中的第二个文件tom.jsp,再次运行案例1中的三个页面文件,比较在这三个页面文件中获取session对象的ID是否是相同的。
3.小结
本章讲授的主要内容是如何维护用户的会话信息,实现会话跟踪。
内容主要有会话跟踪的概念,为什么需要会话跟踪以及利用会话对象session对象如何维护会话信息,通过案例介绍了会话对象Session属性的使用,最后介绍了终止会话的三种不同方式。
课后作业:
开发一个WEB应用,用户通过一个JSP页面car.jsp选择商品提交给add.jsp,该文件负责将商品添加到用户session对象中(相当于用户的购物车),并将session对象中商品显示给用户,用户通过selectRemovedGoods.jsp文件选择要从购物车中删除的商品提交给removeWork.jsp,该文件负责从用户的购物车中删除商品。
电子信息工程学院何保锋
2007年10月23日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavawebJSP 教案
![提示](https://static.bingdoc.com/images/bang_tan.gif)