Javaweb基础复习------Cookie+Session案例的实现(登录注册案例)
Cookie对象的创建--Cookie cookie=new Cookie("key","value");
发送Cookie:resp.addCookie();

获取Cookie数据:req.getCookie("","");

Cookie不能直接存储中文
需要进行转码:URL编码
String value=URLEncoding.encode(value,"utf-8");
解码:
String value=URLDecoding.decode(value,"utf-8");
登录注册案例实现
//用户登录
//登录界面的实现
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录界面</title>
</head>
<body>
<center>
<form action="loginServlet" method="post">
<h1 id="loginMsg">LOGIN</h1>
<div id="errorMsg">${login_msg}</div>
<tr>
<td>用户名:</td>
<td><input type="text" name="username" placeholder="请输入用户名"></td>
</tr>
<p>
<tr>
<td>密码:</td>
<td><input type="text" name="password" placeholder="请输入密码"></td>
</tr>
<p>
<tr>
<input type="checkbox" name="remember">记住信息
</tr>
<p>
<tr>
<button type="submit" value="登录">登录</button>
</tr>
</form>
</center>
</body>
</html>
//显示界面的实现
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: 12140
Date: 2022/10/27
Time: 14:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>浏览界面</title>
</head>
<body>
<center>
<h1>${user.username},欢迎你!</h1>
<table colspan="3">
<tr>
<td align="center">用户名</td>
<td align="center">密码</td>
<td align="center">学号</td>
</tr>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.username}</td>
<td>${user.password}</td>
<td>${user.id}</td>
</tr>
</c:forEach>
</table>
</center>
</body>
</html>
//后端界面的实现
//获取到前端输入的数据,并且进行判断该用户是否存在在数据库中
package org.example.serlvet;
import org.example.Bean.User;
import org.example.mapper.UserMapper;
import org.example.service.UserService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
private UserService us=new UserService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String username=req.getParameter("username");
String password=req.getParameter("password");
User user=us.login(username,password);
//判断
if(user!=null){
HttpSession hs=req.getSession();
hs.setAttribute("user",user);
String contentPath=req.getContextPath();
resp.sendRedirect(contentPath+"/allServlet");
}
else{
req.setAttribute("login_msg","用户名或者密码错误!");
req.getRequestDispatcher("index.jsp").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
//查询到数据库的表中的所有数据
package org.example.serlvet;
import org.example.Bean.User;
import org.example.service.UserService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/allServlet")
public class allServlet extends HttpServlet {
private UserService us=new UserService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
List<User> list=us.selectAll();
req.setAttribute("list",list);
req.getRequestDispatcher("look.jsp").forward(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
登录界面的实现:

显示界面的实现:

用户登录时需要注意到的问题
在进行用户的登录操作时,发现若是想要实现在利用c:forEach标签之前,将文本框中获取到的数据先展示在jsp页面,那么,我们需要利用
session实现存储数据的状态,到时候方便拿出来用;
因为这次的用户登录案例,在两个jsp页面之间,有两个servlet.java文件进行跳转,数据跳转就没了,需要session将数据存储起来,
到时候直接在第二个jsp页面利用一下就好!
记住用户案例的实现(复选框------记住我)


再返回到登录界面,就会显示出数据保存到这里的结果:

用户注册案例的实现(用户名不可重复)
//UserService.java(里面存放各种操作的具体实现方法)
//用户注册(添加)
public void add(User user){
SqlSession sqlSession=sf.openSession();
UserMapper us=sqlSession.getMapper(UserMapper.class);
us.add(user);
sqlSession.commit();
}
//用户判断注册
public boolean register(User user){
SqlSession sqlSession=sf.openSession();
UserMapper us=sqlSession.getMapper(UserMapper.class);
User u=us.selectByUsername(user.getUsername());
if(u==null){
//可以注册
us.add(user);
sqlSession.commit();
}
sqlSession.close();
return u==null;
}
//register.java(注册功能的具体实现方法)
package org.example.serlvet;
import org.example.Bean.User;
import org.example.service.UserService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/registerServlet")
public class registerServlet extends HttpServlet {
private UserService us=new UserService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String username=req.getParameter("username");
String password=req.getParameter("password");
User user=new User();
user.setUsername(username);
user.setPassword(password);
boolean flag=us.register(user);
if(flag){
req.setAttribute("register_msg","注册成功!请登录!");
//req.setAttribute("user",user);
req.getRequestDispatcher("index.jsp").forward(req,resp);
}else{
req.setAttribute("register_msg","注册失败!");
req.getRequestDispatcher("register.jsp").forward(req,resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
//注册界面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册界面</title>
</head>
<body>
<center>
<tr>
已有账号?<a href="index.jsp">登录</a>
</tr>
<form action="registerServlet" method="post">
<tr>
<td>用户名:</td>
<td><input type="text" name="username" placeholder="请输入用户名"></td>
<br>
<div id="errorUsername">${register_msg}</div>
</tr>
<p>
<tr>
<td>密码:</td>
<td><input type="text" name="password" placeholder="请输入密码"></td>
</tr>
<p>
<tr>
<td>验证码:</td>
<td><input type="text" name="yan" placeholder="请输入验证码"></td>
</tr>
<p>
<tr>
<button type="submit" value="提交">提交</button>
</tr>
</form>
</center>
</body>
</html>
若是数据库里面有与注册界面的那个username文本框里面的相同的数据,那么会显示注册不成功,需要重新注册!
验证码案例的实现
由于验证码用时较长,决定单独出一期,给足验证码“牌面”。
移步下一篇嗷!
Javaweb基础复习------Cookie+Session案例的实现(登录注册案例)的更多相关文章
- Java基础知识强化之集合框架笔记37:用户登录注册案例
1. 登录注册案例分析图解: 2. 用户登录案例 详细分析 和 分包实现: (1)用户登录案例详细分析(面向对象思想) 按照如下的操作,可以让我们更符合面向对象思想: • 有哪些类呢? ...
- vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)
前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...
- 登录注册案例(Servlet+JSP+Maven)
项目案例模板之登录注册的实现 案例演示 案例代码 设计表 pom.xml <dependencies> <dependency> <groupId>jun ...
- JavaWeb_(session和application)用户登录注册模板_进阶版
用户登录注册模板_基础版 传送门 用户登录注册模板进阶版 添加了获得获得当前登录用户信息及存储登录人数 用户登录后,在首页.注册页.登录页显示登录用户信息和存储登录人数信息 目录结构 <%@pa ...
- 会话跟踪技术 - Cookie 和 Session 快速上手 + 登陆注册案例
目录 1. 会话跟踪技术概述 2. Cookie 2.1 Cookie的概念和工作流程 2.2 Cookie的基本使用 2.3 Cookie的原理分析 2.4 Cookie的使用细节 2.4.1 Co ...
- 超全面的JavaWeb笔记day11<JSP&Session&Cookie&HttpSession>
1.JSP 2.回话跟踪技术 3.Cookie 4.HttpSession JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态 ...
- JavaWeb基础—会话管理之Cookie
一.什么是会话 打开浏览器,浏览各种资源,点击各种超链接,直至关闭浏览器,整个过程称为会话 二.会话管理的两种技术 1.Cookie 基于客户端.在客户端记录信息来确认用户身份.以cookie的形式写 ...
- 项目一:项目第二天 Jquery ztree使用展示菜单数据 2、 基础设置需求分析 3、 搭建项目框架环境--ssh(复习) 4、 SpringData-JPA持久层入门案例(重点) 5、 Easyui menubutton菜单按钮使用 6、 Easyui messager消息框使用
1. Jquery ztree使用展示菜单数据 2. 基础设置需求分析 3. 搭建项目框架环境--ssh(复习) 4. SpringData-JPA持久层入门案例(重点) 5. Easyui menu ...
- django基础 -- 8.cookie 和 session
一. cookie 1.cookie 的原理 工作原理是:浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容, 浏览器收到相应后保存在本地:当浏览器再次访问时,浏览器会自动带上Cooki ...
- JavaWeb -cookie&session&application
cookie&session&application总结 Cookie[key-value](不是内置对象必须new): 1. Cookie 是由服务端生成的,在发送给客户端保存 2. ...
随机推荐
- jenkins +docker+python接口自动化之jenkins拉取gitee上的代码(四)
1.背景 1.经过我们前面几轮的安装测试,我们已经安装了jenkins容器,python3,以及运行我们python代码所需要的第三方库在requirements.txt文件下统一安装. 2.需求 我 ...
- 运用TextSuite和TestRunner运行测试脚本
运用TextSuite和TestRunner运行测试脚本 import app.testcase.loginUI import unittest # mysuite = unittest.TestSu ...
- [Unity3D 小Tricks] 如何修改Unity3d脚本默认模板?
众所周知,unity默认的模板总是Update()和Start(),但往往我们并不需要,每次都要手动删除非常麻烦. 但可以更改如下模板文件 C:\Program Files\Unity 2020.3. ...
- Jmeter添加JSR223对Python的支持
通过下载:org.python : jython-standalone : 2.7.2 - Maven Central Repository Search jython-standalone-2.7. ...
- Python基础数据类型-Number(数字)
a = -1 # int b = 2.0 # float c = 13.11 # float d = 3.14j # complex print(type(a), type(b), type(c), ...
- js中的call()、apply()、bind()方法
var a= { name:"李四", age: "五岁", text: function() { return this.name+ " " ...
- 项目实训 day15-16
第一天我与灿哲沟通,我弄明白了真正的网络结构且如何运行的,自己记了下网络草图,开始初步用PlotNN绘制 第二天我发现pycore库表达能力不够,于是参考其他用tex写的例子,写了几个方法,最终能生成 ...
- 智利SUBTEL更新WiFi 6技术法规!
2022年9月6日,智利电信监管机构(SUBTEL) 发布了第2844号豁免决议,更新了1985号豁免决议,即短程设备的固定技术标准. 主要更新如下: • 2.4 GHz频段已在医疗设备目录中删除,现 ...
- java实现AES/CBC/pack5padding加解密算法
最近要测试一个借口,借口的传值参数是使用AES加密,偏移量为0000000000000000,秘钥:12345678901234567890123456789012,加密后内容转成16进制发送,用网上 ...
- FCC 高级算法题 收银机找零钱
Exact Change 设计一个收银程序 checkCashRegister() ,其把购买价格(price)作为第一个参数 , 付款金额 (cash)作为第二个参数, 和收银机中零钱 (cid) ...