【JavaWeb】JAVABean+Session实现JSP登录注册(List模型数据库用户信息存储+商品展示)

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 先说说这个题目吧,好端端的数据库不连,偏偏喜欢要整一个JavaBean和List来模拟数据库,虽然说这样的做法非常的愚蠢,但没办法,毕竟是主人的任务是吧doge。作者其实已经做了一版,但是这代码写的实在是。。。于是乎作者使用了MVC框架后整理了一个新的。(如果你学了servlet,那会发现和它的结构和思想非常的像)

       先说说这个题目吧,好端端的数据库不连,偏偏喜欢要整一个JavaBean和List来模拟数据库,虽然说这样的做法非常的愚蠢,但没办法,毕竟是主人的任务是吧doge。作者其实已经做了一版,但是这代码写的实在是。。。于是乎作者使用了MVC框架后整理了一个新的。(如果你学了servlet,那会发现和它的结构和思想非常的像)

实现效果图

image.gif编辑

总体思路

    1. 尽量做到前后端分离,前端页面有什么页面就写什么,前端页面需要什么实体对象和业务对象后端就写什么。
    2. 后端涉及到的有实体对象(商品、用户)和业务处理(登录、注册)
    3. 前端涉及到的有登录、注册、商品展示页面。以及登录与注册相关的处理、成功/失败的结果页面

    项目工程文件结构

    image.gif编辑

    image.gif编辑

    后端

    pojo文件存储的是实体类,该实体类为JAVABean,特点是  属性private+属性getter()/setter()方法+无参构造方法,代码如下。

    用户实体类

    package week8.pojo;
    public class User {
        private String username;
        private String password;
        public User() {
        }
        public User(String username, String password) {
            this.username = username;
            this.password = password;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
    }

    image.gif

    商品实体类

    package week8.pojo;
    public class Good {
        public String tName;
        public int tPrince;
        public int tNum;
        public Good(String tName, int tPrince, int tNum){
            this.tName=tName;
            this.tNum=tNum;
            this.tPrince=tPrince;
        }
        public Good() {
        }
        public String gettName() {
            return tName;
        }
        public void settName(String tName) {
            this.tName = tName;
        }
        public int gettPrince() {
            return tPrince;
        }
        public void settPrince(int tPrince) {
            this.tPrince = tPrince;
        }
        public int gettNum() {
            return tNum;
        }
        public void settNum(int tNum) {
            this.tNum = tNum;
        }
        @Override
        public String toString() {
            return "thing{" +
                    "tName='" + tName + '\'' +
                    ", tPrince=" + tPrince +
                    ", tNum=" + tNum +
                    '}';
        }
    }

    image.gif

    商品集实体类

    package week8.pojo;
    import test.thing;
    import java.util.ArrayList;
    public class Repository {
        private ArrayList<Good> repo;
        public Repository(ArrayList<Good> repo) {
            this.repo = repo;
        }
        public Repository() {
        }
        public ArrayList<Good> getRepo() {
            return repo;
        }
        public void setRepo(ArrayList<Good> repo) {
            this.repo = repo;
        }
    }

    image.gif

    service文件主要存储的是业务类,尤其要注意UserService里有一个List对象来模拟数据库,且必须加static

    package week8.service;
    import week8.pojo.User;
    import java.util.ArrayList;
    public class UserService {
        //初始化定义一个list数据库
        private static ArrayList<User> userArrayList=new ArrayList<>();
        //登录业务
        public static User loginService(User user){
            String username= user.getUsername();
            String passwrod= user.getPassword();
            if(username==null|passwrod==null){
                return null;
            }
            for(User user1:userArrayList){
                System.out.println(user1.toString());
                System.out.println(username);
                System.out.println(user1.getUsername());
                System.out.println(passwrod);
                System.out.println(user1.getPassword());
                if(username.equals(user1.getUsername())&passwrod.equals(user1.getPassword()))
                    return user1;
            }
            return null;
        }
        //注册业务
        public  User registerService(User user){
            //若以username为候选键,则其必定为UNIQUE
            String username= user.getUsername();
            for(User user1:userArrayList){
                if(username.equals(user1.getUsername())){
                    return null;
                }
            }
            userArrayList.add(user);
            return user;
        }
    }

    image.gif

    前端

    登录页面

    登录展示页面-->业务处理页面-->处理结果页面

    登录展示页面,主要用于用户数据的接受

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登录</title>
    </head>
    <body>
    登录
    <form action="<%=request.getContextPath()%>/week8/login_handler.jsp" method="post">
      用户名:<input type="text" name="username"><br/>
      密&nbsp;码:<input type="password" name="password"><br/>
      <input type="submit" value="提交"/>
    </form>
    <a href="<%=request.getContextPath()%>/week8/register.jsp">如果您未注册,请先点击注册</a>
    </body>
    </html>

    image.gif

           业务处理页面,使用UserService对象的中的登录注册判定方法,从而决定要跳转到哪一个结果页面。如果用户账号密码登录成功,那就跳转到商品展示页面,所以可以在此页面对商品数据进行初始化。

    <%@ page import="week8.pojo.User" %>
    <%@ page import="week8.service.UserService" %>
    <%@ page import="week8.pojo.Repository" %>
    <%@ page import="week8.pojo.Good" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
        //初始化业务对象类,方便后续使用其方法
        UserService userService=new UserService();
        request.setCharacterEncoding("utf8");       // 设置字符集,避免出现乱码
        String username= request.getParameter("username");
        String password= request.getParameter("password");
        User user=new User();
        user.setUsername(username);
        user.setPassword(password);
        User loginUser=UserService.loginService(user);
        if(loginUser!=null){
            //登录成功建立Session会话
            session.setAttribute("user",loginUser);
            //初始化商品信息
            Repository repo=new Repository();
            ArrayList<Good> arrayList=new ArrayList<Good>();
            for (int i =0;i<20;i++)
            {
                Good t=new Good();
                t.tName="旺仔牛奶";
                t.tPrince=56;
                t.tNum=98;
                arrayList.add(t);
            }
            repo.setRepo(arrayList);
            session.setAttribute("repo",repo);
            response.sendRedirect("show.jsp");
        }
        else{
            request.setAttribute("msg","您输入的账号或密码有错误");
            request.getRequestDispatcher("/week8/login_error.jsp").forward(request,response);
        }
    %>

    image.gif

    登录失败页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <p style="color: red;font-size: 30px;text-align: center">登录失败:<%=request.getAttribute("msg")%></p>
    <a href="login.jsp">重新登录</a>

    image.gif

    登录成功页面,显示商品信息

    <%@ page import="week8.pojo.Repository" %>
    <%@ page import="week8.pojo.Good" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page import="java.util.Iterator" %>
    <%@ page import="week8.pojo.User" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <%
        User u1=(User)session.getAttribute("user");
        if(u1!=null){%><a href="login_quit.jsp">退出登录</a><%
        Repository repo=(Repository)session.getAttribute("repo");
        ArrayList<Good> thingArrayList=repo.getRepo();
        Iterator<Good> thingIterator=thingArrayList.iterator();
        Good t=null;%>
    <table>
        <tr>
            <th>名字</th>
            <th>库存</th>
            <th>价格</th>
        </tr>
        <%
            while(thingIterator.hasNext()){
                t=thingIterator.next();
        %>
        <tr>
            <td><%=t.gettName()%></td>
            <td><%=t.gettNum()%></td>
            <td><%=t.gettPrince()%></td>
        </tr><br/>
    </table>
    <%
        } }else{%>
    <a href="login.jsp">请先登录!</a>
    <%}%>
    </body>
    </html>

    image.gif

    注册页面

    注册展示页面-->注册业务处理页面-->处理结果页面

    注册展示页面,主要用于接受用户注册信息

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>注册</title>
    </head>
    <body>
    注册
    <form action="<%=request.getContextPath()%>/week8/register_handler.jsp" method="post">
      用户名:<input type="text" name="username"><br/>
      密&nbsp;码:<input type="password" name="password"><br/>
      <input type="submit" value="提交"/>
    </form>
    </body>
    </html>

    image.gif

    注册业务处理页面,使用UserService来对注册的用户名和密码进行处理,因为只需要显示是否登录成功,所以在业务处理之后,在本页面直接显示结果

    <%@ page import="week8.pojo.User" %>
    <%@ page import="week8.service.UserService" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
      UserService userService=new UserService();
      request.setCharacterEncoding("utf8");
      String username=request.getParameter("username");
      String password=request.getParameter("password");
      User user=new User();
      user.setPassword(password);
      user.setUsername(username);
      User loginUser=userService.registerService(user);
      if (loginUser!=null){
        out.print("注册成功");
        %>
    <a href="<%=request.getContextPath()%>/week8/login.jsp">去登录</a>
    <%
      }else{
      out.print("注册失败!");
    %>
    <a href="<%=request.getContextPath()%>/week8/register.jsp">重新注册</a>
    <%
      }%>

    image.gif

    退出登录页面

    注意此时session已经把所要连接的对象删除了,所以此时直接进入show.jsp商品展示页面不会显示出商品,只有返回登录的链接。

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
        session.invalidate();
        response.sendRedirect("login.jsp");
    %>

    image.gif

    目录
    相关文章
    |
    2月前
    |
    消息中间件 存储 NoSQL
    剖析 Redis List 消息队列的三种消费线程模型
    Redis 列表(List)是一种简单的字符串列表,它的底层实现是一个双向链表。 生产环境,很多公司都将 Redis 列表应用于轻量级消息队列 。这篇文章,我们聊聊如何使用 List 命令实现消息队列的功能以及剖析消费者线程模型 。
    89 20
    剖析 Redis List 消息队列的三种消费线程模型
    |
    2月前
    |
    前端开发 IDE 数据库连接
    ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD
    本文详细介绍了ThinkPHP6中模型层的使用,包括模型属性设置、表映射关系、以及如何在控制层中使用模型层进行CRUD操作。
    ThinkPHP6 模型层的模型属性,表映射关系,以及如何在控制层中使用模型层和模型层中的简单CRUD
    |
    2月前
    |
    前端开发 数据库 开发者
    数据模型(数据库表设计)生成代码
    BizWorks ToolKit 插件集成 Mybatis-Plus 代码生成工具,支持从数据库表批量生成代码,简化开发流程。本文详细介绍配置方法及项目示例,包括配置文件格式、生成选项及具体操作步骤,帮助开发者快速实现代码同步更新。配置文件 `.mp.yaml` 支持自定义输出目录、生成组件等,适用于多种项目结构。
    44 0
    |
    3月前
    |
    API 数据库 开发者
    【独家揭秘】Django ORM高手秘籍:如何玩转数据模型与数据库交互的艺术?
    【8月更文挑战第31天】本文通过具体示例详细介绍了Django ORM的使用方法,包括数据模型设计与数据库操作的最佳实践。从创建应用和定义模型开始,逐步演示了查询、创建、更新和删除数据的全过程,并展示了关联查询与过滤的技巧,帮助开发者更高效地利用Django ORM构建和维护Web应用。通过这些基础概念和实践技巧,读者可以更好地掌握Django ORM,提升开发效率。
    38 0
    |
    3月前
    |
    SQL Shell API
    python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
    python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
    |
    3月前
    |
    Java
    JSP中request对象的简单实用,实现简单的注册以及个人信息的展示
    该文章通过实例演示了JSP中request对象的用法,包括接收客户端请求信息、设置和获取属性,以及如何使用request对象在电子简历页面中展示个人信息。
    |
    5月前
    |
    存储 关系型数据库 MySQL
    MySQL周内训参照1、ER实体关系图与数据库模型图绘制
    MySQL周内训参照1、ER实体关系图与数据库模型图绘制
    73 1
    |
    5月前
    |
    SQL 数据可视化 数据库
    基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
    基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能
    23 0
    |
    5月前
    |
    存储 算法 Java
    List的魔法:如何在Java中实现高效有序存储
    【6月更文挑战第17天】在Java中,List接口(如ArrayList和LinkedList)实现有序存储,便于高效检索和排序。ArrayList适合索引访问,而LinkedList擅长插入删除。Collections.sort()和Java 8的Stream API能进一步优化排序和操作。优先队列或平衡二叉搜索树等数据结构在特定场景下也能提升有序存储效率。
    160 0