Browse Source

1201 servlet应用demo

Demi 6 months ago
parent
commit
42456cae1e
23 changed files with 701 additions and 8 deletions
  1. 50 0
      tomcat-demo/src/main/java/com/sf/sysdemo/controller/BaseController.java
  2. 7 0
      tomcat-demo/src/main/java/com/sf/sysdemo/controller/ScheduleController.java
  3. 60 0
      tomcat-demo/src/main/java/com/sf/sysdemo/controller/UserController.java
  4. 120 0
      tomcat-demo/src/main/java/com/sf/sysdemo/dao/BaseDao.java
  5. 4 0
      tomcat-demo/src/main/java/com/sf/sysdemo/dao/SysScheduleDao.java
  6. 4 0
      tomcat-demo/src/main/java/com/sf/sysdemo/dao/SysScheduleDaoImpl.java
  7. 10 0
      tomcat-demo/src/main/java/com/sf/sysdemo/dao/SysUserDao.java
  8. 30 0
      tomcat-demo/src/main/java/com/sf/sysdemo/dao/SysUserDaoImpl.java
  9. 4 0
      tomcat-demo/src/main/java/com/sf/sysdemo/service/SysScheduleService.java
  10. 15 0
      tomcat-demo/src/main/java/com/sf/sysdemo/service/SysUserService.java
  11. 6 0
      tomcat-demo/src/main/java/com/sf/sysdemo/service/impl/SysScheduleServiceImpl.java
  12. 34 0
      tomcat-demo/src/main/java/com/sf/sysdemo/service/impl/SysUserServiceImpl.java
  13. 14 0
      tomcat-demo/src/main/java/com/sf/sysdemo/util/JDBCUtil.java
  14. 119 8
      tomcat-demo/src/main/webapp/login.html
  15. 11 0
      tomcat-demo/src/main/webapp/loginUserPwdError.html
  16. 11 0
      tomcat-demo/src/main/webapp/loginUsernameError.html
  17. 0 0
      tomcat-demo/src/main/webapp/old/error.html
  18. 17 0
      tomcat-demo/src/main/webapp/old/login.html
  19. 0 0
      tomcat-demo/src/main/webapp/old/success.html
  20. 150 0
      tomcat-demo/src/main/webapp/regist.html
  21. 11 0
      tomcat-demo/src/main/webapp/registFail.html
  22. 11 0
      tomcat-demo/src/main/webapp/registSuccess.html
  23. 13 0
      tomcat-demo/src/main/webapp/showSchedule.html

+ 50 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/controller/BaseController.java

