JavaWeb——使用会话维持状态3
这次的例子是使用会话给上一个例子添加登陆功能
1、页面逻辑
- 首先是登陆页面,这里需要输入账号和密码,输入正确后将进入商品列表页面,输入错误将会提示账号或者密码错误

- 其次是商品列表和购物车页面,添加了注销的链接

2、JSP
- 登陆页面的JSP,,loginFailed若为true表示用户已经尝试登陆且登陆出错,若为false表示用户还没用尝试登陆
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login application</title>
</head>
<body>
<h2>Login</h2>
You must log in to access the customer support site.<br /><br />
<%
if(((Boolean)request.getAttribute("loginFailed")))
{
%>
<b>The username or password you entered are not correct. Please try
again.</b><br /><br />
<%
}
%>
<form method="POST" action="<c:url value="/login" />">
Username<br />
<input type="text" name="username" /><br /><br />
Password<br />
<input type="password" name="password" /><br /><br />
<input type="submit" value="Log In" />
</form>
</body>
</html>
- 然后就是把这行代码加到商品列表和购物车页面
<a href="<c:url value="/login?logout=false" />">Logout</a>
3、代码逻辑
- 先是简单的建立账号密码数据库
private static final Map<String, String> userDatabase = new Hashtable<>();
static {
userDatabase.put("user1","password1");
userDatabase.put("user2","password2");
userDatabase.put("user3","password3");
userDatabase.put("user4","password4");
}
- 然后是doGet方法的逻辑,注销的链接是直接重定向到登陆页面的,所以登陆页面先是判断是否需要清空Session,然后通过username检测是否已经登陆过了,然后就是将loginFailed设为false并将请求转发给login.jsp
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
if(request.getParameter("logout") != null)
{
request.getSession().invalidate();
response.sendRedirect("login");
return;
}else if(session.getAttribute("username" )!= null)
{
response.sendRedirect("shop");
return;
} request.setAttribute("loginFailed",false);
request.getRequestDispatcher("/WEB-INF/jsp/view/login.jsp")
.forward(request, response);
}
- doPost将在用户点击提交时被调用,同样首先通过username检测是否已经登陆过,如果没有登陆过将检查账号密码是否有问题,没有问题重定向到商品列表页面,如果有问题的话将会把loginFailed设为true并将请求转发给login.jsp
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
if(session.getAttribute("username" )!= null)
{
response.sendRedirect("shop");
return;
} String username = request.getParameter("username");
String password = request.getParameter("password");
if(username == null || password == null ||
!LoginServlet.userDatabase.containsKey(username)||
!password.equals(LoginServlet.userDatabase.get(username))){
request.setAttribute("loginFailed",true);
request.getRequestDispatcher("/WEB-INF/jsp/view/login.jsp")
.forward(request,response);
} else {
session.setAttribute("username", username);
request.changeSessionId();
response.sendRedirect("shop");
}
}
JavaWeb——使用会话维持状态3的更多相关文章
- JavaWeb——使用会话维持状态2
在这次的例子里面,将完成一类似购物车的功能,在客户访问网站的时候,会选中自己将要购买的商品,而购物车将始终维持着商品的状态,会话将联系起选择第一个商品(第一个请求),选择其他商品(其他请求)以及付款等 ...
- JavaWeb——使用会话维持状态
1.会话的作用 使用会话是为了维持状态,维持的是请求域请求之间的状态.因为HTTP请求自身是完全无状态的.从服务器的角度来看,当用户发出第一个请求开始,服务器无法将新的请求与之前的请求关联起来,举例说 ...
- SqlServer性能急剧下降,查看所有会话的状态及等待类型---Latch_Ex
当某个数据库文件空间用尽,做自动增长的时候,同一时间点只能有一个用户人员可以做文件自动增长动作,其他任务必须等待,此时会出现Latch资源的等待.使用sp_helpdb查看业务数据库时发现:该数据库设 ...
- [原创]java WEB学习笔记28: 会话与状态管理Cookie 机制
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- JavaWeb(六):会话与状态管理
HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是完全孤立的.即使 HTTP1.1 支持持续连接,但当用户有一段时间没有提交请求,连接也会 ...
- JavaWeb基础—会话管理之Cookie
一.什么是会话 打开浏览器,浏览各种资源,点击各种超链接,直至关闭浏览器,整个过程称为会话 二.会话管理的两种技术 1.Cookie 基于客户端.在客户端记录信息来确认用户身份.以cookie的形式写 ...
- JavaWeb基础: 会话技术简介
会话技术 用户使用Web应用的过程实际是调用了一系列的Servlet来组合处理请求,从而完成整个业务流.不同Servlet组合起来为用户服务的时候就会遇到一个数据共享和传输的问题,如何让多个Servl ...
- java_web学习(8)会话与状态管
HTTP简介 WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议.HTTP是hypertext transfer protocol(超文本传输协 ...
- JavaWeb基础 - 会话
会话概述 什么是会话 简单的理解:用户打开浏览器,点击多个超链接,访问Web服务器上多个资源,然后关闭浏览器,整个过程称之为一次会话. 需要解决的问题 每个用户在使用浏览器与服务器会话的过程中,会产生 ...
随机推荐
- vue 跨域请求,后端cookie session取不到
虽然后端设置了可以跨域请求,但是后台设置到cookie中的session取不到!这时候mac电脑自己设置nginx代理! mac电脑系统重装了,记录一下安装nginx的过程: 1.打开终端(cmd) ...
- c++2的幂次方
c++2的幂次方 题目描述 任何一个正整数都可以用2的幂次方表示. 同时约定用括号来表示方次,即a的b次,可以表示为a(b). 由此可知,137可以表示为: 2(7)+2(3)+2(0) 进一步: ...
- Appium+python自动化(十九)- 猴哥失散多年的混血弟弟还是妹妹- Monkey(猴子)参数(超详解)
简介 前边几篇介绍了Monkey以及Monkey的事件,今天就给小伙伴们介绍和分享一下Monkey的参数. 首先我们看一下这幅图来大致了解一下: 1.Monkey 命令 基本参数介绍 -p <允 ...
- 剑指offer第二版-总结:排序算法
1.排序算法比较: 2.java实现 快排: /** * 快排 * * @since 2019年2月26日 下午1:37:34 * @author xuchao */ public class Qui ...
- HTML&CSS构建和设计网站
1.a链接:两个特性,href.target,href里添加mailto:邮箱可以直接链接到其它人的邮箱,添加#id,可以把窗口位置直接定位到该id的元素位置, target:_black可以在新的窗 ...
- Docker笔记(五):整一个自己的镜像
原文地址:http://blog.jboost.cn/2019/07/17/docerk-5.html 获取镜像的途径有两个,一是从镜像仓库获取,如官方的Docker Hub,二是自定义.上文已经介绍 ...
- 【攻略】百度货币识别API,搞定防诈骗的应用小程序
1.需求及方案: 近两年用外币进行诈骗的案件很多.例如:2015年12月,一安徽诈骗团伙,用不值1角人民币的50印蒂(intis,秘鲁旧货币,1991年发行新货币后已停止流通,目前无货币价值,仅有&q ...
- MsgWaitForMultipleObjects
Use caution when calling the wait functions and code that directly or indirectly creates windows. If ...
- 写给后端同学的vue
安装环境 安装vue-cli 脚手架 1. 安装nodejs环境 下载地址: (nodejs)[https://nodejs.org/zh-cn/download/] 安装(略) 2. 安装vue-c ...
- Vmware centos7无法联网的问题解决
VMware三种网络连接方式的区别 : 1) bridge : 默认使用VMnet0,不提供DHCP服务 在桥接模式下,虚拟机和宿主计算机处于同等地位,虚拟机就像是一台真实主机一样存在于局域网中.因此 ...