JavaWeb

基于ssm(spring+springMVC+mybatis)框架和tomcat服务器搭建的简易学生信息管理系统

1、搭建项目的准备工作

  1. 创建数据库school,建立admin(管理员)表和user(学生)表

在这里插入图片描述

在这里插入图片描述
建表语句:

/*
 Navicat Premium Data Transfer

 Source Server         : mydb
 Source Server Type    : MySQL
 Source Server Version : 80026
 Source Host           : localhost:3306
 Source Schema         : student

 Target Server Type    : MySQL
 Target Server Version : 80026
 File Encoding         : 65001

 Date: 14/04/2022 19:57:01
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for admin
-- ----------------------------
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin`  (
  `id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '账号',
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
  `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `age` int NOT NULL,
  `sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
  1. 使用maven来管理项目,配置pom文件

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>org.example</groupId>
      <artifactId>javaweb-student</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>
    
      <dependencies>
        <!--junit-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.13</version>
          <scope>test</scope>
        </dependency>
        <!--数据库驱动-->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.23</version>
        </dependency>
        <!--数据库连接池-->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.2.6</version>
        </dependency>
        <!--servlet-jsp-->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>provided</scope>
        </dependency>
        <!--servlet-api -->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>4.0.1</version>
          <scope>provided</scope>
        </dependency>
        <!--mybatis-->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.5.6</version>
        </dependency>
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>2.0.6</version>
        </dependency>
        <!--Spring-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>5.3.8</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-jdbc</artifactId>
          <version>5.3.8</version>
        </dependency>
        <!--lombok-->
        <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.18.20</version>
          <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/taglibs/standard -->
        <dependency>
          <groupId>taglibs</groupId>
          <artifactId>standard</artifactId>
          <version>1.1.2</version>
        </dependency>
        <!-- jstl -->
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
        <!--阿里巴巴fastjson-->
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.76</version>
        </dependency>
        <!-- pagehelper分页插件 -->
        <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper</artifactId>
          <version>5.2.0</version>
        </dependency>
    
      </dependencies>
    
      <!--解决资源导出问题-->
      <build>
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <includes>
              <include>**/*.properties</include>
              <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
          </resource>
          <resource>
            <directory>src/main/java</directory>
            <includes>
              <include>**/*.properties</include>
              <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
          </resource>
        </resources>
      </build>
    </project>
    
  2. 搭建项目整体框架

在这里插入图片描述

  1. 编写学生(User)实体类(使用了lombok插件,直接使用注解即可生成构造方法和get、set方法

    package com.school.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.apache.ibatis.type.Alias;
    import org.springframework.format.annotation.DateTimeFormat;
    import java.util.Date;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Alias("User")
    public class User {
        private Integer id;
        private String name;
        private Integer age;
        private String sex;
        @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
        private Date date;
    }
    
  2. 编写管理员(Admin)实体类(使用了lombok插件,直接使用注解即可生成构造方法和get、set方法

    package com.school.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.apache.ibatis.type.Alias;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Alias("Admin")
    public class Admin {
        private String id;
        private String name;
        String password;
    }
    
  3. 编写dao层(只负责对数据库进行增删改查,不包含业务逻辑)

    1. 对admin表操作

      package com.school.dao;
      
      import com.school.pojo.Admin;
      import org.apache.ibatis.annotations.Param;
      
      public interface AdminMapper {
          /**
           * 查找id和password都匹配的管理员
           * @param id 账号
           * @param password 密码
           * @return admin
           */
          Admin queryAdmin(@Param("id") String id,@Param("password") String password);
      }
      
    2. 对user表操作

      package com.school.dao;
      
      import com.school.pojo.User;
      import java.util.List;
      
      public interface UserMapper {
          /**
           * 插入学生信息
           * @param user 学生
           * @return 1
           */
          int insertUser(User user);
          /**
           * 删除学生信息
           * @param id 学生编号
           * @return 1
           */
          int deleteUserById(int id);
          /**
           * 修改学生信息
           * @param user 学生
           * @return 1
           */
          int updateUser(User user);
      
          /**
           * 查找学生的全部信息,并以列表形式返回
           * @return 学生列表
           */
          List<User> queryUser();
      
          /**
           * 通过id查找单个学生
           * @param id 学生id
           * @return 1
           */
          User queryUserById(int id);
      }
      
  4. 编写与dao层对应的mapper.xml文件

    1. AdminMapper

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      
      <mapper namespace="com.school.dao.AdminMapper">
          <select id="queryAdmin" resultType="admin">
              select * from admin where id=#{id} and password=#{password}
          </select>
      </mapper>
      
    2. UserMapper

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      
      <mapper namespace="com.school.dao.UserMapper">
          <insert id="insertUser" parameterType="user">
              insert into user values (#{id},#{name},#{age},#{sex},#{date})
          </insert>
          <update id="updateUser" parameterType="user">
              update user set name=#{name},age=#{age},sex=#{sex},date=#{date}
              where id=#{id}
          </update>
          <delete id="deleteUserById" parameterType="_int">
              delete from user where id = #{id}
          </delete>
          <select id="queryUser" resultType="user">
              select * from user
          </select>
          <select id="queryUserById" resultType="user">
              select * from user where id=#{id}
          </select>
      </mapper>
      
  5. 配置myvatis-config配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
        <settings>
            <setting name="mapUnderscoreToCamelCase" value="true"/>
            <setting name="logImpl" value="STDOUT_LOGGING" />
        </settings>
        <!--配置数据源交给spring-->
        <!--mybatis做两件事,配置别名、映射mappers配置文件-->
        <typeAliases>
           <package name="com.school.pojo"/>
        </typeAliases>
        <!--引入分页插件pagehelper-->
        <plugins>
            <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
        </plugins>
        <mappers>
            <mapper class="com.school.dao.UserMapper"/>
        </mappers>
    </configuration>
    
  6. 配置spring配置文件

    1. spring-dao.xml(spring整合mybatis)

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
      
          <!--关联数据库配置文件-->
          <context:property-placeholder location="classpath:druid.properties"/>
          <!--数据库连接池-->
          <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
              <property name="driverClassName" value="${jdbc.driverClassName}"/>
              <property name="password" value="${jdbc.password}"/>
              <property name="url" value="${jdbc.url}"/>
              <property name="username" value="${jdbc.name}"/>
              <property name="initialSize" value="${initialSize}"/>
              <property name="maxActive" value="${maxActive}"/>
          </bean>
          <!--sqlSessionFactory-->
          <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
              <property name="dataSource" ref="dataSource"/>
              <!--绑定mybatis的配置文件-->
              <property name="configLocation" value="classpath:mybatis-config.xml"/>
          </bean>
      
          <!--配置dao接口扫描包,动态的实现dao接口注入到spring容器中-->
          <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
              <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
              <property name="basePackage" value="com.school.dao"/>
          </bean>
      </beans>
      
    2. druid.properties(阿里巴巴druid数据库连接池所需的数据库配置文件)

      jdbc.name=xxxxx
      jdbc.password=xxxxxxxxx
      jdbc.url=jdbc:mysql://localhost:3306/school?useSSL=true&allowPublicKeyRetrieval=true&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
      jdbc.driverClassName=com.mysql.cj.jdbc.Driver
      initialSize=10
      maxActive=10
      
    3. spring-mvc.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
      
          <!--注解驱动-->
          <mvc:annotation-driven/>
          <!--静态资源过滤-->
          <mvc:default-servlet-handler/>
          <!--扫描包@Controller-->
          <context:component-scan base-package="com.school.controller"/>
          <!--视图解析器-->
          <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <property name="prefix" value="/WEB-INF/jsp/"/>
              <property name="suffix" value=".jsp"/>
          </bean>
      </beans>
      
    4. spring-service.xml(spring管理service层)

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
      
          <!--扫描@Service注解下的包-->
          <context:component-scan base-package="com.school.service"/>
          <!--将我们的所有业务类,注入到spring,可以通过配置或者注解类实现-->
          <bean id="userServiceImpl" class="com.school.service.UserServiceImpl"/>
          <bean id="adminServiceImlp" class="com.school.service.AdminServiceImpl"/>
          <!--声明式事务配置-->
          <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
              <property name="dataSource" ref="dataSource"/>
          </bean>
      </beans>
      
    5. 将前三个配置文件整合到applicationContext.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
      
          <import resource="classpath:spring-dao.xml"/>
          <import resource="classpath:spring-service.xml"/>
          <import resource="classpath:spring-mvc.xml"/>
      </beans>
      
  7. 编写service层(业务逻辑层,负责调用dao层)

    1. AdminService(接口)
    package com.school.service;
    
    import com.school.pojo.Admin;
    
    public interface AdminService {
        Admin queryAdmin(String id, String password);
    }
    
    1. UserService(接口)

      package com.school.service;
      
      import com.school.pojo.User;
      import java.util.List;
      
      public interface UserService {
      
          /**
           * 插入学生信息
           * @param user 学生
           * @return 1
           */
          int insertUser(User user);
      
          /**
           * 删除学生信息
           * @param id 学生编号
           * @return 1
           */
          int deleteUserById(int id);
      
          /**
           * 修改学生信息
           * @param user 学生
           * @return 1
           */
          int updateUser(User user);
      
          /**
           * 查找学生的全部信息,并以列表形式返回
           * @return 学生列表
           */
          List<User> queryUser();
      
          User queryUserById(int id);
      }
      
    2. AdminServiceImpl(实现类)

      package com.school.service;
      
      import com.school.dao.AdminMapper;
      import com.school.pojo.Admin;
      import org.springframework.beans.factory.annotation.Autowired;
      
      public class AdminServiceImpl implements AdminService{
          private AdminMapper adminMapper;
          @Autowired
          public void setAdminMapper(AdminMapper adminMapper) {
              this.adminMapper = adminMapper;
          }
      
          @Override
          public Admin queryAdmin(String id, String password) {
              return adminMapper.queryAdmin(id, password);
          }
      }
      
    3. UserServiceImpl(实现类)

      package com.school.service;
      
      import com.school.dao.UserMapper;
      import com.school.pojo.User;
      import org.springframework.beans.factory.annotation.Autowired;
      import java.util.List;
      
      public class UserServiceImpl implements UserService{
          private UserMapper userMapper;
          @Autowired
          public void setUserMapper(UserMapper userMapper) {
              this.userMapper=userMapper;
          }
      
          @Override
          public int insertUser(User user) {
              return userMapper.insertUser(user);
          }
      
          @Override
          public int deleteUserById(int id) {
              return userMapper.deleteUserById(id);
          }
      
          @Override
          public int updateUser(User user) {
              return userMapper.updateUser(user);
          }
      
          @Override
          public List<User> queryUser() {
              return userMapper.queryUser();
          }
      
          @Override
          public User queryUserById(int id) {
              return userMapper.queryUserById(id);
          }
      }
      
  8. 编写controller层

    1. AdminController

      package com.school.controller;
      
      import com.school.pojo.Admin;
      import com.school.service.AdminServiceImpl;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.beans.factory.annotation.Qualifier;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestParam;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      
      @Controller
      @RequestMapping("/admin")
      public class AdminController {
          @Qualifier("AdminServiceImpl")
          private AdminServiceImpl adminService;
          @Autowired
          public void setAdminService(AdminServiceImpl adminService) {
              this.adminService = adminService;
          }
          @RequestMapping("/verifyAdmin")
          public String verifyAdmin(@RequestParam("id") String id, @RequestParam("password") String password, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              Admin admin = adminService.queryAdmin(id, password);
              if (admin==null){
                  req.setAttribute("msg","账号或密码错误,请确认过后重新输入!");
                  req.getRequestDispatcher("/index.jsp").forward(req,resp);
              }else {
                  req.getSession().setAttribute("admin",admin);
              }
              return "redirect:/user/users";
          }
      
          @RequestMapping("/logoutAdmin")
          public void logoutAdmin(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
              req.getSession().removeAttribute("admin");
              req.getRequestDispatcher("/index.jsp").forward(req, resp);
          }
      }
      
    2. UserController

      package com.school.controller;
      
      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.support.config.FastJsonConfig;
      import com.github.pagehelper.PageHelper;
      import com.github.pagehelper.PageInfo;
      import com.school.pojo.User;
      import com.school.service.UserService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.beans.factory.annotation.Qualifier;
      import org.springframework.stereotype.Controller;
      import org.springframework.ui.Model;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestParam;
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      import java.io.PrintWriter;
      import java.util.Date;
      import java.util.Iterator;
      import java.util.List;
      
      @Controller
      @RequestMapping("/user")
      public class UserController {
          @Qualifier("UserServiceImpl")
          private UserService userService;
          @Autowired
          public void setUserService(UserService userService) {
              this.userService = userService;
          }
      
          //展示用户全部数据
          @RequestMapping("/users")
          public String user(Model model,HttpServletRequest request,@RequestParam(value = "pageNum",defaultValue = "1") String pageNum){
              PageHelper.startPage(Integer.parseInt(pageNum),5);
              List<User> users = userService.queryUser();
              PageInfo<User> info = new PageInfo<>(users);
              model.addAttribute("info",info);
              return "users";
          }
      
          //删除用户信息
          @RequestMapping("/deleteUser")
          public String deleteUser(Model model,int id){
              int i = userService.deleteUserById(id);
              return "redirect:/user/users";
          }
          
          //转到用户添加界面
          @RequestMapping("/toAddUser")
          public String toAddUser(){
              return "addUser";
          }
      
          //添加用户信息
          @RequestMapping("/addUser")
          public String addUser(Model model,User user){
              System.out.println(user.getDate());
              userService.insertUser(user);
              return "redirect:/user/users";
          }
      
          //转到修改用户信息界面
          @RequestMapping("/toUpdateUser")
          public String toAddUser(int id,Model model){
              User user = userService.queryUserById(id);
              model.addAttribute("user",user);
              return "updateUser";
          }
          
          //修改用户信息
          @RequestMapping("/updateUser")
          public String updateUser(Model model,User user){
              userService.updateUser(user);
              return "redirect:/user/users";
          }
      }
      
  9. 编写filter(过滤器)

    1. userFilter(防止未登陆的用户直接访问跳过登陆界面直接访问后台资源)

      package com.school.filter;
      
      import javax.servlet.*;
      import javax.servlet.http.HttpServletRequest;
      import java.io.IOException;
      
      /**
       * 添加过滤器,防止未登录用户查看到后台数据
       */
      public class userFilter implements Filter {
          @Override
          public void init(FilterConfig filterConfig) throws ServletException {
      
          }
      
          @Override
          public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
              HttpServletRequest request = (HttpServletRequest) servletRequest;
              //获取session域中的admin的值,如果未获取到就说明没有登陆,则请求转发到主页(即登陆)页面
              if (request.getSession().getAttribute("admin")==null){
                  request.getRequestDispatcher("/index.jsp").forward(servletRequest, servletResponse);
              }else{
                  filterChain.doFilter(servletRequest,servletResponse);
              }
          }
      
          @Override
          public void destroy() {
      
          }
      }
      

