Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven)

本篇和 Spring 没有什么关系,只是学习 Spring,必备一些知识,所以放在这里了。

本篇内容:

(1)MySQL 命令行,建立用户信息数据库,密码用 md5 加密

(2)jdbc 链接 MySQL 8.0

(3)Maven 管理 servlet,jsp 依赖

(4)单元测试

(5)难点在 DBUtils.java 文件!

动态截图:

一、建立用户信息 MySQL 数据库

(建议名称一致)

(1)安装 MySQL 请百度或参考:MySQL 安装 + 入门大全 + 常用命令合集

(2)打开 cmd ,登录 mysql 的 root 用户,创建 studb 数据库,创建表 tb_user :

(3)显示表结构,插入 3 条用户数据:

(4)数据库 studb,表 tb_user 创建好了。

二、创建 Maven Web 项目,配置

(1)创建项目和修改目录结构,因为常用,所以写在了单独的一篇文章,请查看:Spring 笔记 -05- 创建 Maven Web 项目 + Tomcat 及目录结构配置

(2)上面一篇文章,全部需要!

(3)配置 Maven 的配置文件 pom.xml 文件,位置在下面有提示:

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency> </dependencies>

(4)点击自动导入:

(5)创建如下目录及文件:

(6)下面需要先做一件事,就是在 js 目录中,引入 Bootstrap3,

注意:只能是 Bootstrap3 版本:

配置步骤:

  • 安装 Node.js ,因为要使用 npm
  • 在项目中 js 目录,右键 Open in Explorer 可以打开该目录,并复制
  • 在 cmd 进入项目的 js 目录
  • 使用命令:
npm install bootstrap3

三、具体文件编码:

(1)index.jsp 文件,用于登录成功时跳转:


<%--
输出 Hello World,当前时间,列表
列表内容为 com.list.StuList 中的内容
--%> <%@ page import="java.util.Date" pageEncoding="UTF-8" %> <html>
<body> <h2>登陆成功!</h2>
当前时间为:<%=new Date().toLocaleString()%>
<hr> </body>
</html>

(2)failed.jsp 文件,用于登录失败时跳转:

<%--
登录失败!
--%> <%@ page import="java.util.Date" pageEncoding="UTF-8" %> <html>
<body> <h2>登陆失败!</h2>
当前时间为:<%=new Date().toLocaleString()%>
<hr> <br>
<a href="login.html" class="btn btn-default">返回登录</a> </body>
</html>

(3)login.html 文件,登录的前端界面:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<link rel="stylesheet" href="js/node_modules/bootstrap3/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="js/node_modules/bootstrap3/dist/css/bootstrap-theme.css">
</head>
<body>
<br><br>
<br><br> <form name="loginForm" action="Servlet" method="post">
<div class="center-block" style="width: 45%;height: 350px">
<div class="panel panel-primary">
<div class="panel-heading">
<span class="glyphicon glyphicon-apple"></span>用户登录 </div>
<div class="panel-body">
<div class="text-success" align="center">
<h3>欢迎使用资源统一管理系统</h3>
</div>
<div class="input-group">
<label class="input-group-addon">用户名</label>
<input class="form-control" type="text" name="uname" placeholder="请输入用户名">
<label class="input-group-addon text-warning">*</label>
</div>
<br>
<div class="input-group">
<label class="input-group-addon">密&nbsp;&nbsp;&nbsp;码</label>
<input class="form-control" type="password" name="upwd" placeholder="请输入密码">
<label class="input-group-addon text-warning">*</label>
</div>
<br>
<div class="input-group">
<label class="input-group-addon">权&nbsp;&nbsp;&nbsp;限</label>
<select name="role" class="form-control ">
<option value="admin">管理员</option>
<option value="teacher">经理</option>
<option value="student">用户</option>
</select>
</div>
</div>
<div align="center"> <a href="javascript:loginForm.submit()" class="btn btn-danger"><span
class="glyphicon glyphicon-log-in"></span> 登录</a>&nbsp;&nbsp;
<a href="javascript:loginForm.reset()" class="btn btn-primary"><span
class="glyphicon glyphicon-remove"></span> 重置</a>
</div>
<br>
<div class="panel-footer">
<div align="center">
&copy;2018-2019 肖朋伟的 CSDN 博客 Copy Right </div>
</div>
</div>
</div>
</form>
</body>
</html>

