实现登录注册页面详细(Servlet+jsp+java)

2023-05-16

登录和注册实现

  • 1、基本需要
    • 1.1、工程依赖
    • 1.2、注册、登录、首页界面(jsp)
    • 1.3、创建数据库
    • 1.4、部署Tomcat
    • 1.5、项目层次结构
  • 2、实现注册和登录
    • 2.1、所需工具类
    • 2.2、dao层
    • 2.3、Service层
    • 2.4、controller层
      • 2.4.1、注册控制类(RegUserServletController):
      • 2.4.2、登录控制类(RegUserServletController):
  • 3、注意事项

1、基本需要

1.1、工程依赖

 <!--    Servlet依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
    <!--    JSP依赖-->

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
      <scope>provided</scope>
    </dependency>

    <!--EL SPec依赖-->
    <dependency>
      <groupId>javax.el</groupId>
      <artifactId>javax.el-api</artifactId>
      <version>3.0.0</version>
    </dependency>

    <!--    JSTL依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.20</version>
    </dependency>

    <!-- 添加MySQL驱动依赖 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.49</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.75</version>
    </dependency>

1.2、注册、登录、首页界面(jsp)

注册界面

<%@ page contentType="text/html; charset=utf-8" language="java" pageEncoding="UTF-8" %>
<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>注册 - </title>
	<link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/css/zui.css" media="all">
	<link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/css/login.css" media="all">
    <link href="${pageContext.servletContext.contextPath}/css/animate.min.css" rel="stylesheet">
	<link href="${pageContext.servletContext.contextPath}/css/font-awesome.min.css" rel="stylesheet">
	<style> body { background-image: url(${pageContext.servletContext.contextPath}/images/4.jpg);}</style>