2、搭建前端界面(jsp)(基于bootstrap框架)

  1. index.jsp(登陆界面)

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登陆</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
        <link rel="stylesheet" href="/resources/layui/css/layui.css" media="all">
        <style>
            .container{
                margin-top: 100px;
            }
        </style>
    </head>
    <body>
    <div class="container">
        <form action="${pageContext.request.contextPath}/admin/verifyAdmin" method="post" >
            <div class="row">
                <div class="col-sm-6 col-xs-4 col-md-4 col-sm-offset-4 col-xs-offset-4 col-md-offset-4 form-group">
                    <label>账号</label>
                    <input type="text" class="form-control" id="id" placeholder="name" name="id">
                    <span class="text-danger">${msg}</span>
                </div>
            </div>
    
            <div class="row">
                <div class="col-sm-6 col-xs-4 col-md-4 col-sm-offset-4 col-xs-offset-4 col-md-offset-4 form-group">
                    <label>密码</label>
                    <input type="password" class="form-control" id="password" placeholder="password" name="password">
                </div>
            </div>
            <div class="row">
                <div class="col-sm-6 col-xs-4 col-md-4 col-sm-offset-4 col-xs-offset-4 col-md-offset-4 form-group">
                    <button type="submit" class="btn btn-default col-sm-offset-10 col-xs-offset-10 col-md-offset-10">登陆</button>
                </div>
            </div>
        </form>
    </div>
    </body>
    </html>
    
  2. users.jsp(学生信息展示界面)

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%@ page contentType="text/html;charset=UTF-8"%>
    <html >
    <head>
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>学生信息</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
        <link rel="stylesheet" href="//unpkg.com/layui@2.6.8/dist/css/layui.css">
    </head>
    <body>
        <div class="container">
            <div class="row clearfix">
                <div class="col-md-12 column">
                    <div class="page-header">
                        <h1>
                            <small>学生列表—————————数据展示</small>
                        </h1>
                    </div>
                </div>
            </div>
            <button type="button" class="btn btn-lg btn-primary"><a href="${pageContext.request.contextPath}/user/toAddUser">添加用户</a></button>
            <button type="button" class="btn btn-lg btn-danger col-md-offset-9"><a href="${pageContext.request.contextPath}/admin/logoutAdmin">退出登陆</a></button>
            <div class="row clearfix">
                <div class="col-md-12 column text-center">
                    <table class="table table-hover table-striped text-center">
                        <thead>
                            <tr>
                                <th class="text-center">编号</th>
                                <th class="text-center">姓名</th>
                                <th class="text-center">年龄</th>
                                <th class="text-center">性别</th>
                                <th class="text-center">注册时间</th>
                                <th class="text-center">操作</th>
                            </tr>
                        </thead>
                        <tbody>
                            <c:forEach var="user" items="${info.list}">
                                <tr>
                                    <td>${user.id}</td>
                                    <td>${user.name}</td>
                                    <td>${user.age}</td>
                                    <td>${user.sex}</td>
                                    <td><fmt:formatDate value="${user.date}" pattern="yyyy-MM-dd"/> </td>
                                    <td>
                                        <div class="">
                                            <a href="${pageContext.request.contextPath}/user/toUpdateUser?id=${user.id}"><button type="button" class="btn btn-primary btn-sm active">修改</button></a>
                                            <a href="${pageContext.request.contextPath}/user/deleteUser?id=${user.id}"><button type="button" class="btn btn-sm active btn-danger">删除</button></a>
                                        </div>
                                    </td>
                                </tr>
                            </c:forEach>
                        </tbody>
                    </table>
                </div>
            </div>
            <div class="row clearfix" id="footer">
                <div class="col-md-4">
                    当前页数${info.pageNum} 总页数${info.pages} 总记录数${info.total}
                </div>
                <div class="col-md-4 col-md-offset-8">
                    <a href="${pageContext.request.contextPath}/user/users?pageNum=1">首页</a> <a href="${pageContext.request.contextPath}/user/users?pageNum=${info.pageNum==1? 1:info.pageNum-1}">上一页</a>
                    <c:choose>
                        <c:when test="${info.pages <= 5}">
                            <c:forEach begin="1" end="${info.pages}" var="i">
                                <c:if test="${i == info.pageNum}">
                                    【${i}】
                                </c:if>
                                <c:if test="${i != info.pageNum}">
                                    <a href="${pageContext.request.contextPath}/user/users?pageNum=${i}">${i}</a>
                                </c:if>
                            </c:forEach>
                        </c:when>
                        <c:when test="${info.pages > 5}">
                            <c:choose>
                                <c:when test="${info.pageNum <= 3}">
                                    <c:forEach begin="1" end="5" var="i">
                                        <c:if test="${i == info.pageNum}">
                                            【${i}】
                                        </c:if>
                                        <c:if test="${i != info.pageNum}">
                                            <a href="${pageContext.request.contextPath}/user/users?pageNum=${i}">${i}</a>
                                        </c:if>
                                    </c:forEach>
                                </c:when>
                                <c:when test="${info.pageNum > info.pages-3}">
                                    <c:forEach begin="${info.pages-4}" end="${info.pages}" var="i">
                                        <c:if test="${i == info.pageNum}">
                                            【${i}】
                                        </c:if>
                                        <c:if test="${i != info.pageNum}">
                                            <a href="${pageContext.request.contextPath}/user/users?pageNum=${i}">${i}</a>
                                        </c:if>
                                    </c:forEach>
                                </c:when>
                                <c:otherwise>
                                    <c:forEach begin="${info.pageNum-2}" end="${info.pageNum+2}" var="i">
                                        <c:if test="${i == info.pageNum}">
                                            【${i}】
                                        </c:if>
                                        <c:if test="${i != info.pageNum}">
                                            <a href="${pageContext.request.contextPath}/user/users?pageNum=${i}">${i}</a>
                                        </c:if>
                                    </c:forEach>
                                </c:otherwise>
                            </c:choose>
                        </c:when>
                    </c:choose>
                    <a href="${pageContext.request.contextPath}/user/users?pageNum=${info.pageNum==info.pages? info.pages:info.pageNum+1}">下一页</a>
                    <a href="${pageContext.request.contextPath}/user/users?pageNum=${info.pages}">末页</a>
                </div>
            </div>
        </div>
    </body>
    </html>
    
  3. updateUser.jsp(学生信息修改界面)

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    <%@ page import="com.school.pojo.User" %>
    <%@ page import="java.util.Date" %>
    <%@ page import="java.text.SimpleDateFormat" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>修改学生信息</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
        <link rel="stylesheet" href="//unpkg.com/layui@2.6.8/dist/css/layui.css">
        <style>
            .container{
                margin-top: 80px;
            }
        </style>
    </head>
    <body>
    <%
        User user = (User) request.getAttribute("user");
        Date date = user.getDate();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = simpleDateFormat.format(date);
    %>
    <div class="container">
        <form action="/user/updateUser" method="post">
            <input type="hidden" name="id" value="${user.id}">
            <div class="col-md-4 col-md-offset-4 form-group">
                <label>姓名</label>
                <input type="text" class="form-control" value="${user.name}" id="name" name="name" placeholder="name">
            </div>
            <div class="col-md-4 col-md-offset-4 form-group">
                <label>年龄</label>
                <input type="number" class="form-control" value="${user.age}" id="age" name="age" min="0" max="100" placeholder="age"/>
            </div>
            <div class="col-md-4 col-md-offset-4 form-group">
                <label>性别</label>
            </div>
            <div class="col-md-4 col-md-offset-4 form-group">
                <label class="radio-inline">
                    <input type="radio" name="sex" id="male" value="男" checked="checked"> 男
                </label>
                <label class="radio-inline">
                    <input type="radio" name="sex" id="female" value="女"> 女
                </label>
            </div>
            <div class="col-md-4 col-md-offset-4 form-group">
                <label>注册时间</label>
                <input type="text" class="form-control" value="<fmt:formatDate value="${user.date}" pattern="yyyy-MM-dd"/>" id="dataR" readonly="readonly">
            </div>
            <input type="hidden" value="<%=format%>" id="data" name="date">
            <div class="col-md-1 col-md-offset-7 form-group">
                <button type="submit" class="btn btn-default">修改</button>
            </div>
        </form>
    </div>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    <script>
        οnlοad=function () {
            if ("${user.sex}" === "男") {
                $("#male").attr("checked","checked")
                $("#female").removeAttr("checked")
            } else {
                $("#female").attr("checked","checked")
                $("#male").removeAttr("checked")
            }
        }
    </script>
    </body>
    </html>
    
  4. addUser.jsp(学生信息添加界面)

    <%@ page import="java.text.SimpleDateFormat" %>
    <%@ page import="java.util.Timer" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>添加学生信息</title>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
        <link rel="stylesheet" href="/resources/layui/css/layui.css" media="all">
        <style>
            .container{
                margin-top: 80px;
            }
        </style>
    </head>
    <body>
    <div class="container">
        <form action="/user/addUser" method="post">
            <div class="col-md-4 col-md-offset-4 form-group">
                <label>姓名</label>
                <input type="text" class="form-control" id="name" placeholder="name" name="name">
            </div>
            <div class="col-md-4 col-md-offset-4 form-group">
                <label>年龄</label><br/>
                <input type="number" class="form-control" id="age" name="age" min="0" max="100" placeholder="age"/>
            </div>
            <div class="col-md-4 col-md-offset-4 form-group">
                <label>性别</label>
            </div>
            <div class="col-md-4 col-md-offset-4 form-group">
                <label class="radio-inline">
                    <input type="radio" name="sex" id="male" value="男" checked="checked"> 男
                </label>
                <label class="radio-inline">
                    <input type="radio" name="sex" id="female" value="女"> 女
                </label>
            </div>
            <input type="hidden" name="date" value="" id="date">
            <div class="col-md-1 col-md-offset-7">
                <button type="submit" class="btn btn-default">添加</button>
            </div>
        </form>
    </div>
    
    <script src="/resources/layui/layui.js" charset="utf-8"></script>
    <script>
        function run(){
            var date = new Date();
            var YY = date.getFullYear() + '-';
            var MM = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
            var DD = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
            var hh = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
            var mm = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
            var ss = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
            document.getElementById("date").value = YY + MM + DD +" "+hh + mm + ss;
        }
        window.setInterval("run();",1000);
    </script>
    </body>
    </html>
    
  5. 配置Tomcat的web.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                          http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0"
             metadata-complete="true">
    
      <!--DispatcherServlet-->
      <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
      <!--乱码过滤  /*会过滤jsp,/不会-->
      <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>utf-8</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
      <!--对请求进行过滤,如果登陆成功则放行,不成功则拦截并请求转发到首页-->
      <filter>
        <filter-name>userFilter</filter-name>
        <filter-class>com.school.filter.userFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>userFilter</filter-name>
        <url-pattern>/user/*</url-pattern>
      </filter-mapping>
    </web-app>
    

3、最终效果展示

  1. 登陆界面

在这里插入图片描述

  1. 登陆失败

在这里插入图片描述

  1. 登陆成功进入学生信息展示界面

在这里插入图片描述

  1. 添加用户界面

    在这里插入图片描述

  2. 添加成功

在这里插入图片描述

  1. 修改页面

在这里插入图片描述

  1. 修改成功

在这里插入图片描述

  1. 删除(点击删除按钮即可)

在这里插入图片描述

  1. 退出登陆(请求转发到登陆页面)

在这里插入图片描述

  1. 退出登陆后,不可直接通过地址栏访问后台资源

在这里插入图片描述

项目地址见 https://gitee.com/dmctc/javaweb-student.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值