如果成功引入 Bootstrap3 ,打开服务器,打开本页面,会有下面界面:

(4)User.java 文件:

package com.pojo;

//用来存放用户登录时,输入输出的信息
public class User {
private String uname;
private String upwd;
private String role; public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
} public String getUpwd() {
return upwd;
} public void setUpwd(String upwd) {
this.upwd = upwd;
} public String getRole() {
return role;
} public void setRole(String role) {
this.role = role;
}
}

(5)UserDAO.java 文件:

package com.dao;

import com.dbutil.DBUtils;
import com.pojo.User; public class UserDAO { //返回 0 或 1
public int login(User user){
DBUtils dbUtils = new DBUtils(); //与数据库是否匹配,匹配为 1
int temp = dbUtils.login(user);
return temp;
}
}

(6)DBUtils.java 文件:

!!! 成败在与这个文件

  • 自行更改数据库名
  • 自行更改表名(两个)
  • 自行更改 root 的密码
  • 检查服务是否启动
package com.dbutil;

import com.pojo.User;

import java.sql.*;

public class DBUtils {
Connection conn;
//预处理
PreparedStatement pstmt;
//结果集
ResultSet rs; public DBUtils(){
try{
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC","root","密码"); } catch (Exception e){
e.printStackTrace();
}
} public int login(User user){
try{
pstmt=conn.prepareStatement("select * from 表名 where uname = ? and upwd = md5(?)");
pstmt.setString(1, user.getUname());
pstmt.setString(2, user.getUpwd());
rs = pstmt.executeQuery();
if (rs.next())
return 1;
else
return 0;
}catch (Exception e){
e.printStackTrace();
} return 0;
}
}

(7)Servlet.java 文件:


package com.loginServlet; import com.pojo.User;
import com.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(name = "Servlet",urlPatterns = "/Servlet")
public class Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doPost");
request.setCharacterEncoding("utf-8");
//获取 post 请求中的两个参数
String uname = request.getParameter("uname");
String upwd = request.getParameter("upwd");
String role = request.getParameter("role"); /*硬编码, 不从数据库获取信息,直接验证
if (uname.equals("admin") && upwd.equals("123456")) {
response.sendRedirect("index.jsp");
}else{
response.sendRedirect("loginServlet.html");
}*/ //从服务获取值
UserService userService = new UserService(); User user = new User();
user.setUname(uname);
user.setUpwd(upwd);
user.setRole(role); if (userService.login(user)) {
response.sendRedirect("index.jsp");
}else{
response.sendRedirect("failed.jsp");
} } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doGet");
}
}

(8)UserService.java 文件:


package com.service; //服务层,给控制层提供服务 import com.dao.UserDAO;
import com.pojo.User; public class UserService { UserDAO dao = new UserDAO(); //参数,处理 User 对象,返回 True 或 False
public boolean login(User user){
int temp = dao.login(user);
if (temp == 0)
return false;
else
return true;
}
}

四、运行调试

五、常见错误

(1)MySQL 8.0 版本的 jdbc 个数据版本不匹配

(2)数据库服务没有运行

(3)配置文件数据库信息没有自行更改

(4)文件名自定义时,依赖失败

更多文章链接:

支持博主

我正在参加 CSDN 2018 年博客之星评选,希望大家能支持我,

我是【No. 001】号 肖朋伟 ,感谢大家宝贵的一票 ^_^/

投票地址:https://bss.csdn.net/m/topic/blog_star2018/index