@@ -0,0 +1,50 @@
+package com.sf.sysdemo.controller;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+// 提供一个基础的控制类
+public class BaseController extends HttpServlet {
+
+    // 重写service
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+
+        // 编写分发的逻辑
+        // 让子类Controller 可以根据不同的请求 调用不同的方法
+        String requestURI = req.getRequestURI();
+        System.out.println(requestURI);
+        // 让user相关的请求 分发到user的Controller中  然后/user/login 调用到login方法
+        // 这里根据/分割uri 得到login或其他的名字
+        String[] split = requestURI.split("/");
+        // split[1]
+        String methodName = split[split.length - 1];
+        // 用反射调用方法
+        Class clazz = this.getClass();
+        try {
+            // 要调用的方法 也是要处理请求和响应的
+            // 给出方法名 以及方法对应的参数类型
+            Method method = clazz.getDeclaredMethod(methodName,
+                    HttpServletRequest.class, HttpServletResponse.class);
+            // 方法设置为可访问
+            method.setAccessible(true);
+            // 通过反射执行代码
+            method.invoke(this, req, resp);
+
+        } catch (NoSuchMethodException e) {
+            throw new RuntimeException(e);
+            // 增加调用方法可能引发的异常
+        } catch (InvocationTargetException e) {
+            throw new RuntimeException(e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

+ 7 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/controller/ScheduleController.java

@@ -0,0 +1,7 @@
+package com.sf.sysdemo.controller;
+
+import jakarta.servlet.annotation.WebServlet;
+
+@WebServlet("/schedule/*")
+public class ScheduleController extends BaseController {
+}

+ 60 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/controller/UserController.java

@@ -0,0 +1,60 @@
+package com.sf.sysdemo.controller;
+
+import com.sf.sysdemo.entity.SysUser;
+import com.sf.sysdemo.service.SysUserService;
+import com.sf.sysdemo.service.impl.SysUserServiceImpl;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+
+// 创建用户相关的控制器
+// 使用注解 让所有 /user/* 开头的请求 都映射到UserController来处理
+@WebServlet("/user/*")
+public class UserController extends BaseController {
+
+    // 建立Controller和Service层的连接
+    // 创建对象 使用多态
+    private SysUserService userService = new SysUserServiceImpl();
+
+    // 可以处理注册或登录请求
+    // /user/register
+    // /user/login
+    public void register(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+        // 注册应该传入的是用户名和密码
+        String username = req.getParameter("username");
+        String password = req.getParameter("password");
+        SysUser sysUser = new SysUser();
+        sysUser.setUsername(username);
+        sysUser.setPassword(password);
+        Boolean registered = userService.register(sysUser);
+        if (registered) {
+            // 分发到成功页面
+            resp.sendRedirect("/registSuccess.html");
+        } else {
+            // 分发到失败页面
+            resp.sendRedirect("/registFail.html");
+        }
+    }
+
+    // 这里的方法 和 service方法结构相同
+    public void login(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+        String username = req.getParameter("username");
+        String password = req.getParameter("password");
+        System.out.println(username);
+        System.out.println(password);
+
+        SysUser sysUser = userService.findByUsername(username);
+        if (sysUser == null) {
+            resp.sendRedirect("/loginUsernameError.html");
+        } else if (!sysUser.getPassword().equals(password)) {
+            resp.sendRedirect("/loginUserPwdError.html");
+        } else {
+            resp.sendRedirect("/showSchedule.html");
+        }
+    }
+}

+ 120 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/dao/BaseDao.java

@@ -6,6 +6,7 @@ import com.sf.sysdemo.util.JDBCUtil;
 import java.lang.reflect.Field;
 import java.sql.*;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 // 提供一个基础的dao类
@@ -14,15 +15,90 @@ public class BaseDao {
 
     public static void main(String[] args) {
         BaseDao dao = new BaseDao();
+
+//        SysUser user = dao.baseQueryByOne(SysUser.class, "select * from sys_user where uid = 1");
+//        SysUser user = dao.baseQueryByOne(SysUser.class, "select * from sys_user where uid = ?", 1);
+//        System.out.println(user);
+
+        String insertSql = "insert into sys_user(username,password) values(?,?)";
+        int update = dao.baseUpdate(insertSql, "wangwu", "123456");
+        System.out.println(update);
+
         List<Object> list = dao.baseQuery(SysUser.class, "select * from sys_user");
         System.out.println(list);
     }
 
+    // 这是查询返回一行数据
+    public <T> T baseQueryByOne(Class<T> clazz, String sql, Object... args){
+        T t = null;
+
+        Connection connection = JDBCUtil.getConnection();
+        PreparedStatement preparedStatement = null;
+        ResultSet resultSet = null;
+
+        try {
+            preparedStatement = connection.prepareStatement(sql);
+            // 让sql语句支持参数
+            for (int i = 0; i < args.length; i++) {
+                Object arg = args[i];
+                preparedStatement.setObject(i + 1, arg);
+            }
+
+            // 执行查询
+            resultSet = preparedStatement.executeQuery();
+            // 获取返回结果的元数据
+            ResultSetMetaData metaData = resultSet.getMetaData();
+            // 返回的实际是一个表格 这里获取表格有多少列
+            int columnCount = metaData.getColumnCount();
+
+            if (resultSet.next()) {
+                // 这里从确定的 通过sys_user查询的结果 可以映射为一个SysUser类的对象
+                // 变成不确定的 通过一个Class类型 映射为一个动态类型的对象
+                Object cls = clazz.getDeclaredConstructor().newInstance();
+                for (int i = 1; i <= columnCount; i++) {
+                    // 获取列名
+                    String columnName = metaData.getColumnLabel(i);
+                    // 获取这一列对应的值
+                    Object value = resultSet.getObject(columnName);
+                    // 找到列名对应的字段
+                    Field field = clazz.getDeclaredField(columnName);
+                    // 设置属性是可被访问的
+                    field.setAccessible(true);
+                    field.set(cls, value);
+                }
+                return (T)cls;
+            }
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }finally{
+            if(resultSet != null){
+                try {
+                    resultSet.close();
+                } catch (SQLException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+            if(preparedStatement != null){
+                try {
+                    preparedStatement.close();
+                } catch (SQLException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+            JDBCUtil.releaseConnection(connection);
+        }
+        return null;
+    }
+
+
+    // 这是查询返回多行数据
     // 泛型方法 不确定返回类型  如果一行数据对应的类型是 T  那么这里支持返回多行数据
     // Object ... args 是可变参数  实际上是一个数组
     public <T> List<T> baseQuery(Class clazz, String sql, Object... args){
         List<T> list = new ArrayList<T>();
 
+//        System.out.println("args: " + Arrays.toString(args));
+
         Connection connection = JDBCUtil.getConnection();
         PreparedStatement preparedStatement = null;
         ResultSet resultSet = null;
@@ -61,8 +137,52 @@ public class BaseDao {
             }
         } catch (Exception e) {
             throw new RuntimeException(e);
+        }finally{
+            if(resultSet != null){
+                try {
+                    resultSet.close();
+                } catch (SQLException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+            if(preparedStatement != null){
+                try {
+                    preparedStatement.close();
+                } catch (SQLException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+            JDBCUtil.releaseConnection(connection);
         }
         // 一堆关闭
         return list;
     }
+
+    // 通用的增删改
+    public int baseUpdate(String sql, Object... args){
+        Connection connection = JDBCUtil.getConnection();
+        PreparedStatement preparedStatement = null;
+        int result = 0;
+
+        try {
+            preparedStatement = connection.prepareStatement(sql);
+            for (int i = 0; i < args.length; i++) {
+                preparedStatement.setObject(i + 1, args[i]);
+            }
+            // 执行更新 返回更改的行数
+            result = preparedStatement.executeUpdate();
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }finally {
+            if(preparedStatement != null){
+                try {
+                    preparedStatement.close();
+                } catch (SQLException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+            JDBCUtil.releaseConnection(connection);
+        }
+        return result;
+    }
 }

+ 4 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/dao/SysScheduleDao.java

@@ -0,0 +1,4 @@
+package com.sf.sysdemo.dao;
+
+public interface SysScheduleDao {
+}

+ 4 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/dao/SysScheduleDaoImpl.java

@@ -0,0 +1,4 @@
+package com.sf.sysdemo.dao;
+
+public class SysScheduleDaoImpl extends BaseDao implements SysScheduleDao {
+}

+ 10 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/dao/SysUserDao.java

@@ -0,0 +1,10 @@
+package com.sf.sysdemo.dao;
+
+import com.sf.sysdemo.entity.SysUser;
+
+public interface SysUserDao {
+
+    SysUser findByUsername(String username);
+
+    int insertUser(SysUser sysUser);
+}

+ 30 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/dao/SysUserDaoImpl.java

@@ -0,0 +1,30 @@
+package com.sf.sysdemo.dao;
+
+import com.sf.sysdemo.entity.SysUser;
+
+// 通过接口 对外提供对当前表的增删改查处理
+// 通过实现类 来进行具体的实现
+// 这里既要继承基础的Dao 又要实现当前表对应的dao接口
+public class SysUserDaoImpl extends BaseDao implements SysUserDao {
+
+    @Override
+    public SysUser findByUsername(String username) {
+        String sql = "select * from sys_user where username = ?";
+        // 直接复用父类的方法
+        SysUser sysUser = this.baseQueryByOne(SysUser.class, sql, username);
+        return sysUser;
+    }
+
+    @Override
+    public int insertUser(SysUser sysUser) {
+        // 在添加之前先验证用户名是否存在
+        SysUser user = findByUsername(sysUser.getUsername());
+        if (user != null) {
+            return 0;
+        }
+        // 添加数据
+        String insertSql = "insert into sys_user(username,password) values(?,?)";
+        int add = this.baseUpdate(insertSql, sysUser.getUsername(), sysUser.getPassword());
+        return add;
+    }
+}

+ 4 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/service/SysScheduleService.java

@@ -0,0 +1,4 @@
+package com.sf.sysdemo.service;
+
+public interface SysScheduleService {
+}

+ 15 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/service/SysUserService.java

@@ -0,0 +1,15 @@
+package com.sf.sysdemo.service;
+
+import com.sf.sysdemo.entity.SysUser;
+
+public interface SysUserService {
+
+    // 封装了对用户相关的逻辑处理 比如登录或注册
+    // 如果要支持登录 验证用户名是否存在
+    //   两种处理 直接将用户名和密码作为查询条件 判断是否匹配 “用户名或密码错误”
+    //           或者先判断用户名是否存在  这时需要根据用户名查询整条数据 如果数据不存在 返回“用户名不存在”
+    SysUser findByUsername(String username);
+
+    // 注册验证的逻辑
+    Boolean register(SysUser sysUser);
+}

+ 6 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/service/impl/SysScheduleServiceImpl.java

@@ -0,0 +1,6 @@
+package com.sf.sysdemo.service.impl;
+
+import com.sf.sysdemo.service.SysScheduleService;
+
+public class SysScheduleServiceImpl implements SysScheduleService {
+}

+ 34 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/service/impl/SysUserServiceImpl.java

@@ -0,0 +1,34 @@
+package com.sf.sysdemo.service.impl;
+
+import com.sf.sysdemo.dao.SysUserDao;
+import com.sf.sysdemo.dao.SysUserDaoImpl;
+import com.sf.sysdemo.entity.SysUser;
+import com.sf.sysdemo.service.SysUserService;
+
+// 使用alt + enter来实现接口中的方法
+public class SysUserServiceImpl implements SysUserService {
+
+    // 声明一个成员变量 让service层可以调用到dao层
+    private SysUserDao sysUserDao = new SysUserDaoImpl();
+
+    @Override
+    public SysUser findByUsername(String username) {
+        return sysUserDao.findByUsername(username);
+    }
+
+    @Override
+    public Boolean register(SysUser sysUser) {
+        int insert = sysUserDao.insertUser(sysUser);
+        if (insert == 1) {
+            return true;
+        }
+        return false;
+    }
+
+    // 测试
+    public static void main(String[] args) {
+        SysUserService sysUserService = new SysUserServiceImpl();
+        SysUser sysUser = sysUserService.findByUsername("zhangsan1");
+        System.out.println(sysUser);
+    }
+}

+ 14 - 0
tomcat-demo/src/main/java/com/sf/sysdemo/util/JDBCUtil.java

@@ -50,4 +50,18 @@ public class JDBCUtil {
             throw new RuntimeException(e);
         }
     }
+
+    // 提供连接的归还或释放
+    public static void releaseConnection(Connection connection){
+        if(connection != null){
+            try {
+                // 把连接设置为自动提交
+                connection.setAutoCommit(true);
+                // 归还到连接池
+                connection.close();
+            } catch (SQLException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
 }

+ 119 - 8
tomcat-demo/src/main/webapp/login.html

@@ -3,15 +3,126 @@
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
-</head>
-<body>
+    <style>
+
+        .ht{
+            text-align: center;
+            color: cadetblue;
+            font-family: 幼圆;
+        }
+        .tab{
+            width: 500px;
+            border: 5px solid cadetblue;
+            margin: 0px auto;
+            border-radius: 5px;
+            font-family: 幼圆;
+        }
+        .ltr td{
+            border: 1px solid  powderblue;
+
+        }
+        .ipt{
+            border: 0px;
+            width: 50%;
+
+        }
+        .btn1{
+            border: 2px solid powderblue;
+            border-radius: 4px;
+            width:60px;
+            background-color: antiquewhite;
+
+        }
+        #usernameMsg , #userPwdMsg {
+            color: rgb(230, 87, 51);
+        }
+
+        .buttonContainer{
+            text-align: center;
+        }
+    </style>
+    <script>
+        // 检验用户名格式是否合法的函数
+        function checkUsername(){
+            // 定义正则表示字符串的规则
+            var  usernameReg= /^[a-zA-Z0-9]{5,10}$/
+            // 获得用户在页面上输入的信息
+            var usernameInput =document.getElementById("usernameInput")
+            var username = usernameInput.value
+            // 获得格式提示的框
+            var usernameMsg =document.getElementById("usernameMsg")
+            // 格式有误时,返回false,在页面上提示
+            if(!usernameReg.test(username)){ 
+                usernameMsg.innerText="用户名格式有误"
+                return false
+            }
+            // 格式OK,返回true 在页面上提示OK
+            usernameMsg.innerText="OK"
+            return true
+
+        }
 
-<!--<form action="/login" method="get">-->
-<form action="/login" method="post">
-    用户名:<input type="text" name="username"/> <br>
-    密码:<input type="password" name="password"/> <br>
-    <input type="submit" value="登录">
-</form>
+        // 检验密码格式是否合法的函数
+        function checkUserPwd(){
+            // 定义正则表示字符串的规则
+            var  userPwdReg= /^[0-9]{6}$/
+            // 获得用户在页面上输入的信息
+            var userPwdInput =document.getElementById("userPwdInput")
+            var userPwd = userPwdInput.value
+            // 获得格式提示的框
+            var userPwdMsg =document.getElementById("userPwdMsg")
+            // 格式有误时,返回false,在页面上提示
+            if(!userPwdReg.test(userPwd)){
+                userPwdMsg.innerText="密码必须是6位数字"
+                return false
+            }
+            // 格式OK,返回true 在页面上提示OK
+            userPwdMsg.innerText="OK"
+            return true
 
+        }
+
+        // 表单在提交时,校验用户名和密码格式,格式OK才会提交
+        function checkForm(){
+            var flag1 =checkUsername()
+            var flag2 =checkUserPwd()
+
+            return flag1&&flag2
+            // return true
+        }
+
+
+    </script>
+
+    
+</head>
+<body>
+    <h1 class="ht">欢迎使用日程管理系统</h1>
+    <h3 class="ht">请登录</h3>
+    <form method="post" action="/user/login" onsubmit="return checkForm()">
+        <table class="tab" cellspacing="0px">
+            <tr class="ltr">
+                <td>请输入账号</td>
+                <td>
+                    <input class="ipt" type="text" id="usernameInput" name="username" onblur="checkUsername()">
+                    <span id="usernameMsg"></span>
+                </td>
+            </tr>
+            <tr class="ltr">
+                <td>请输入密码</td>
+                <td>
+                    <input class="ipt" type="password" id="userPwdInput" name="password" onblur="checkUserPwd()">
+                    <span id="userPwdMsg"></span>
+                </td>
+            </tr>
+            <tr class="ltr">
+                <td colspan="2" class="buttonContainer">
+                    <input class="btn1" type="submit" value="登录">
+                    <input class="btn1" type="reset" value="重置">
+                    <button class="btn1"><a href="regist.html">去注册</a></button>
+                </td>
+            </tr>
+        </table>
+    </form>
 </body>
 </html>

+ 11 - 0
tomcat-demo/src/main/webapp/loginUserPwdError.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<h1>登录失败,密码有误,请求<a href="/login.html">重新登录</a></h1>
+
+</body>
+</html>

+ 11 - 0
tomcat-demo/src/main/webapp/loginUsernameError.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<h1>登录失败,账户有误,请求<a href="/login.html">重新登录</a></h1>
+
+</body>
+</html>

+ 0 - 0
tomcat-demo/src/main/webapp/error.html → tomcat-demo/src/main/webapp/old/error.html


+ 17 - 0
tomcat-demo/src/main/webapp/old/login.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+
+<!--<form action="/login" method="get">-->
+<form action="/login" method="post">
+    用户名:<input type="text" name="username"/> <br>
+    密码:<input type="password" name="password"/> <br>
+    <input type="submit" value="登录">
+</form>
+
+</body>
+</html>

+ 0 - 0
tomcat-demo/src/main/webapp/success.html → tomcat-demo/src/main/webapp/old/success.html


+ 150 - 0
tomcat-demo/src/main/webapp/regist.html

@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+    <style>
+
+        .ht{
+            text-align: center;
+            color: cadetblue;
+            font-family: 幼圆;
+        }
+        .tab{
+            width: 500px;
+            border: 5px solid cadetblue;
+            margin: 0px auto;
+            border-radius: 5px;
+            font-family: 幼圆;
+        }
+        .ltr td{
+            border: 1px solid  powderblue;
+
+        }
+        .ipt{
+            border: 0px;
+            width: 50%;
+
+        }
+        .btn1{
+            border: 2px solid powderblue;
+            border-radius: 4px;
+            width:60px;
+            background-color: antiquewhite;
+
+        }
+
+        .msg {
+            color: gold;
+        }
+
+        .buttonContainer{
+            text-align: center;
+        }
+    </style>
+
+    <script>
+        function checkUsername(){
+            var usernameReg = /^[a-zA-Z0-9]{5,10}$/
+            var usernameInput = document.getElementById("usernameInput")  
+            var username = usernameInput.value  
+            var usernameMsg = document.getElementById("usernameMsg")
+            if(!usernameReg.test(username)){
+                usernameMsg.innerText="格式有误"
+                return false
+            } 
+            usernameMsg.innerText="OK"
+            return true 
+        }
+
+
+        function checkUserPwd(){
+            var userPwdReg = /^\d{6}$/
+            var userPwdInput = document.getElementById("userPwdInput")  
+            var userPwd = userPwdInput.value  
+            var userPwdMsg = document.getElementById("userPwdMsg")
+            if(!userPwdReg.test(userPwd)){
+                userPwdMsg.innerText="格式有误"
+                return false
+            } 
+            userPwdMsg.innerText="OK"
+            return true 
+        }
+
+
+        function checkReUserPwd(){
+            var userPwdReg = /^\d{6}$/
+            // 再次输入的密码的格式
+            var reUserPwdInput = document.getElementById("reUserPwdInput")  
+            var reUserPwd = reUserPwdInput.value 
+            var reUserPwdMsg = document.getElementById("reUserPwdMsg")
+            if(!userPwdReg.test(reUserPwd)){
+                reUserPwdMsg.innerText="格式有误"
+                return false
+            } 
+            // 获得上次密码,对比两次密码是否一致
+            var userPwdInput = document.getElementById("userPwdInput")  
+            var userPwd = userPwdInput.value  
+            if(reUserPwd != userPwd){
+                reUserPwdMsg.innerText="两次密码不一致"
+                return false
+            } 
+            reUserPwdMsg.innerText="OK"
+            return true 
+        }
+
+
+        function checkForm(){
+            var flag1 = checkUsername()
+            var flag2 = checkUserPwd()
+            var flag3 = checkReUserPwd()
+
+            return flag1 && flag2 && flag3
+        }
+
+
+    </script>
+
+
+   
+</head>
+<body>
+<h1 class="ht">欢迎使用日程管理系统</h1>
+<h3 class="ht">请注册</h3>
+<!--<form method="post" action="/user/regist" onsubmit="return checkForm()">-->
+<form method="post" action="/user/register" onsubmit="return checkForm()">
+    <table class="tab" cellspacing="0px">
+        <tr class="ltr">
+            <td>请输入账号</td>
+            <td>
+                <input class="ipt" id="usernameInput" type="text" name="username" onblur="checkUsername()">
+                <span id="usernameMsg" class="msg"></span>
+            </td>
+        </tr>
+        <tr class="ltr">
+            <td>请输入密码</td>
+            <td>
+<!--                <input class="ipt" id="userPwdInput" type="password" name="userPwd" onblur="checkUserPwd()">-->
+                <input class="ipt" id="userPwdInput" type="password" name="password" onblur="checkUserPwd()">
+                <span id="userPwdMsg" class="msg"></span>
+            </td>
+        </tr>
+        <tr class="ltr">
+            <td>确认密码</td>
+            <td>
+                <input class="ipt" id="reUserPwdInput" type="password" onblur="checkReUserPwd()">
+                <span id="reUserPwdMsg" class="msg"></span>
+            </td>
+        </tr>
+        <tr class="ltr">
+            <td colspan="2" class="buttonContainer">
+                <input class="btn1" type="submit" value="注册">
+                <input class="btn1" type="reset" value="重置">
+                <button class="btn1"><a  href="login.html">去登录</a></button>
+            </td>
+        </tr>
+    </table>
+
+</form>
+</body>
+</html>

+ 11 - 0
tomcat-demo/src/main/webapp/registFail.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<h1>注册失败,用户名可能已经被抢注了,请<a href="/regist.html">重新注册</a></h1>
+
+</body>
+</html>

+ 11 - 0
tomcat-demo/src/main/webapp/registSuccess.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+<h1>注册成功,请立刻去<a href="/login.html">登录</a></h1>
+
+</body>
+</html>

+ 13 - 0
tomcat-demo/src/main/webapp/showSchedule.html

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Title</title>
+</head>
+<body>
+  <h1>以下是您的所有日程</h1>
+  ... ...
+
+
+</body>
+</html>