IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Java全栈(四)web网页技术:9.书城项目实战一:jQuery和Servlet练习 -> 正文阅读

[JavaScript知识库]Java全栈(四)web网页技术:9.书城项目实战一:jQuery和Servlet练习

一.项目介绍

1.项目页面原型下载

书城项目页面原型可以直接从gitee上下载:https://gitee.com/ouyi19940129/BookStore.git

2.项目页面原型目录讲解

在这里插入图片描述

二.阶段1:jQuery实战

1.需求:

在这里插入图片描述

2.实现:

(1)使用IDEA创建web项目

  • 先创建一个普通java项目
    在这里插入图片描述

  • 在该项目中引入web
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    classes用于存放编译后的文件,lib存放第三方jar包
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 将项目页面原型代码复制到web目录下
    在这里插入图片描述
    在这里插入图片描述

(2)使用jQuery实现登录页面的用户名密码非空校验

  • pages/user/login.html中引入jquery-1.7.2.jslogin.js
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8" />
        <title>尚硅谷会员登录页面</title>
        <link type="text/css" rel="stylesheet" href="../../static/css/style.css" />
        <script type="text/javascript" src="../../static/script/jquery-1.7.2.js"></script>
        <script type="text/javascript" src="../../static/script/login.js"></script>
      </head>
      <body>
        <div id="login_header">
          <a href="../../index.html">
            <img class="logo_img" alt="" src="../../static/img/logo.gif" />
          </a>
        </div>
    
        <div class="login_banner">
          <div id="l_content">
            <span class="login_word">欢迎登录</span>
          </div>
    
          <div id="content">
            <div class="login_form">
              <div class="login_box">
                <div class="tit">
                  <h1>尚硅谷会员</h1>
                </div>
                <div class="msg_cont">
                  <b></b>
                  <span class="errorMsg">请输入用户名和密码</span>
                </div>
                <div class="form">
                  <form action="login_success.html">
                    <label>用户名称:</label>
                    <input
                      class="itxt"
                      type="text"
                      placeholder="请输入用户名"
                      autocomplete="off"
                      tabindex="1"
                      name="username"
                      id="username"
                    />
                    <br />
                    <br />
                    <label>用户密码:</label>
                    <input
                      class="itxt"
                      type="password"
                      placeholder="请输入密码"
                      autocomplete="off"
                      tabindex="1"
                      name="password"
                      id="password"
                    />
                    <br />
                    <br />
                    <input type="submit" value="登录" id="sub_btn" />
                  </form>
                  <div class="tit">
                    <a id = "submit" href="regist.html">立即注册</a>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div id="bottom">
          <span>
            尚硅谷书城.Copyright &copy;2015
          </span>
        </div>
      </body>
    </html>
    
  • static/script/目录下创建login.js文件
    $(function () {
        /**
         * 检查用户名函数
         */
        function checkUsernamePassword() {
            var username = $("#username").val();
            var password = $("#password").val();
            if (username == "" || password == "") {
                alert("用户名密码不能为空");
                return false;
            }
        }
    
        /**
         * 点击登录按钮事件函数
         */
        $("#sub_btn").click(checkUsernamePassword);
    })
    

