一、Session超时管理
在实际网站用户登陆后,在浏览其他页面过程中,可能中间会有其他事情停顿,一段时间内没有对该网站页面再次发送请求访问,待到一定时间过后(即保存登陆用户信息的session超时),当该用户再次点击其他请求链接的时候,就会返回到登陆界面,要求用户重新登陆。本案例将模拟简单的登陆然后session超时跳转到再次登陆界面。
设计思路(实现原理)
1)创建User用户实体类,有username和password两个属性,
2)创建Demo4类,Demo4类提供用户登陆跳转方法,
3)创建Demo5类,Demo5类模拟session超时失效,然后再次跳转到登陆页面
4)创建login.html登陆页面,
5)在web.xml中配置初始化参数和类的映射
6)通过浏览器访问login.html,并进行相关操作,查看页面效果。
启动Tomcat服务器,在地址栏中输入http://localhost:8080/chapter05/ login.html,访问浏览器显示的结果如下图所示:

在输入框随机输入用户名和密码,如”张三”、”123”,然后提交,浏览器显示的结果如下图所示:

在上图中显示用户登陆成功,并将用户放在了session中管理,再点击上图中的查看手机商品链接,短暂延迟后浏览器显示的结果如下所示:

同时观察Eclipse项目控制台可以发现报错Session already invalidated(session已经失效),信息如下:

实现代码如下:
Demo4.java

import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;/*** Servlet implementation class Demo4*/
public class Demo4 extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public Demo4() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();request.setCharacterEncoding("UTF-8");//解决读取html页面的中文乱码String username = request.getParameter("username");String password = request.getParameter("password");HttpSession session = request.getSession();session.setAttribute("username", username);session.setAttribute("password", password);//将数据储存于session中writer.println("您已登录,欢迎您," + username + "!");writer.write("<a href = 'http://localhost:8080/chapter05/Demo5'>产看手机商品</a>");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

Demo5.java

import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;/*** Servlet implementation class Demo5*/
public class Demo5 extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public Demo5() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();HttpSession session = request.getSession();session.invalidate();//强制清空try {//让当前的线程睡眠2秒钟,模拟网络延迟Thread.sleep(2 * 1000);} catch (InterruptedException e) {e.printStackTrace();}try {session.getAttribute("username");} catch(IllegalStateException e) {e.printStackTrace();}//找到错误并抛出writer.println("您还没有登录,请");writer.write("<a href = 'login.html'>登录</a>");System.out.println("异常:getAttribute: Session already invalidated");}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

二、Session实现用户登录
需求分析
在实际运用中的用户登陆网站中,多提供有记住密码和自动登陆等功能,方便同一用户短时间内不用再输入用户名和密码等繁琐信息可以快捷登陆。本案例将模拟用户自动登陆功能。
设计思路(实现原理)
1)创建login1.html页面,编写用户登陆界面
2)创建Demo6类, 编写用户登陆判断逻辑处理和自动登陆业务,
3)在web.xml中配置初始化参数和类的映射
4)通过浏览器访问login1.html,进行相关操作,查看页面效果。
启动Tomcat服务器,在地址栏中输入http://localhost:8080/chapter05/ login1.html,访问浏览器显示的结果如下图所示:

在输入框随机输入用户名,如“张三”,第一次不选中自动登陆框,然后点击提交按钮,浏览器显示的结果如下图所示:

则用户就会登陆网站了,当点击上图页面中的退出按钮就又返回到了初始登陆页面,如下所示:

可以在不输入用户名的情况下点击提交按钮,查看浏览器页面出现以下结果:

提醒用户输入用户名(因为还没有选中自动登陆功能),2秒后自动跳转到登陆页面,让用户必须登陆才可以;
第二次,在登陆界面随机输入用户名,如”zhangsan”,在勾选自动登陆框,点击提交按钮,浏览器显示结果如下:

则用户就会登陆网站了,当点击上图页面中的退出按钮就又返回到了初始登陆页面,这次不用输入用户名(必须在退出后的5秒内,因为代码中设置cookie的有效期是5秒钟),再次直接点击提价按钮,浏览器显示结果如下(用户实现了自动登陆功能):

实现代码如下:
Demo6.java

