基于ssm(spring+springMVC+mybatis)框架和tomcat服务器搭建的简易学生信息管理系统
文章目录
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;
-
使用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>
-
搭建项目整体框架
-
编写学生(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; }
-
编写管理员(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; }
-
编写dao层(只负责对数据库进行增删改查,不包含业务逻辑)
-
对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); }
-
对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); }
-
-
编写与dao层对应的mapper.xml文件
-
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>
-
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>
-
-
配置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>
-
配置spring配置文件
-
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>
-
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
-
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>
-
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>
-
将前三个配置文件整合到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>
-
-
编写service层(业务逻辑层,负责调用dao层)
- AdminService(接口)
package com.school.service; import com.school.pojo.Admin; public interface AdminService { Admin queryAdmin(String id, String password); }
-
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); }
-
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); } }
-
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); } }
-
编写controller层
-
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); } }
-
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"; } }
-
-
编写filter(过滤器)
-
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框架)
-
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>
-
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>
-
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>
-
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>
-
配置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、最终效果展示
- 登陆界面
- 登陆失败
- 登陆成功进入学生信息展示界面
-
添加用户界面
-
添加成功
- 修改页面
- 修改成功
- 删除(点击删除按钮即可)
- 退出登陆(请求转发到登陆页面)
- 退出登陆后,不可直接通过地址栏访问后台资源