(3)使用jQuery实现注册页面校验

  • pages\user\regist.html文件中引入jquery-1.7.2.jsregist.js文件
    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8" />
        <title>尚硅谷会员注册页面</title>
        <link type="text/css" rel="stylesheet" href="../../static/css/style.css" />
        <link rel="stylesheet" href="../../static/css/register.css" />
        <style type="text/css">
          .login_form {
            height: 420px;
            margin-top: 25px;
          }
        </style>
        <script type="text/javascript" src="../../static/script/jquery-1.7.2.js"></script>
        <script type="text/javascript" src="../../static/script/regist.js"></script>
      </head>
      <body>
        <div id="login_header">
          <a href="../../index.html">
            <img class="logo_img" alt="" src="../../static/img/logo.gif" />
          </a>
        </div>
    
        <div class="login_banner">
          <div class="register_form">
            <h1>注册尚硅谷会员</h1>
            <form action="regist_success.html">
              <div class="form-item">
                <div>
                  <label>用户名称:</label>
                  <input id="username" type="text" placeholder="请输入用户名"/>
                </div>
                <span class="errMess" id="userErrMess">用户名、密码:只能是字母(大小写)、数字、_。6-18位</span>
              </div>
              <div class="form-item">
                <div>
                  <label>用户密码:</label>
                  <input type="password" id="password" placeholder="请输入密码" />
                </div>
                <span class="errMess" id="passErrMess">只能是字母(大小写)、数字、_。6-18位</span>
              </div>
              <div class="form-item">
                <div>
                  <label>确认密码:</label>
                  <input type="password" id="rePassword" placeholder="请输入确认密码" />
                </div>
                <span class="errMess" id="rePasswordErrMess">密码两次输入不一致</span>
              </div>
              <div class="form-item">
                <div>
                  <label>用户邮箱:</label>
                  <input type="text" id="email" placeholder="请输入邮箱" />
                </div>
                <span class="errMess" id="emailErrMess">请输入正确的邮箱格式</span>
              </div>
              <div class="form-item">
                <div>
                  <label>验证码:</label>
                  <div class="verify">
                    <input type="text" id="verify" placeholder="" />
                    <img src="../../static/img/code.bmp" alt="" />
                  </div>
                </div>
                <span class="errMess" id="verifyErrMess">请输入正确的验证码</span>
              </div>
              <button class="btn" id="register">注册</button>
            </form>
          </div>
        </div>
        <div id="bottom">
          <span>
            尚硅谷书城.Copyright &copy;2015
          </span>
        </div>
      </body>
    </html>
    
  • static/script/regist.js文件中实现注册用户输入参数的校验
    $(function () {
    
        /**
         * 用户名校验
         */
        function checkUsername() {
            var reg = /^[a-zA-Z0-9_]{6,18}$/;
            var userVaule = $("#username").val();
            if (reg.test(userVaule) == false) {
                $("#userErrMess").css("visibility", "visible");
                return false;
            } else {
                $("#userErrMess").css("visibility", "hidden");
            }
        }
    
        /**
         * 密码校验
         */
        function checkPassword() {
            var reg = /^[a-zA-Z0-9_]{6,18}$/;
            var passwordValue = $("#password").val();
            if (reg.test(passwordValue) == false) {
                $("#passErrMess").css("visibility", "visible");
                return false;
            } else {
                $("#passErrMess").css("visibility", "hidden");
            }
        }
    
    
        /**
         * 确认密码
         */
        function checkrePassword() {
            var passwordValue = $("#password").val();
            var rePasswordValue = $("#rePassword").val();
            if (passwordValue != rePasswordValue) {
                $("#rePasswordErrMess").css("visibility", "visible");
                return false;
            } else {
                $("#rePasswordErrMess").css("visibility", "hidden");
            }
        }
    
        /**
         * 检查邮箱
         */
        function checkEmail(){
            var reg = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
            var emailValue = $("#email").val();
            if (reg.test(emailValue) == false){
                $("#emailErrMess").css("visibility", "visible");
                return false;
            }else {
                $("#emailErrMess").css("visibility", "hidden");
            }
        }
    
        function checkVerify(){
            var verifyValue = $("#verify").val();
            if (verifyValue == ""){
                $("#verifyErrMess").css("visibility", "visible");
                return false;
            }else {
                $("#verifyErrMess").css("visibility", "hidden");
            }
        }
    
        // 注册栏内容改变后校验
        $("#username").change(checkUsername);
        $("#password").change(checkPassword);
        $("#rePassword").change(checkrePassword);
        $("#email").change(checkEmail);
        $("#verify").change(checkVerify);
    
        // 注册按钮后校验
        $("#register").click(checkUsername);
        $("#register").click(checkPassword);
        $("#register").click(checkrePassword);
        $("#register").click(checkEmail);
        $("#register").click(checkVerify);
    })
    

三.阶段2:Servlet实战

1.需求:

实现用户的登录和注册功能。

  • 登录成功重定向到登录成功页面,登录失败则转发到登录页面
  • 注册成功重定向到注册成功页面,注册失败则转发到注册页面

2.原理:

使用三层模型来实现。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.实现:

(0)项目依赖引入

  • 引入Tomcat服务器
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 引入Servlet
    第一步: RUN》Edit Configurations》在这里插入图片描述
    在这里插入图片描述
    第二步:在当前项目的iml文件中引入tomcat
    在这里插入图片描述
    第三步:重启idea
    在这里插入图片描述
    第四步:引入Facets
    在这里插入图片描述

(1)HTML页面

修改以下几个与登录注册相关的页面,①使用base标签完成绝对路径的修改;②点击登录按钮将用户名密码提交到LoginServlet中验证;③点击注册按钮将用户名、密码、邮箱提交到RegisterServlet中验证
在这里插入图片描述

  • login.html
    <!DOCTYPE html>
    <html>
      <head>
        <base href="http://localhost:8080/bookStoreTest1/"/>
        <meta charset="UTF-8" />
        <title>尚硅谷会员登录页面</title>
        <link type="text/css" rel="stylesheet" href="static/css/style.css" />
        <script type="text/javascript" src="static/script/jquery-1.7.2.js"></script>
        <script type="text/javascript" src="static/script/login.js"></script>
      </head>
      <body>
        <div id="login_header">
          <a href="index.html">
            <img class="logo_img" alt="" src="static/img/logo.gif" />
          </a>
        </div>
    
        <div class="login_banner">
          <div id="l_content">
            <span class="login_word">欢迎登录</span>
          </div>
    
          <div id="content">
            <div class="login_form">
              <div class="login_box">
                <div class="tit">
                  <h1>尚硅谷会员</h1>
                </div>
                <div class="msg_cont">
                  <b></b>
                  <span class="errorMsg">请输入用户名和密码</span>
                </div>
                <div class="form">
                  <!--跳转到login对应的Servlet中-->
                  <form action="login">
                    <label>用户名称:</label>
                    <input
                      class="itxt"
                      type="text"
                      placeholder="请输入用户名"
                      autocomplete="off"
                      tabindex="1"
                      name="username"
                      id="username"
                    />
                    <br />
                    <br />
                    <label>用户密码:</label>
                    <input
                      class="itxt"
                      type="password"
                      placeholder="请输入密码"
                      autocomplete="off"
                      tabindex="1"
                      name="password"
                      id="password"
                    />
                    <br />
                    <br />
                    <input type="submit" value="登录" id="sub_btn" />
                  </form>
                  <div class="tit">
                    <a id = "submit" href="regist.html">立即注册</a>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div id="bottom">
          <span>
            尚硅谷书城.Copyright &copy;2015
          </span>
        </div>
      </body>
    </html>
    
  • login_success.html
    <!DOCTYPE html>
    <html>
    <head>
    <base href="http://localhost:8080/bookStoreTest1/"/>
    <meta charset="UTF-8">
    <title>尚硅谷会员注册页面</title>
    <link type="text/css" rel="stylesheet" href="static/css/style.css" >
    <style type="text/css">
    	h1 {
    		text-align: center;
    		margin-top: 200px;
    	}
    	
    	h1 a {
    		color:red;
    	}
    </style>
    </head>
    <body>
    		<div id="header">
    				<a href="index.html">
    					<img class="logo_img" alt="" src="static/img/logo.gif" />
    				</a>
    				<div>
    					<span>欢迎<span class="um_span">张总</span>光临尚硅谷书城</span>
    					<a href="pages/order/order.html">我的订单</a>
    					<a href="index.html">注销</a>&nbsp;&nbsp;
    					<a href="index.html">返回</a>
    				</div>
    		</div>
    		
    		<div id="main">
    		
    			<h1>欢迎回来 <a href="index.html">转到主页</a></h1>
    	
    		</div>
    		
    		<div id="bottom">
    			<span>
    				尚硅谷书城.Copyright &copy;2015
    			</span>
    		</div>
    </body>
    </html>
    
  • register.html
    <!DOCTYPE html>
    <html>
      <head>
        <base href="http://localhost:8080/bookStoreTest1/"/>
        <meta charset="UTF-8" />
        <title>尚硅谷会员注册页面</title>
        <link type="text/css" rel="stylesheet" href="static/css/style.css" />
        <link rel="stylesheet" href="static/css/register.css" />
        <style type="text/css">
          .login_form {
            height: 420px;
            margin-top: 25px;
          }
        </style>
        <script type="text/javascript" src="static/script/jquery-1.7.2.js"></script>
        <script type="text/javascript" src="static/script/regist.js"></script>
      </head>
      <body>
        <div id="login_header">
          <a href="index.html">
            <img class="logo_img" alt="" src="static/img/logo.gif" />
          </a>
        </div>
    
        <div class="login_banner">
          <div class="register_form">
            <h1>注册尚硅谷会员</h1>
            <!--跳转到register对应的Servlet-->
            <form action="register">
              <div class="form-item">
                <div>
                  <label>用户名称:</label>
                  <input id="username" type="text" name="username" placeholder="请输入用户名"/>
                </div>
                <span class="errMess" id="userErrMess">用户名、密码:只能是字母(大小写)、数字、_。6-18位</span>
              </div>
              <div class="form-item">
                <div>
                  <label>用户密码:</label>
                  <input type="password" id="password" name="password" placeholder="请输入密码" />
                </div>
                <span class="errMess" id="passErrMess">只能是字母(大小写)、数字、_。6-18位</span>
              </div>
              <div class="form-item">
                <div>
                  <label>确认密码:</label>
                  <input type="password" id="rePassword" name="rePassword" placeholder="请输入确认密码" />
                </div>
                <span class="errMess" id="rePasswordErrMess">密码两次输入不一致</span>
              </div>
              <div class="form-item">
                <div>
                  <label>用户邮箱:</label>
                  <input type="text" id="email" name="email" placeholder="请输入邮箱" />
                </div>
                <span class="errMess" id="emailErrMess">请输入正确的邮箱格式</span>
              </div>
              <div class="form-item">
                <div>
                  <label>验证码:</label>
                  <div class="verify">
                    <input type="text" id="verify" placeholder="" />
                    <img src="static/img/code.bmp" alt="" />
                  </div>
                </div>
                <span class="errMess" id="verifyErrMess">请输入正确的验证码</span>
              </div>
              <button class="btn" id="register">注册</button>
            </form>
          </div>
        </div>
        <div id="bottom">
          <span>
            尚硅谷书城.Copyright &copy;2015
          </span>
        </div>
      </body>
    </html>
    
  • register_success.html
    <!DOCTYPE html>
    <html>
    <head>
    <base href="http://localhost:8080/bookStoreTest1/"/>
    <meta charset="UTF-8">
    <title>尚硅谷会员注册页面</title>
    <link type="text/css" rel="stylesheet" href="static/css/style.css" >
    <style type="text/css">
    	h1 {
    		text-align: center;
    		margin-top: 200px;
    	}
    	
    	h1 a {
    		color:red;
    	}
    </style>
    </head>
    <body>
    		<div id="header">
    				<a href="index.html">
    					<img class="logo_img" alt="" src="static/img/logo.gif" />
    				</a>
    				<span class="wel_word"></span>
    				<div>
    					<span>欢迎<span class="um_span">张总</span>光临尚硅谷书城</span>
    					<a href="pages/order/order.html">我的订单</a>
    					<a href="index.html">注销</a>&nbsp;&nbsp;
    					<a href="index.html">返回</a>
    				</div>
    		</div>
    		
    		<div id="main">
    		
    			<h1>注册成功! <a href="index.html">转到主页</a></h1>
    	
    		</div>
    		
    		<div id="bottom">
    			<span>
    				尚硅谷书城.Copyright &copy;2015
    			</span>
    		</div>
    </body>
    </html>
    