import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class Demo6*/
public class Demo6 extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public Demo6() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();request.setCharacterEncoding("UTF-8");String username = request.getParameter("username");String ck1 = request.getParameter("ck1");Cookie[] cookies = request.getCookies();if(username.equals("") && cookies == null) {writer.println("请输入用户名登录!");response.setHeader("Refresh", "2; URL = http://localhost:8080/chapter05/login1.html");} else {writer.println("您已登录,欢迎您!");writer.write("<a href = http://localhost:8080/chapter05/login1.html>退出</a>");if(ck1 != null) {Cookie cookie = new Cookie("username", username);cookie.setMaxAge(5);//有效期5秒response.addCookie(cookie);}}}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

Session超时管理以及Session实现自动登录——java web实验相关推荐

  1. 内嵌iframe_内嵌页面session超时,内嵌页面显示登录界面问题解决方案

    内嵌页面session超时,内嵌页面显示登录界面问题解决方案 我们在开发web项目的时候 经常用到iframe嵌套,这里的话 不管是开发的时候,还是正式环境使用.当session超时,或者重启项目,内 ...

  2. java 设置session超时_Java设置session超时(失效)的三种方式

    转自:http://blog.csdn.net/hu_shengyang/article/details/8021435 1.      在web容器中设置(此处以tomcat为例) 在tomcat- ...

  3. 求助!校园认证网络如何进行自动登录 java

    校园有一个网络认证的网页,输入账号和密码(无验证码)即可连接外网 请求: 1.我需要用java等技术写一个程序,进行自动登录,即不需要人工去输入账号密码 2.我该学习哪些东西?如Servlet或者其他 ...

  4. [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定...

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. linux 桌面管理器 xfce 用户自动登录

    vi /etc/lightdm/lightdm.conf [SeatDefaults] autologin-user=username #需要登录的用户名 autologin-user-timeout ...

  6. 使用Maven自动部署Java Web项目到Tomcat问题小记

    导读 首先说说自己为啥要用maven管理项目,一个直接的原因是:我在自己电脑上开发web项目,每次部署到服务器上时都要经历如下步骤: 首先在Eclipse里将项目打包成war包 将服务器上原来的项目文 ...

  7. Session会话管理

    会话管理 Web会话管理概述 常见的Web应用会话管理方式 基于Server端的Session的管理方式 基于Cookie的Session的管理方式 Cookie与Session最大的区别 Cooki ...

  8. session 超时时间设置

    在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的.Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时 ...

  9. Extjs6关于Ajax和form表单提交以及store请求session超时的处理方法

    对于Store的处理 每个store配置的时候,配上load监听,加载时处理: usrStore : {model : 'App.model.Usr',autoLoad : false,proxy : ...

最新文章

  1. ldconfig动态链接库管理以及修改ld.so.conf.d
  2. jepg图像的存储 转
  3. Objective-C 编码规范
  4. oss 视频 转码_播放oss问题的搜索结果-阿里云开发者社区
  5. java static成员变量方法和非static成员变量方法的区别 ( 二 )
  6. linux下tomcat6无法显示图片验证码 少了图形插件
  7. php将pdf文件存入数据库,关于tcpdf:在我的php数据库中制作pdf文件
  8. NgRx 和 Angular CLI 版本不一致的错误
  9. Vue.JS学习笔记
  10. 企业数字化劳动力-Srise RPA产品
  11. 洛谷P3812 【模板】线性基
  12. Leetcode 712.两个字符串的最小ASCII删除和
  13. TOGAF认证自学宝典V2.0
  14. 《SEM长尾搜索营销策略解密》一一1.1 做有个性的账户
  15. CS224W-图神经网络 笔记5.1:Spectral Clustering - 谱聚类基础知识点
  16. Druid连接池加密处理
  17. 等额本息贷款月付款额的推导公式
  18. nodejs毕业设计源码大学生心理咨询微信小程序
  19. 排列熵、模糊熵、近似熵、样本熵的原理及MATLAB实现之近似熵
  20. 一个老股民的炒股心得

热门文章

  1. SAP 生产订单/工单状态说明
  2. Linux pstack命令
  3. 高等数学(第七版)同济大学 习题5-4 个人解答
  4. fik在计算机领域英语缩写,计算机常用英语词汇表
  5. MYSQL-计算两个时间的时间差和工作日差
  6. jvm与非jvm语言优劣_JVM语言的兴衰
  7. matlab读取excel数据
  8. 如何识别一张图片中的字体,并复刻
  9. 前端工程师 - 面试题 (最新,最全)
  10. sqoop从oracle抽数到hive