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服务器上多个资源,然后关闭浏览器,整个过程称之为一次会话. 需要解决的问题 每个用户在使用浏览器与服务器会话的过程中,会产生 ...
随机推荐
- linux命令积累
lsof -i: //根据端口号查相关信息 //杀进程 ps -ef|grep appName //根据进程名称查找相关信息 grep -r "关键词" 目录 //在制定目录下根据 ...
- java word转html 报错 org/apache/poi/xwpf/usermodel/IRunBody
最终解决的办法是修改jar包版本,一定要对应上. <dependency> <groupId>org.apache.poi</groupId> <artifa ...
- 数据结构&算法的引言+时间复杂度
一.什么是计算机科学? 首先明确的一点就是计算机科学不仅仅是对计算机的研究,虽然计算机在科学发展的过程中发挥了重大的作用,但是它只是一个工具,一个没有灵魂的工具而已.所谓的计算机科学实际上是对问题.解 ...
- django基础知识之HTML转义:
HTML转义 Django对字符串进行自动HTML转义,如在模板中输出如下值: 视图代码: def index(request): return render(request, 'temtest/in ...
- 一、Java语言概述与开发环境、第一个java程序
目录: 1.1 Java特点 1.2 Java程序运行机制 1.3 安装JDl和配置环境变量 1.4 第一个JAVA程序 1.5 第一个JAVA程序的含义 前言 Java语言历时近二十年,已发展成为人 ...
- spark 源码分析之十四 -- broadcast 是如何实现的?
本篇文章主要剖析broadcast 的实现机制. BroadcastManager初始化 BroadcastManager初始化方法源码如下: TorrentBroadcastFactory的继承关系 ...
- 以Spring Cache扩展为例介绍如何进行高效的源码的阅读
摘要 日常开发中,需要用到各种各样的框架来实现API.系统的构建.作为程序员,除了会使用框架还必须要了解框架工作的原理.这样可以便于我们排查问题,和自定义的扩展.那么如何去学习框架呢.通常我们通过阅读 ...
- Java编程思想:序列化基础部分
import java.io.*; import java.util.Date; import java.util.Random; public class Test { public static ...
- 字符串翻转demo
1.利用char数组 public class stringfanzhaun { public static void main(String[] args) { String str="1 ...
- .net学习笔记之访问数据库
.net中访问数据库的两中方法 第一种是通过SqlHelper帮助类来访问数据库, 使用的是ADO.net技术. using System.Data; using System.Data.SqlCli ...