</head>
<!--/************************************************************
 *																*
 * 						      							*
 *                        							*
 *       		  努力创建完善、持续更新插件以及模板			*
 * 																*
**************************************************************-->
<body>
<div id="main-box"></div>
<div id="main-content"> 
<div class="login-body  animated fadeInLeft">
    <div class="login-main pr">
        <form action="${pageContext.servletContext.contextPath}/reg.do" method="post" class="login-form">
            <p style="color: red">${message}</p>
            <h3> 注册中心 </h3>
        <h5 style="padding-bottom: 10px"> System Management Center </h5>
        		    <!-- 注册 -->
        <div id="MobileBox" class="item-box"  >
            <div class="input-group user-name"> <span class="input-group-addon"><i class="icon-user"></i></span>
            <input type="text" name="username" class="form-control" placeholder="用户名">
         </div>
            <div class="input-group user-name"> <span class="input-group-addon"><i class="icon-user"></i></span>
                <input type="text" name="uname" class="form-control" placeholder="姓名">
            </div>
         <div class="input-group password"> <span class="input-group-addon"><i class="icon-lock"></i></span>
            <input type="password" name="password" class="form-control" placeholder="密码">
         </div>
            <div class="input-group password"> <span class="input-group-addon"><i class="icon-edit"></i></span>
                <input type="text" name="email" class="form-control" placeholder="邮箱">
            </div>
            <div class="input-group password"> <span class="input-group-addon"><i class="icon-phone"></i></span>
                <input type="text" name="phone" class="form-control" placeholder="手机号">
            </div>
            <div class="input-group password">
                <span class="input-group-addon">
                <input type="radio" name="sex" value=""><input type="radio" name="sex" value=""></div>

          <div class="login_btn_panel">
            <button class=" btn btn-primary btn-block btn-lg" data-ajax="post" type="submit" data-callback="success">注册</button>
            <div class="check-tips"></div>
          </div>
      </form>
     </div>
  </div>
</div>
<style>
.copyrights{text-indent:-9999px;height:0;line-height:0;font-size:0;overflow:hidden;}
</style>
<div class="copyrights" id="links20210126">
	Collect from <a href="http://www.cssmoban.com/"  title="网站模板">模板之家</a>
	<a href="https://www.chazidian.com/"  title="查字典">查字典</a>
</div>
</body>
</html>

登录界面

<%@ page contentType="text/html; charset=utf-8" language="java" pageEncoding="UTF-8" %>
<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>登录 - </title>
	<link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/css/zui.css" media="all">
	<link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/css/login.css" media="all">
    <link href="${pageContext.servletContext.contextPath}/css/animate.min.css" rel="stylesheet">
	<link href="${pageContext.servletContext.contextPath}/css/font-awesome.min.css" rel="stylesheet">
	<style> body { background-image: url(${pageContext.servletContext.contextPath}/images/4.jpg);}</style>
</head>
<!--/************************************************************
 *																*
 * 						      							*
 *                        							*
 *       		  努力创建完善、持续更新插件以及模板			*
 * 																*
**************************************************************-->
<body>
<div id="main-box"></div>
<div id="main-content"> 
<div class="login-body  animated fadeInLeft">
    <div class="login-main pr">
        <form action="${pageContext.servletContext.contextPath}/login.do" method="post" class="login-form">
            <p style="color: red">${message}</p>
            <h3>&emsp;&emsp;&emsp;</h3>
        <h5 style="padding-bottom: 10px"> Login </h5>
        		    <!-- 账号登陆 -->
        <div id="MobileBox" class="item-box"  >
            <div class="input-group user-name"> <span class="input-group-addon"><i class="icon-user"></i></span>
            <input type="text" name="username" class="form-control" placeholder="用户名/手机号">
         </div>
         <div class="input-group password"> <span class="input-group-addon"><i class="icon-lock"></i></span>
            <input type="password" name="password" class="form-control" placeholder="密码">
         </div>
          		  
		<div class="use-qrcode-a"><a class="use-ding" href="javascript:void(0)">
            <img src="${pageContext.servletContext.contextPath}/images/ding.png" width="17" height="17" style="margin-top:-2px"> 钉钉账号登陆</a> </div>
		  
   
          <div class="login_btn_panel">
            <button class=" btn btn-primary btn-block btn-lg" data-ajax="post" type="submit" data-callback="success">登录</button>
            <div class="check-tips"></div>
          </div>
      </form>
     </div>
  </div>
</div>
<style>
.copyrights{text-indent:-9999px;height:0;line-height:0;font-size:0;overflow:hidden;}
</style>
<div class="copyrights" id="links20210126">
	Collect from <a href="http://www.cssmoban.com/"  title="网站模板">模板之家</a>
	<a href="https://www.chazidian.com/"  title="查字典">查字典</a>
</div>
</body>
</html>

首页界面

<%@ page contentType="text/html; charset=utf-8" language="java" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<title>进销存管理系统</title>
		<link href="${pageContext.servletContext.contextPath}/view/css/Site.css" rel="stylesheet" type="text/css" />
		<link href="${pageContext.servletContext.contextPath}/view/css/zy.layout.css" rel="stylesheet" />
		<link href="${pageContext.servletContext.contextPath}/view/css/zy.form.css" rel="stylesheet" />
		<link href="${pageContext.servletContext.contextPath}/view/css/font-awesome.min.css" rel="stylesheet" />
		<style type="text/css">
			.headerlitooleulsubitem_gray {
				background-Color: White;
				position: absolute;
				border-left: 1px solid #BCD4E5;
				border-right: 1px solid #BCD4E5;
				border-bottom: 1px solid #BCD4E5;
				box-shadow: 0px 0px 5px #BCD4E5;
				width: 230px;
				margin-left: -170px;
				color: Black;
				display: none;
			}
			
			.headerlitooleulsubitem_red {
				background-Color: White;
				position: absolute;
				border-left: 1px solid #E5BCD4;
				border-right: 1px solid #E5BCD4;
				border-bottom: 1px solid #E5BCD4;
				box-shadow: 0px 0px 5px #E5BCD4;
				width: 230px;
				margin-left: -170px;
				color: Black;
				display: none;
			}
			
			.headerlitooleulsubitem_gray>li,
			.headerlitooleulsubitem_red>li {
				height: 45px;
				background-color: White;
				padding: 0px 10px;
				border-bottom: 1px solid #E4ECF3;
				font-size: 14px;
				line-height: 26px;
			}
			
			.headerlitoolelisubitemtitle_gray {
				height: 35px !important;
				line-height: 35px !important;
				background-color: #ECF2F7 !important;
				margin: 0px !important;
				color: #8090A0 !important;
				font-size: 14px;
				font-weight: bold;
				border-bottom: 1px solid #BCD4E5 !important;
			}
			
			.headerlitoolelisubitemtitle_red {
				height: 35px !important;
				line-height: 35px !important;
				background-color: #F7ECF2 !important;
				margin: 0px !important;
				color: #B471A0 !important;
				font-size: 14px;
				font-weight: bold;
				border-bottom: 1px solid #E5BCD4 !important;
			}
			
			.headerlitooleulsubitem_gray>li:hover {
				background-Color: #F4F9FC;
			}
			
			.headerlitooleulsubitem_red>li:hover {
				background-color: #FCF4F9;
			}
			
			.ulsubitemitems>li {
				float: left;
				height: 20px;
				font-size: 13px;
				font-weight: normal !important;
				color: #555 !important;
			}
			
			.ulsubitemitems>li:last-child {
				clear: both;
				width: 100%;
				height: 10px;
				margin-top: 8px;
				background-color: #DADADA;
			}
			
			.headerlitools_info {
				background-color: #0a318d;
				height: 45px;
				padding: 0px 10px;
				width: 135px;
			}
			
			.headeruserface {
				background-image: url('/content/resources/images/logo.png');
				width: 40px;
				height: 40px;
				background-color: white;
				margin: 2px 10px 2px 2px;
				border-radius: 20px;
				float: left;
			}
			
			.headerlitools_ulinfo {
				background-Color: white;
				border-left: 1px solid #D1D1D1;
				border-right: 1px solid #D1D1D1;
				border-bottom: 1px solid #D1D1D1;
				box-shadow: 0px 0px 5px #D1D1D1;
				width: 160px;
				margin-left: -20px;
				color: Black;
				display: none;
			}
			
			.headerlitools_ulinfo>li {
				height: 35px;
				background-color: White;
				padding: 0px 10px;
				font-size: 14px;
				line-height: 36px;
			}
			
			.headerlitools_ulinfo>li:hover {
				background-Color: #FEE188;
			}
			
			.dvcontent {
				padding: 0px 20px;
				margin: 45px auto 0px auto;
				overflow: auto;
			}
			
			.dvpagerecord {
				padding: 6px 12px;
				background-color: #EAEFF2;
				color: #2283C5;
				float: left;
				border: 1px solid #D9D9D9;
				text-decoration: underline;
				font-size: 14px;
				cursor: pointer;
			}
			
			.dvpagerecord:hover {
				cursor: pointer;
			}
			
			.dvpagerecord:hover i {
				text-decoration: underline;
			}
			
			.ulpageRecord {
				max-width: 165px;
				float: left;
				white-space: nowrap;
				overflow: hidden;
				margin: 0px;
				padding: 0px;
			}
			
			.ulpageRecord li {
				margin: 0px;
				padding: 6px 12px;
				background-color: #EAEFF2;
				color: #2283C5;
				display: inline-block;
				font-size: 14px;
				border: 1px solid #D9D9D9;
			}
			
			.ulpageRecord li:hover {
				text-decoration: underline;
				cursor: pointer;
			}
			
			.currentPage {
				background-color: #2468a9 !important;
				color: white !important;
			}
			
			#warn {
				width: 300px;
			}
			
			#warn tr {
				width: 300px;
				height: 20px;
			}
			
			#warn tr td {
				width: 90px;
				height: 20px;
				text-align: center;
			}
			
			iframe {
				border: none;
			}
		</style>
		<link href="${pageContext.servletContext.contextPath}/view/css/zy.menu.css" rel="stylesheet" />
	</head>

	<body>
		<div class="dvheader">
			<div class="dvheadertools">
				<span class="headerspantitle">进销存管理系统</span>
				<ul class="headerultools">

					<li class="headerlitools_info headerlitools" style="background-color: #075597">
						<div class="headeruserface" style="text-align: center;"><i class="icon-user" style="color: black;font-size: 19px;"></i></div>
						管理员<i style="margin-left: 8px;" class="icon-caret-down"></i>
						<ul class="headerlitools_ulinfo">

							<li style="border-top: 1px solid #E4ECF3;">
								<i class="icon-off" style="margin-right: 10px;"></i>
								<a style="color: black; text-decoration: none;">退出</a>
							</li>
						</ul>
					</li>
				</ul>
			</div>
		</div>
		<div class="dvcontent">

			<ul class="ulleftmenu" style="border-right: 1px solid #ddd;">

				<li class="limenuitem">
					<i class="icon-cog menuicon"></i>系统菜单<b class="arrow icon-angle-down arrow-down"></b>
					<ul class="ulleftsubitems">
						<a href="${pageContext.servletContext.contextPath}/view/type.jsp" target="right">
							<li>分类管理</li>
						</a>
						<a href="${pageContext.servletContext.contextPath}/view/inventory.jsp" target="right">
							<li>库存管理</li>
						</a>
						<a href="${pageContext.servletContext.contextPath}/view/inbound.jsp" target="right">
							<li>入库管理</li>
						</a>
						<a href="${pageContext.servletContext.contextPath}/view/warning.jsp" target="right">
							<li>预警信息设置</li>
						</a>
						<a href="${pageContext.servletContext.contextPath}/view/outBoud.jsp" target="right">
							<li>出库管理</li>
						</a>
						<a href="${pageContext.servletContext.contextPath}/view/user.jsp" target="right">
							<li>用户管理</li>
						</a>
						<a href="view/updatePwd.jsp" target="right"><li >修改密码</li></a>
					</ul>
				</li>
			</ul>
			<div style="position: absolute; left: 191px; right: 20px; ">
				<iframe src="view/type.jsp" scrolling="no" width="100%" height="1200" name="right" border="none"></iframe>
			</div>
		</div>
		<script src="${pageContext.servletContext.contextPath}/view/js/jquery-1.7.2.min.js" type="text/javascript"></script>
		<script src="${pageContext.servletContext.contextPath}/view/js/plugs/Jqueryplugs.js" type="text/javascript"></script>
		<script src="${pageContext.servletContext.contextPath}/view/js/_layout.js"></script>

		

	<style>
.copyrights{text-indent:-9999px;height:0;line-height:0;font-size:0;overflow:hidden;}
</style>
<div class="copyrights" id="links20210126">
	Collect from <a href="http://www.cssmoban.com/"  title="网站模板">模板之家</a>
	<a href="https://www.chazidian.com/"  title="查字典">查字典</a>
</div>
</body>

</html>

1.3、创建数据库

创建表:

create table user(
	id int primary key auto_increment comment '用户id',
	username varchar(50) unique not null comment '用户名',
	uname varchar(20) not null comment '姓名',
	password varchar(60) not null default '123456' comment '用户密码',
	email varchar(30) unique not null comment '邮箱',
	phone varchar(11) unique not null comment '手机号',
	sex varchar(8) not null comment '性别',
	is_delete int not null default '1' comment '用户状态:0:删除,1:正常',
	create_user_time varchar(100) not null comment '用户注册时间',
	modify_pwd_time varchar(100) comment '用户修改密码时间' 
);

在这里插入图片描述

1.4、部署Tomcat

在这里插入图片描述

1.5、项目层次结构

在这里插入图片描述

2、实现注册和登录

2.1、所需工具类

  在utils包下创建DruidUtils类

package com.cn.zpark.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class DruidUtils {

    private static DataSource dataSource;

    //初始化数据源
    static {
        Properties p = new Properties();
        InputStream ins = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");

        try {
            p.load(ins);
            //初始化配置数据源
            dataSource = DruidDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("初始化数据源失败");
        } finally {
            try {
                if (ins != null) {
                    ins.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static Connection getConn() throws SQLException {
        return dataSource.getConnection();
    }

    public static void close(Connection conn, ResultSet res, Statement... stat) {
        try {
            if (res != null) {
                res.close();
            }
            //迭代器 循环关闭
            for (Statement statement : stat) {
                if (statement != null) {
                    statement.close();
                }
            }
            assert conn != null;
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

2.2、dao层

  dao层接口以及实现类

package com.cn.zpark.dao;

// 用户持久层接口

import com.cn.zpark.pojo.User;

public interface IUserDao {

    Integer insertUser(User user);

    //登录接口
    User userLogin(String name);

}


// dao层实现类
package com.cn.zpark.dao.impl;

import com.cn.zpark.dao.IUserDao;
import com.cn.zpark.pojo.User;
import com.cn.zpark.utils.DruidUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDaoImpl implements IUserDao {
    // 定义数据库的连接信息
    private Connection conn = null;
    private PreparedStatement stat=null;
    private ResultSet res=null;
    User user = new User();
	
	//注册方法
    @Override
    public Integer insertUser(User user) {
        // 定义受影响的行
        Integer row = 0;
        try {
            //获取数据库连接对象
            conn = DruidUtils.getConn();
            //开启事务 增删改查

            conn.setAutoCommit(false);
            //创建sql语句
            String sql = "insert into user(username,uname,password,email,phone,sex,is_delete,create_user_time,modify_pwd_time )" +
                    "values(?,?,?,?,?,?,?,?,?)";
            //创建预编译sql对象
            stat = conn.prepareStatement(sql);
            // 替换占位符
            stat.setString(1,user.getUsername());
            stat.setString(2,user.getUname());
            stat.setString(3,user.getPassword());
            stat.setString(4,user.getEmail());
            stat.setString(5,user.getPhone());
            stat.setString(6,user.getSex());
            stat.setInt(7,user.getIsDelete());
            stat.setString(8,user.getCreateUserTime());
            stat.setString(9,user.getModifyPwdTime());

            // 执行sql,并且获取结果,修改row
            row = stat.executeUpdate();
            conn.commit();

        }catch (Exception e){
        // 回滚事务
            try {
                conn.rollback();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
        }finally {

            DruidUtils.close(conn,null,stat);
        }

        return row;
    }



    // 登录方法
    @Override
    public User userLogin(String name) {

        //获取连接信息
        try {
            conn = DruidUtils.getConn();
            //创建sql语句
            String sql = "select username, password from user where username = ?";
            //创建预编译对象
            stat = conn.prepareStatement(sql);
            //替换占位符
            stat.setString(1,name);
            //执行sql
            res = stat.executeQuery();
            while (res.next()) {
                //查询数据封装到User中
                String username = res.getString("username");
                String password = res.getString("password");
                user.setUsername(username);
                user.setPassword(password);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DruidUtils.close(conn,res,stat);
        }
        return  user;
    }
}


}

2.3、Service层

  Service层以及实现类:

package com.cn.zpark.service;

import com.cn.zpark.pojo.User;

public interface IUserService {
    //用户注册接口
    boolean  addUser(User user);

    //用户登录接口
    boolean loginUser(String username, String password);
}


//Service层实现类
package com.cn.zpark.service.impl;

import com.cn.zpark.dao.IUserDao;
import com.cn.zpark.dao.impl.UserDaoImpl;
import com.cn.zpark.pojo.User;
import com.cn.zpark.service.IUserService;
import java.text.SimpleDateFormat;
import java.util.Date;

public class  UserServiceImpl implements IUserService {

    // 声明dao层接口对象
    private final IUserDao userDao = new UserDaoImpl();

	 //业务层注册实现
    @Override
    public boolean addUser(User user) {
        //定义标记,默认用户注册失败
        boolean flag = false;

        //判断user是否为Null
        if (user == null){
            return flag;
        }

        // 补齐user信息
        user.setIsDelete(1); //设置用户为正常状态
        Date date = new Date();
        String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
        user.setCreateUserTime(time); //设置用户注册时间

        //调用dao执行插入操作数据
        Integer integer = userDao.insertUser(user);

        //判断添加数据结果
        if(integer > 0 ){
            flag = true;
        }
        return flag;
    }



    //业务层登录实现
    @Override
    public boolean loginUser(String name, String password) {
        boolean flag = false;
        //判断User是否为空
        User user = userDao.userLogin(name);
        if (user==null) {
            return flag;
        }else{
            if(user.getUsername().equals(name) && user.getPassword().equals(password)){
                flag = true;
            }
        }
        return flag;
    }


}

2.4、controller层

2.4.1、注册控制类(RegUserServletController):

package com.cn.zpark.controller;

import com.cn.zpark.pojo.User;
import com.cn.zpark.service.IUserService;
import com.cn.zpark.service.impl.UserServiceImpl;
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.text.SimpleDateFormat;
import java.util.Date;

@WebServlet("/reg.do")
public class RegUserServletController extends HttpServlet {
    // 声明service接口对象
    private final IUserService userService = new UserServiceImpl();

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取注册参数
        String username = request.getParameter("username");
        String uname = request.getParameter("uname");
        String password = request.getParameter("password");
        String email = request.getParameter("email");
        String phone = request.getParameter("phone");
        String sex = request.getParameter("sex");
        // 将注册参数分装到到User对象
        User user = new User();
        user.setUsername(username);
        user.setUname(uname);
        user.setPassword(password);
        user.setEmail(email);
        user.setPhone(phone);
        user.setSex(sex);
        user.setCreateUserTime(new SimpleDateFormat("yyyy--MM--dd HH:mm:ss").format(new Date()));
        // 调用service执行注册功能
        boolean flag = userService.addUser(user);
        // 判断service执行结果,true标识注册成功,重定向到登录页面,否则注册失败,提示用户
        if (flag){
            // 注册成功
            response.sendRedirect("login.jsp");
        }else{
            // 否则注册失败
            request.setAttribute("message","注册失败,请确认用户名是否被注册");
            //转发给reg.jsp
            request.getRequestDispatcher("reg.jsp").forward(request,response);
        }
    }
}

在这里插入图片描述

2.4.2、登录控制类(RegUserServletController):

package com.cn.zpark.controller;

import com.cn.zpark.service.IUserService;
import com.cn.zpark.service.impl.UserServiceImpl;

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("/login.do")
public class LoginUserServletController extends HttpServlet {
    //调用业务层接口对象
    private final IUserService userService = new UserServiceImpl();

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取表单参数
        String name = request.getParameter("username");
        String password = request.getParameter("password");
        //判断处理结果
        boolean flag = userService.loginUser(name,password);
        if(flag){
            //登录成功
            response.sendRedirect("index.jsp");
        }else{
            // 登录失败
            request.setAttribute("message","登录失败,请确认用户名或密码是否错误");
            //转发给reg.jsp
            request.getRequestDispatcher("login.jsp").forward(request,response);
        }


    }
}


在这里插入图片描述
登录流程:
在这里插入图片描述

3、注意事项

  可自行创建数据库以及前端页面,主要看实现方法代码。若要实现上述过程,私信发源码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现登录注册页面详细(Servlet+jsp+java) 的相关文章

随机推荐

  • 枯燥无味的Elasticsearch检索参数字典

    2023年第一篇文章就这样水文了 xff0c 拿出写了好久的 Elasticsearch查询请求时参数使用说明 水一次 xff0c 懒惰了 兄弟们见谅 xff0c 从发出来这篇文章开始 xff0c 懒惰一去不回了兄弟们 xff0c 让我们一
  • 取出list集合的数据

  • org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.hujin.springboo

    org apache ibatis binding BindingException Invalid bound statement not found com hujin springboottest18logback dao Stude
  • springboot配置数据库

    设置连接数据库的配置 如果mysql版本是8以上的 xff0c 是com mysql cj jdbc Driver xff0c 是8以下的 xff0c 是com mysql jdbc Driver spring datasource dri
  • 前后端分离项目,时间不是东八区的时间

    在实体类中加入 xff1a 64 JsonFormat pattern 61 34 yyyy MM dd 34 timezone 61 34 GMT 43 8 34 或者在配置文件中加入 xff1a 则输出了 xff1a
  • 后台数据请求允许跨域操作

    新建一个文件 xff0c 文件下面存放该java代码的java类 import org springframework context annotation Bean import org springframework context a
  • springboot文件上传和下载

    下面我写了三个接口路径 xff0c 注意看每个方法上面的注解噢 xff0c 解释了哪个哪个接口是干嘛的 xff0c 同时要设置属于自己的文件路径 xff0c 下面代码中有注解提示哪个是设置上传路径和下载路径噢 package com huj
  • Oracle VM VirtualBox 启动虚拟机时出错:Interface (‘VirtualBox Host-Only Ethernet Adapter‘) is not a Host-Only

    报错信息 xff1a Interface VirtualBox Host Only Ethernet Adapter is not a Host Only Adapter interface VERR INTERNAL ERROR 出现原因
  • 深度学习中端到端(end-to-end)简要理解

    端到端 xff08 end to end xff09 简要理解 端到端好处不同领域的端到端目标检测非end to end方法end to end方法 CV计算机视觉语音识别非端到端端到端 参考 端到端 端到端指的是输入是原始数据 xff0c
  • Arch安装deepin桌面环境

    Arch安装deepin桌面环境 一 xff1a 安装xorg组 sudo pacman S xorg 二 安装deepin xff1a sudo pacman S deepin deepin extra 包含deepin的r日历 提升用户
  • 全局函数重载operator++

    span class token keyword class span span class token class name Person span span class token punctuation span span class
  • ChatGPT万字长文理解透彻分布式事务

    分布式事务是指在分布式环境下 xff0c 对多个数据资源进行并行操作时 xff0c 需要保持数据资源之间的一致性和完整性 xff0c 同时具有ACID的特性 在分布式系统中 xff0c 由于存在多个数据存储节点 网络延迟 可用性等问题 xf
  • 使用AUR下载并安装常用程序

    提示 xff1a 文章如有不当之处可联系本人修该或删除 文章目录 前言一 AUR是什么 xff1f 二 使用步骤1 安装AUR2 安装AUR软件方法13 安装AUR软件方法24 卸载AUR包5 更新 升级AUR软件包6 安装AUR 总结 前
  • Java基础——Arrays类

    每日正能量 如果你要做一件事 xff0c 不要到处宣言自己的想法 xff0c 只管安安静静地去做 xff0c 值不值 xff0c 时间是最好的证明 xff0c 自己的人生 xff0c 得自己负责 Arrays类 JDK中提供了一个专门用于操
  • Java进阶——JSON格式了解

    文章目录 一 JSON 是什么二 JSON 的语法规则三 JSON 和 XML的比较四 JSON的解析和生成 xff08 JSON 和 JS 对象互转 xff09 五 JSON格式规定5 1 对象 xff08 0bject 5 2 数组 x
  • linux 终端美化教程

    linux 配置 ohmyzsh 文章目录 linux 配置 ohmyzsh 安装 ZSH 安装 Oh My Zsh 每次登录打开就是这样的 修改主题设置 主题预览 更新 zshrc 历史命令智能提示插件 zsh autosuggestio
  • 操作系统学习一(生产者与消费者问题)

    在Linux环境下模拟生产者消费者问题 实验前知识准备源代码 实验前知识准备 1 生产者消费者问题是一个著名的进程同步问题 xff0c 本次实验中 xff0c 用线程代替进程 源代码 span class token macro prope
  • SpringMVC 的配置

    1 引入依赖 lt dependency gt lt groupId gt org springframework lt groupId gt lt artifactId gt spring webmvc lt artifactId gt
  • 深度学习基础之优化器(optimizer)的介绍

    文章目录 前言SGD 随机梯度下降法 xff09 MomentumAdaGradRMSpropAdamMNIST手写数据集四种方法对比总结参考 前言 神经网络的学习的目的是找到使损失函数的值尽可能小的参数 这是寻找最优参数的问题 xff0c
  • 实现登录注册页面详细(Servlet+jsp+java)

    登录和注册实现 1 基本需要1 1 工程依赖1 2 注册 登录 首页界面 xff08 jsp xff09 1 3 创建数据库1 4 部署Tomcat1 5 项目层次结构 2 实现注册和登录2 1 所需工具类2 2 dao层2 3 Servi