(2)bean

在src目录下创建com.bookstore.bean目录,用于存放数据库的模型类,并创建User类。
在这里插入图片描述

package com.bookstore.bean;

/**
 * 用户类
 */
public class User {
    private Integer id; // 推荐使用包装类,更利于类型转化
    private String username;
    private String password;
    private String email;

    public User(Integer id, String username, String password, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public User() {
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

(3)Dao

在Dao层我们应该将对数据库的操作封装好。

(创建如下目录:

在这里插入图片描述

(导入jdbc相关的第三方软件

在这里插入图片描述
在这里插入图片描述

(在utils目录下,创建文件JDBCUtils .java用于封装数据库的连接,释放

在这里插入图片描述

package com.bookstore.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * 获取连接和释放连接的工具类
 * @author Chunsheng Zhang
 *
 */
public class JDBCUtils {
	private static DataSource dataSource;
	
	static {
		try {
			//1、读取druip.properties文件
			Properties pro = new Properties();
			pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
			
			//2、连接连接池
			dataSource = DruidDataSourceFactory.createDataSource(pro);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	//获取连接
	public static Connection getConnection() {
		Connection connection = null;
		try {
			connection = dataSource.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}

	//释放连接
	public static void releaseConnection(Connection connection) {
		if(connection != null) {
			try {
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

(在dao目录下创建如下文件:

在这里插入图片描述

  • BaseDao.java
    package com.bookstore.dao;
    
    import com.bookstore.utils.JDBCUtils;
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.BeanHandler;
    import org.apache.commons.dbutils.handlers.BeanListHandler;
    import org.apache.commons.dbutils.handlers.ScalarHandler;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.List;
    
    /**
     * 定义一个用来被继承的对数据库进行基本操作的Dao
     *
     * @param <T>
     * @author Chunsheng Zhang
     */
    public class BaseDao<T> {
        private QueryRunner queryRunner = new QueryRunner();
        public BaseDao() {
        }
    
        /**
         * 通用的增删改操作
         * sql: insert delete update
         *
         * @param sql
         * @param params
         * @return
         */
        public int update(String sql, Object... params) {
            // 获取连接
            Connection connection = JDBCUtils.getConnection();
            int count = 0;
            try {
                count = queryRunner.update(connection, sql, params);
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.releaseConnection(connection);
            }
            return count;
        }
    
        /**
         * 获取一个对象
         *
         * @param sql
         * @param params
         * @return
         */
        public T getBean(Class<T> clazz, String sql, Object... params) {
            // 获取连接
            Connection connection = JDBCUtils.getConnection();
            T t = null;
            try {
                t = queryRunner.query(connection, sql, new BeanHandler<T>(clazz),
                        params);
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.releaseConnection(connection);
            }
            return t;
        }
    
        /**
         * 获取所有对象
         *
         * @param sql
         * @param params
         * @return
         */
        public List<T> getBeanList(Class<T> clazz, String sql, Object... params) {
            // 获取连接
            Connection connection = JDBCUtils.getConnection();
            List<T> list = null;
            try {
                list = queryRunner.query(connection, sql, new BeanListHandler<T>(
                        clazz), params);
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.releaseConnection(connection);
            }
            return list;
        }
    
    
        /**
         * 获取单个数值的通用方法
         */
        public Object getSingleValue(String sql, Object... params) {
            // 获取连接
            Connection connection = JDBCUtils.getConnection();
            Object o = null;
            try {
                o = queryRunner.query(connection, sql, new ScalarHandler<>(),
                        params);
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JDBCUtils.releaseConnection(connection);
            }
            return o;
        }
    }
    
  • UserDao接口
    package com.bookstore.dao;
    
    import com.bookstore.bean.User;
    
    import java.util.List;
    
    /**
     *
     * sql: SELECT * FROM users WHERE(username="?" AND password="?");
     */
    public interface UserDao {
        /**
         * 根据用户名密码查询单个用户。sql: SELECT * FROM users WHERE(username="?" AND password="?");
         * @param user: 当sql中有多个参数需要赋值时,推荐传入bean对象
         * @return
         */
        public User getUserByUsernamePwd(User user);
    
        /**
         * 根据用户名查询多个用户。sql: SELECT * FROM users WHERE(username="?");
         * @param username: 当sql中只有一个参数值需要赋值时,可以不用封装为对象
         * @return
         */
        public List<User> getUserByUsername(String username);
    
        /**
         * 将User对象储存到数据库中。sql=“INSERT INTO users(username,`password`,email)  VALUES(?,?,?);”
         * @param user
         * @return
         */
        public int saveUser(User user);
    }
    
    
  • UserDaoImpl.java
    package com.bookstore.dao.impl;
    
    import com.bookstore.bean.User;
    import com.bookstore.dao.BaseDao;
    import com.bookstore.dao.UserDao;
    
    import java.util.List;
    
    public class UserDaoImll extends BaseDao<User> implements UserDao {
    
        /**
         * 根据用户名密码查询单个用户
         *
         * @param user: 当sql中有多个参数需要赋值时,推荐传入bean对象
         * @return
         */
        @Override
        public User getUserByUsernamePwd(User user) {
            String sql = "SELECT * FROM users WHERE(username=? AND password=?)";
            return getBean(User.class, sql, user.getUsername(), user.getPassword());
        }
    
        /**
         * 根据用户名查询多个用户
         *
         * @param username
         * @return
         */
        @Override
        public List<User> getUserByUsername(String username) {
            String sql = "SELECT * FROM users WHERE(username=?)";
            return getBeanList(User.class, sql, username);
        }
    
        /**
         * 储存User对象到数据库中
         *
         * @param user
         * @return
         */
        @Override
        public int saveUser(User user) {
            String sql = "INSERT INTO users(username,`password`,email)  VALUES(?,?,?)";
            return update(sql, user.getUsername(), user.getPassword(), user.getEmail());
        }
    }
    

(4)service

在service目录下可以封装业务逻辑的代码
在这里插入图片描述

  • UserServices接口
    package com.bookstore.service;
    
    import com.bookstore.bean.User;
    
    /**
     * 处理用户相关业务逻辑
     */
    public interface UserServices {
        /**
         * 处理用户登录相关业务。
         *
         * @param user
         */
        User login(User user);
    
        /**
         * 处理用户注册的方法
         *
         * @param user
         * @return
         */
        boolean regist(User user);
    }
    
    
  • UserServicesImpl.java
    package com.bookstore.service.impl;
    
    import com.bookstore.bean.User;
    import com.bookstore.dao.impl.UserDaoImll;
    import com.bookstore.service.UserServices;
    
    import java.util.List;
    
    public class UserservicesImpl extends UserDaoImll implements UserServices {
    
        /**
         * 处理用户登录业务逻辑
         * @param user
         * @return
         */
        @Override
        public User login(User user) {
            User userRes = getUserByUsernamePwd(user);
            if (userRes == null){
                return null;
            }else {
                return userRes;
            }
        }
    
        @Override
        public boolean regist(User user) {
            List<User> users = getUserByUsername(user.getUsername());
            if (users.size() > 0){
                return false;
            }else {
                int i = saveUser(user);
                if (i>=1){
                    return true;
                }
                return false;
            }
        }
    }
    

(5)Servlet

在这里插入图片描述

  • LoginServlet.java
    package com.bookstore.servlet;
    
    import com.bookstore.bean.User;
    import com.bookstore.service.UserServices;
    import com.bookstore.service.impl.UserservicesImpl;
    
    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(name = "LoginServlet", value = "/login")
    public class LoginServlet extends HttpServlet {
        private UserServices userservices = new UserservicesImpl();
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取用户名,密码
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            // 检查用户名密码是否正确
            User userOld = new User();
            userOld.setUsername(username);
            userOld.setPassword(password);
            User loginUser = userservices.login(userOld);
            if (loginUser != null) {
                // 用户名密码正确
                response.sendRedirect("/bookStoreTest1/pages/user/login_success.html");
            } else {
                // 用户名密码不正确
                request.getRequestDispatcher("/pages/user/login.html").forward(request, response);
            }
    
    
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
    
    
  • RegisterServlet.java\
    package com.bookstore.servlet;
    
    import com.bookstore.bean.User;
    import com.bookstore.service.impl.UserservicesImpl;
    
    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(name = "RegisteServlet", value = "/register")
    public class RegisteServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            String email = request.getParameter("email");
            User user = new User(null,username,password,email);
            UserservicesImpl userservices = new UserservicesImpl();
            boolean registFag = userservices.regist(user);
            if (registFag){
                response.sendRedirect("/bookStoreTest1/pages/user/regist_success.html");
            }else {
                request.getRequestDispatcher("/pages/user/regist.html").forward(request,response);
            }
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request,response);
        }
    }
    
    

4.原理讲解

在这里插入图片描述
想一想为什么不在Servlet中直接调用dao进行业务处理呢?

  1. 为了解耦,因为业务逻辑层是会经常变动的。将其提取出来更加便于后期的维护
  2. 而且某些业务逻辑会在多个Servlet中使用,提取出来也能实现复用
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 15:40:27  更:2021-12-23 15:40:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:53:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码