Spring 笔记 -06- 从 MySQL 建库到 登录验证数据库信息(maven)的更多相关文章

  1. MySQL 建库、建用户及建表事项

    1,MySQL建库语句比较简单,一句话: create database tppamltest3 2,创建用户及授权: insert into mysql.user(Host,User,Passwor ...

  2. (转载)用C#实现MySQL建库及建表

    最近做一个项目,为了方便用户使用,希望可以在系统初始化的时候,自动实现MySQL数据库的建库和建表操作.在网上查了很多资料都没有找到合适的,偶尔在一个国外网站上看到了相关的内容,特把实现方法整理如下: ...

  3. ArcGIS案例学习笔记_3_2_CAD数据导入建库

    ArcGIS案例学习笔记_3_2_CAD数据导入建库 计划时间:第3天下午 内容:CAD数据导入,建库和管理 目的:生成地块多边形,连接属性,管理 问题:CAD存在拓扑错误,标注位置偏移 教程:pdf ...

  4. MySQL建库建表

    一直使用SQL SERVER 数据库:最近项目使用MY SQL感觉还是有一点不适应.不过熟悉之后就会好很多. MY SQL 安装之后会有一个管理工具MySQL Workbench 感觉不太好用,数据库 ...

  5. Mysql建库建用户建表等常用命令

    格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输 ...

  6. 【平台开发】— 4.mysql建库建表

    本想着把前端脚手架run起来了,然后就可以借着登录来捋一下前后端交互的过程.但是后端导入JPA的时候就发现了,还没有数据库. 既然是本着学习的目的,那咱也不想只在后端写死返回的数据,要做就做全套. 一 ...

  7. MySql 建库建表脚本

    1.建库 CREATE DATABASE test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 2.建表脚本 CREATE TABLE `c ...

  8. 基于EntityFramework 6 Code First实现动态建库,分库,数据库自动迁移

    一.前言 公司原本有一个"xx系统",ORM使用EntityFramework,Code First模式.该系统是针对某个客户企业的,现要求该系统支持多个企业使用,但是又不能给每个 ...

  9. 通过JDBC连接数据库(MySql为例)并读取数据库信息--JSP基础

    1.先建数据库,数据库名为:employee_DB;然后在数据库employee_DB下建表,表名为employee;最后插入数据. create database employee_DB; use ...

随机推荐

  1. Git使用(1)

    安装git完成后 1.首先配置你的用户信息,用于体现在你的提交记录中包含your name and your email git config --global user.name "you ...

  2. python特殊的数据类型

    lsit 列表是一种有序的数据集合,允许数据类型不一致! 1.定义:l=[1,"s",'2',True,u"您好"] 或者 l=list() 2.访问:l[0] ...

  3. setAttribute()、getAttribute()与ele[attr]与自定义属性

    一.自定义属性设置 1.setAttrbute() var q=document.getElementById("q"); q.setAttribute("index&q ...

  4. Android面试题(2)

    1.  int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型).Int是java的原始数据类型,Integer是java为int提供的封装类.Java为 ...

  5. js便签笔记(12)——浏览TOM大叔博客的学习笔记 part2

    1. 前言 昨天写了<js便签笔记(11)——浏览TOM大叔博客的学习笔记 part1>,简单记录了几个问题.part1的重点还是在于最后那个循环创建函数的问题,也就是多个子函数公用一个闭 ...

  6. js便签笔记(11)——浏览TOM大叔博客的学习笔记 part1

    1. 前言 这两天看了一下TOM大叔的<深入理解js系列>中的基础部分,根据自己的实际情况,做了读书笔记,记录了部分容易绊脚的问题.写篇文章,供大家分享. 2. 关于HTMLCollect ...

  7. 开启linux远程访问权限

    摘要:今天在Linux服务器上安装了msyql数据库,在本地访问的时候可以访问,但是我想通过远程的方式访问的时候就不能访问了,查询资料后发现,Linux下MySQL默认安装完成后只有本地访问的权限,没 ...

  8. Android so 文件进阶<二> 从dlsym()源码看android 动态链接过程

    0x00  前言 这篇文章其实是我之前学习elf文件关于符号表的学习笔记,网上也有很多关于符号表的文章,怎么说呢,感觉像是在翻译elf文件格式的文档一样,千篇一律,因此把自己的学习笔记分享出来.dls ...

  9. superset----缓存之redis

    一.概述 Superset使用Flask-Cache进行缓存,Flask-Cache支持redis,memcached,simplecache(内存),或本地文件系统)等缓存后端,如果你打算使用mem ...

  10. SpringMVC之使用 @RequestMapping 映射请求

    @RequestMapping注解 SpringMVC使用该注解让控制器知道可以处理哪些请求路径的,除了可以修饰方法,还可以修饰在类上. – 类定义处:提供初步的请求映射信息.相对于 WEB 应用的根 ...