本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(7)

IDEA实现前端页面登录,注册、增、删、改、查操作-完整版

发布于2022-12-03 12:18     阅读(747)     评论(0)     点赞(10)     收藏(5)


分层思想:
   entity层:存放实体类
      vo层:消息模型(重复使用的一些属性)
   mapper层:接口(写方法的)
      mapper.xml:MyBatis与数据库相关的一些内容
   controller(web)层:
      接收前端传回的参数
      调用service层,返回结果
      转发、响应结果(跳转页面)
   service层:
      业务逻辑判断,写方法的.
   utils层:
      工具类:写通用的方法、类。
   test包:
      测试类、测试方法(测试代码)
   MyBatis-config.xml:
      连接数据库的

pom.xml: 导入相关依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.hsd</groupId>
  6. <artifactId>Servlet_Maven</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <packaging>war</packaging>
  9. <name>Servlet_Maven Maven Webapp</name>
  10. <!-- FIXME change it to the project's website -->
  11. <url>http://www.example.com</url>
  12. <properties>
  13. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  14. <maven.compiler.source>1.7</maven.compiler.source>
  15. <maven.compiler.target>1.7</maven.compiler.target>
  16. </properties>
  17. <dependencies>
  18. <dependency>
  19. <groupId>com.fasterxml.jackson</groupId>
  20. <artifactId>jackson-datatype-json-org</artifactId>
  21. <version>1.8.0</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>jstl</groupId>
  25. <artifactId>jstl</artifactId>
  26. <version>1.2</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.mybatis</groupId>
  30. <artifactId>mybatis</artifactId>
  31. <version>3.5.5</version>
  32. </dependency>
  33. <dependency>
  34. <groupId>taglibs</groupId>
  35. <artifactId>standard</artifactId>
  36. <version>1.1.2</version>
  37. </dependency>
  38. <dependency>
  39. <groupId>mysql</groupId>
  40. <artifactId>mysql-connector-java</artifactId>
  41. <version>5.1.34</version>
  42. </dependency>
  43. <!-- jsp-->
  44. <dependency>
  45. <groupId>javax.servlet.jsp</groupId>
  46. <artifactId>jsp-api</artifactId>
  47. <version>2.2</version>
  48. </dependency>
  49. <dependency>
  50. <groupId>javax.servlet</groupId>
  51. <artifactId>javax.servlet-api</artifactId>
  52. <version>3.1.0</version>
  53. </dependency>
  54. <dependency>
  55. <!--junit:封装类的jar包-->
  56. <groupId>junit</groupId>
  57. <artifactId>junit</artifactId>
  58. <version>4.11</version>
  59. <scope>test</scope>
  60. </dependency>
  61. </dependencies>
  62. <build>
  63. <!-- 将配置文件复制到编译目录中-->
  64. <resources>
  65. <resource>
  66. <!-- 所在的目录-->
  67. <directory>src/main/java</directory>
  68. <includes>
  69. <!-- .xml和.properties结尾的文件都会扫描到-->
  70. <include>**/*.properties</include>
  71. <include>**/*.xml</include>
  72. </includes>
  73. <filtering>true</filtering>
  74. </resource>
  75. </resources>
  76. <finalName>Servlet_Maven</finalName>
  77. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  78. <plugins>
  79. <plugin>
  80. <artifactId>maven-clean-plugin</artifactId>
  81. <version>3.1.0</version>
  82. </plugin>
  83. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  84. <plugin>
  85. <artifactId>maven-resources-plugin</artifactId>
  86. <version>3.0.2</version>
  87. </plugin>
  88. <plugin>
  89. <artifactId>maven-compiler-plugin</artifactId>
  90. <version>3.8.0</version>
  91. </plugin>
  92. <plugin>
  93. <artifactId>maven-surefire-plugin</artifactId>
  94. <version>2.22.1</version>
  95. </plugin>
  96. <plugin>
  97. <artifactId>maven-war-plugin</artifactId>
  98. <version>3.2.2</version>
  99. </plugin>
  100. <plugin>
  101. <artifactId>maven-install-plugin</artifactId>
  102. <version>2.5.2</version>
  103. </plugin>
  104. <plugin>
  105. <artifactId>maven-deploy-plugin</artifactId>
  106. <version>2.8.2</version>
  107. </plugin>
  108. </plugins>
  109. </pluginManagement>
  110. </build>
  111. </project>

MyBatis-config.xml: 连接数据库

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!--properties标签配置的整个文件都可使用,在任何位置配置的值都可以引入进来-->
  7. <!--resource和url都可配置,但不能同时使用-->
  8. <!--<properties resource="Mysql.properties"/>-->
  9. <!-- <properties url="Mysql.properties"/>-->
  10. <!--扫描实体类-->
  11. <!-- <typeAliases>
  12. <package name="com.hsd.entity"/>
  13. &lt;!&ndash;<typeAliases alias="User" type="com.hsd.entity.User"/>&ndash;&gt;
  14. </typeAliases>-->
  15. <environments default="development">
  16. <environment id="development">
  17. <transactionManager type="JDBC"/>
  18. <dataSource type="POOLED">
  19. <property name="driver" value="com.mysql.jdbc.Driver"/>
  20. <!--我的数据库:h2022-->
  21. <property name="url" value="jdbc:mysql:///h2022?useSSL=false&amp;useServerPrepStmts=true"/>
  22. <!--我的数据库的名称和密码-->
  23. <property name="username" value="root"/>
  24. <property name="password" value="root"/>
  25. </dataSource>
  26. </environment>
  27. </environments>
  28. <!--mapper映射器-->
  29. <mappers>
  30. <!--1.映射文件一个一个扫描-->
  31. <!--<mapper resource="com.hsd.mapper.UserMapper"/>
  32. <mapper class="com.hsd.mapper.UserMapper"/>-->
  33. <!--2.扫描mapper,自动扫描mapper中的接口和xml-->
  34. <package name="com.hsd.mapper"/>
  35. </mappers>
  36. </configuration>

utils层: GetSessionUtil类:

  1. package com.hsd.utils;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. public class GetSessionUtil {
  9. public static SqlSession SqlSession(){
  10. InputStream inputStream=null;
  11. SqlSessionFactory sqlSessionFactory=null;
  12. SqlSession sqlSession=null;
  13. //获取MyBatis的配置文件
  14. try {
  15. String resources="MyBatis-config.xml";
  16. //通过输入流拿到MyBatis-config.xml的配置文件
  17. inputStream=Resources.getResourceAsStream(resources);
  18. //MyBatis通过读取配置文件信息,构造出sqlSessionFactory
  19. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  20. //获取sqlSession
  21. sqlSession=sqlSessionFactory.openSession();
  22. return sqlSession;
  23. }catch (IOException e){
  24. e.printStackTrace();
  25. return null;
  26. }
  27. }
  28. //测试配置环境无问题
  29. public static void main(String[] args) {
  30. System.out.println(SqlSession());
  31. }
  32. }

test包: UserTest类:

  1. package com.hsd.test;
  2. import com.hsd.entity.User;
  3. import com.hsd.mapper.UserMapper;
  4. import com.hsd.utils.GetSessionUtil;
  5. import org.apache.ibatis.session.SqlSession;
  6. public class UserTest {
  7. public static void main(String[] args) {
  8. //获取sqlSession
  9. SqlSession sqlSession= GetSessionUtil.SqlSession();
  10. //获取mapper
  11. UserMapper mapper=sqlSession.getMapper(UserMapper.class);
  12. //调用mapper的方法
  13. User user = mapper.selectByUsername("aaa");
  14. //
  15. System.out.println(user);
  16. }
  17. }

登录:
   1.数据库建表user
   2.前端页面:user.jsp
         登录表单:
            (1)form表单,创建账号和密码的输入框
            (2)将登陆按钮绑定点击事件
            (3)获取用户名和密码的值
            (4)判断账号是否为空
               若为空,就提示“账号不能为空”(赋值给span标签)并return返回
            (5)判断密码是否为空
               若为空,就提示“密码不能为空”(赋值给span标签)并return返回
            (6)若都不为空,提交表单,跳转到后端
   3.后端代码:
     (1)接收客户端请求(账号、密码)
     (2)调用service中的登录方法
     (3)判断账号是否存在
         若账号不存在,就提示“用户账号不存在”,返回到登录页面继续登录。
     (4)判断密码是否有误
         若密码有误,就提示“用户密码有误”,返回到登录页面继续登录。
     (5)若都没问题就跳转到首页

     controller层:(接收请求、响应结果)
        1、接收客户端请求(账号、密码)
        2、调用service中的登录方法
        3、判断是否登录成功,成功的话跳转到首页,失败的话继续登录
     service层:(业务逻辑)
        1、创建消息模型对象(状态、提示信息、回显数据)
        2、判断账号是否存在
          若账号不存在,就提示“用户账号不存在”,回显数据到消息模型对象中,返回消息模型对  象
        3、判断密码是否有误
          若密码有误,就提示“用户密码有误”,回显数据到消息模型对象中,返回消息模型对象
        4、若无问题就将用户信息放到消息模型中
     mapper层:
        mapper接口:定义对应的接口
        mapper.xml:写对应的sql语句
     entity层:
        vo层:消息模型(重复使用的一些属性,写在MessageModel类中)
     student.jsp:首页 

1.数据库建表user

  1. CREATE TABLE USER(
  2. id INT PRIMARY KEY AUTO_INCREMENT,
  3. username VARCHAR(20),
  4. PASSWORD VARCHAR(20)
  5. );
  6. INSERT INTO USER(username,PASSWORD)VALUE
  7. ('admin','123');

 entity层:User类 

  1. package com.hsd.entity;
  2. public class User {
  3. private int id;
  4. private String username;
  5. private String password;
  6. public User() {
  7. }
  8. public User(int id, String username, String password) {
  9. this.id = id;
  10. this.username = username;
  11. this.password = password;
  12. }
  13. public int getId() {
  14. return id;
  15. }
  16. public void setId(int id) {
  17. this.id = id;
  18. }
  19. public String getUsername() {
  20. return username;
  21. }
  22. public void setUsername(String username) {
  23. this.username = username;
  24. }
  25. public String getPassword() {
  26. return password;
  27. }
  28. public void setPassword(String password) {
  29. this.password = password;
  30. }
  31. @Override
  32. public String toString() {
  33. return "User{" +
  34. "id=" + id +
  35. ", username='" + username + '\'' +
  36. ", password='" + password + '\'' +
  37. '}';
  38. }
  39. }

 entity层:Student类

  1. package com.hsd.entity;
  2. //学生实体类
  3. public class Student {
  4. private int id;//编号
  5. private String name;//姓名
  6. private int age;//年龄
  7. private String sex;//性别
  8. private String hobby;//爱好
  9. private String time;//日期
  10. public Student() {
  11. }
  12. public Student(int id, String name, int age, String sex, String hobby, String time) {
  13. this.id = id;
  14. this.name = name;
  15. this.age = age;
  16. this.sex = sex;
  17. this.hobby = hobby;
  18. this.time = time;
  19. }
  20. public int getId() {
  21. return id;
  22. }
  23. public void setId(int id) {
  24. this.id = id;
  25. }
  26. public String getName() {
  27. return name;
  28. }
  29. public void setName(String name) {
  30. this.name = name;
  31. }
  32. public int getAge() {
  33. return age;
  34. }
  35. public void setAge(int age) {
  36. this.age = age;
  37. }
  38. public String getSex() {
  39. return sex;
  40. }
  41. public void setSex(String sex) {
  42. this.sex = sex;
  43. }
  44. public String getHobby() {
  45. return hobby;
  46. }
  47. public void setHobby(String hobby) {
  48. this.hobby = hobby;
  49. }
  50. public String getTime() {
  51. return time;
  52. }
  53. public void setTime(String time) {
  54. this.time = time;
  55. }
  56. @Override
  57. public String toString() {
  58. return "Student{" +
  59. "id=" + id +
  60. ", name='" + name + '\'' +
  61. ", age=" + age +
  62. ", sex='" + sex + '\'' +
  63. ", hobby='" + hobby + '\'' +
  64. ", time='" + time + '\'' +
  65. '}';
  66. }
  67. }

 2.前端页面:user.jsp

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: 30868
  4. Date: 2022/10/27
  5. Time: 16:55
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  9. <html>
  10. <head>
  11. <title>登录</title>
  12. </head>
  13. <body>
  14. <div style="text-align: center">
  15. <h1>登录页面</h1>
  16. <form action="UserServlet" method="get" id="userForm">
  17. 账号:<input type="text" name="username" id="username" value="${messageModel.object.username}"><br>
  18. 密码:<input type="password" name="password" id="password" value="${messageModel.object.password}"><br>
  19. <div style="color: red" id="div">${messageModel.msg}</div><br>
  20. <button type="button" id="but">登录</button>
  21. <button type="button"><a href="register.jsp" style="text-decoration: none">注册</a></button>
  22. </form>
  23. </div>
  24. </body>
  25. <%--加载jquery-3.4.1.js插件--%>
  26. <script src="js/jquery-3.4.1.js"></script>
  27. <script type="text/javascript">
  28. <%--通过id选择器,给登录按钮绑定一个点击事件--%>
  29. $("#but").click(function () {
  30. //通过id选择器获取账号和密码
  31. var username=$("#username").val();
  32. var password=$("#password").val();
  33. //判断用户名和密码是否为空,若为空返回true,不为空返回false
  34. function isEmpty(str) {
  35. if(str==null||str.trim()==""){
  36. return true;
  37. }
  38. return false;
  39. }
  40. //判断账号是否为空
  41. if(isEmpty(username)) {
  42. //若账号为空,提示并返回:
  43. $("#div").html("账号不能为空!")
  44. return;
  45. }if(isEmpty(password)){
  46. /* //若密码为空,提示并返回:*/
  47. $("#div").html("密码不能为空!")
  48. return;
  49. }
  50. $("#userForm").submit()
  51. });
  52. </script>
  53. </html>

 相关的MessageModel类:entity层:-->vo层-->消息模型:写入重复使用的一些属性。

  1. package com.hsd.entity.vo;
  2. public class MessageModel {
  3. private int code=1;//状态码(1:成功。0:失败。默认为1)
  4. private String msg="成功";//提示信息(成功和失败,默认成功,失败提示错误信息)
  5. private Object object;//回显对象(基本数据类型、引用数据类型、数组、集合)
  6. public MessageModel() {
  7. }
  8. public MessageModel(int code, String msg, Object object) {
  9. this.code = code;
  10. this.msg = msg;
  11. this.object = object;
  12. }
  13. public int getCode() {
  14. return code;
  15. }
  16. public void setCode(int code) {
  17. this.code = code;
  18. }
  19. public String getMsg() {
  20. return msg;
  21. }
  22. public void setMsg(String msg) {
  23. this.msg = msg;
  24. }
  25. public Object getObject() {
  26. return object;
  27. }
  28. public void setObject(Object object) {
  29. this.object = object;
  30. }
  31. }

 3.后端代码:controller层:UserServlet类

  1. package com.hsd.controller;
  2. import com.hsd.entity.vo.MessageModel;
  3. import com.hsd.service.UserService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. /*controller层:(接收请求、响应结果)
  11. 1、接收客户端请求(账号、密码)
  12. 2、调用service中的登录方法
  13. 3、判断是否登录成功,成功的话跳转到首页,失败的话继续登录*/
  14. @WebServlet("/UserServlet")
  15. public class UserServlet extends HttpServlet {
  16. @Override
  17. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  18. //获取UserService对象
  19. UserService userService=new UserService();
  20. // 1、接收客户端请求(账号、密码)
  21. String username=req.getParameter("username");
  22. String password=req.getParameter("password");
  23. //2、调用service中的登录方法
  24. MessageModel messageModel=userService.selectByUsername(username,password);
  25. //3、判断是否登录成功,成功的话跳转到首页,失败的话继续登录
  26. if(messageModel.getCode()==1){
  27. //成功,将消息模型存到req中,并重定向到首页
  28. //转发(req)
  29. req.getSession().setAttribute("messageModel",messageModel);
  30. //重定向(resp)
  31. //路径不加‘/’
  32. resp.sendRedirect("StudentServlet");
  33. }else{
  34. //失败,将消息模型存到req中,并转发到登录页面
  35. req.setAttribute("messageModel",messageModel);
  36. //路径加‘/’
  37. req.getRequestDispatcher("/user.jsp").forward(req,resp);
  38. }
  39. }
  40. }

service层:UserService类

  1. package com.hsd.service;
  2. import com.hsd.entity.User;
  3. import com.hsd.entity.vo.MessageModel;
  4. import com.hsd.mapper.UserMapper;
  5. import com.hsd.utils.GetSessionUtil;
  6. import org.apache.ibatis.session.SqlSession;
  7. /*1、创建消息模型对象(状态、提示信息、回显数据)
  8. 2、判断账号是否存在
  9. 若账号不存在,就提示“用户账号不存在”,回显数据到消息模型对象中,返回消息模型对象
  10. 3、判断密码是否有误
  11. 若密码有误,就提示“用户密码有误”,回显数据到消息模型对象中,返回消息模型对象
  12. 4、若无问题就将用户信息放到消息模型中*/
  13. public class UserService {
  14. public MessageModel selectByUsername(String username, String password) {
  15. //1、创建消息模型对象(状态、提示信息、回显数据)
  16. MessageModel messageModel=new MessageModel();
  17. //回显数据,当账号和密码输入错误时,不会自动清空账号和密码,仍保留。
  18. User u=new User();
  19. u.setUsername(username);
  20. u.setPassword(password);
  21. //将回显的数据放在回显对象中
  22. messageModel.setObject(u);
  23. //获取sqlSession对象
  24. SqlSession sqlSession= GetSessionUtil.SqlSession();
  25. //调用UserMapper的登录方法
  26. UserMapper mapper=sqlSession.getMapper(UserMapper.class);
  27. User user=mapper.selectByUsername(username);
  28. //2、判断账号是否存在
  29. if(user==null){
  30. //若账号不存在,就提示“用户账号不存在”,回显数据到消息模型对象中,返回消息模型对象
  31. messageModel.setCode(0);//修改状态为0
  32. messageModel.setMsg("该账号不存在");
  33. return messageModel;
  34. }
  35. //3、判断密码是否有误
  36. if(!password.equals(user.getPassword())){
  37. messageModel.setCode(0);//修改状态为0
  38. messageModel.setMsg("密码有误");
  39. return messageModel;
  40. }
  41. //4、若无问题就将用户信息放到消息模型中
  42. messageModel.setObject(user);
  43. //释放资源
  44. sqlSession.close();
  45. return messageModel;
  46. }
  47. /*service层:(业务逻辑)
  48. 1、创建消息模型对象(状态、提示信息、回显数据)
  49. 2、判断账号是否存在
  50. 若账号存在,就提示“用户账号已存在不能注册”,回显数据到消息模型对象中,返回消息模型对象
  51. 3、若无问题就将用户信息放到消息模型中*/
  52. public MessageModel Register(User user) {
  53. // 1、创建消息模型对象(状态、提示信息、回显数据)
  54. MessageModel messageModel = new MessageModel();
  55. //回显数据
  56. User u = new User();
  57. u.setUsername(user.getUsername());
  58. u.setPassword(user.getPassword());
  59. //将回显的数据存到数据模型中
  60. messageModel.setObject(u);
  61. //获取sqlSession
  62. SqlSession sqlSession = GetSessionUtil.SqlSession();
  63. //获取mapper
  64. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  65. //调用mapper中查找用户名的方法
  66. User user1 = mapper.selectByUsername(user.getUsername());
  67. //2、判断账号是否存在
  68. if(user1!=null){
  69. //若账号存在,就提示“用户账号已存在不能注册”,
  70. messageModel.setCode(0);//消息模型的状态修改为0
  71. messageModel.setMsg("该账号已存在不能注册");//提示信息
  72. return messageModel;//将错误的信息返回给messageModel
  73. }
  74. //不存在,3、若无问题就将用户信息放到消息模型中
  75. //调用mapper中的注册方法
  76. mapper.Register(user);
  77. messageModel.setObject(user);
  78. //提交事务:添加时需要提交,查询时不需要提交
  79. //将数据放到数据库时,需要提交事务;从数据库中取出数据时,不需要提交事务
  80. sqlSession.commit();
  81. return messageModel;
  82. //释放资源
  83. }
  84. }

mapper层:UserMapper

  1. package com.hsd.mapper;
  2. import com.hsd.entity.User;
  3. import org.apache.ibatis.annotations.Select;
  4. public interface UserMapper {
  5. //@Select("select * from user")
  6. User selectByUsername(String name);
  7. void Register(User user);
  8. }

 UserMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--namespace:命名空间,对应Mapper接口的路径-->
  6. <mapper namespace="com.hsd.mapper.UserMapper">
  7. <!--id(必写)对应Mapper接口中的方法名称,parameterType:接口中的方法的参数类型,resultType:实体类-->
  8. <select id="selectByUsername" parameterType="String" resultType="com.hsd.entity.User">
  9. select * from user where username=#{username};
  10. </select>
  11. <insert id="Register">
  12. insert into user value (null,#{username},#{password});
  13. </insert>
  14. </mapper>

 设置xml:File-->Settings-->Editor-->Code Style-->File and Code Templates:点击'+'号,设置:Name:Mapper,Extension:xml-->Apply-->OK

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="">
  6. </mapper>

 

 注册:

1.前端页面register.jsp 注册表单:

(1)form表单,账号、密码、重复密码和注册的按钮

(2)将注册按钮绑定点击事件

(3)获取账号、密码、重复密码的值

(4)判断账号是否为空 若为空,就提示“账号不能为空”(赋值给div标签)并return返回 (5)判断密码是否为空 若为空,就提示“密码不能为空”(赋值给div标签)并return返回 (6)判断重复密码是否为空 若为空,就提示“重复密码不能为空”(赋值给div标签)并return返回

(7)判断密码和重复密码是否一致

(8)判断密码长度是否符合要求(>3&&<6)

(9)提交表单

2.后端代码:

(1)接收客户端请求(账号、密码)

(2)把接收的数据封装到实体类

(3)调用service中的注册方法

(4)判断账号是否存在 若账号存在,就提示“用户账号已存在不能注册”,返回到注册页面继续注册。

(5)若该账号不存在,就跳转到登录页面

controller层:(接收请求、响应结果)

1、接收客户端请求(账号、密码)

2、把接收的数据封装到实体类

3、调用service中的注册方法

4、判断是否注册成功,成功的话跳转到登录页面,失败的话继续注册

service层:(业务逻辑)

1、创建消息模型对象(状态、提示信息、回显数据)

2、判断账号是否存在 若账号存在,就提示“用户账号已存在不能注册”,回显数据到消息模型对象中,返回消息模型对象

3、若无问题就将用户信息放到消息模型中

mapper层:

1、mapper接口:定义对应的接口

2、mapper.xml:写对应的sql语句

  1.前端页面register.jsp:

里面用到了jQuery:

jQuery 是一个 JavaScript 库,里面存在大量的JavaScript函数

jQuery 极大地简化了 JavaScript 编程

jQuery 的获取:官网
https://jquery.com/ 

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: 30868
  4. Date: 2022/10/28
  5. Time: 10:30
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  9. <html>
  10. <head>
  11. <title>Title</title>
  12. </head>
  13. <body>
  14. <span style="text-align: center">
  15. <h1>注册页面</h1>
  16. <form action="RegisterServlet" method="get" id="registerForm">
  17. 账号:<input type="text" name="username" id="username" value="${messageModel.object.username}"><br>
  18. 密码:<input type="password" name="password" id="password" value="${messageModel.object.password}"><br>
  19. 重复密码:<input type="password" name="password2" id="password2"><br>
  20. <div style="color: red" id="div">${messageModel.msg}</div><br>
  21. <button type="button" id="but">注册</button>
  22. <button type="button"><a href="user.jsp" style="text-decoration: none">登录</a></button>
  23. </form>
  24. </span>
  25. </body>
  26. <script src="js/jquery-3.4.1.js"></script>
  27. <script type="text/javascript">
  28. /*通过id选择器获取注册的按钮,给注册按钮绑定点击事件*/
  29. $("#but").click(function () {
  30. //获取账号、密码、重复密码的值
  31. var username=$("#username").val();
  32. var password=$("#password").val();
  33. var password2=$("#password2").val();
  34. //判断是否为空
  35. function isEmpty(str){
  36. if(str==null||str.trim()==""){
  37. return true;
  38. }
  39. return false;
  40. }
  41. if(isEmpty(username)){
  42. $("#div").html("账号不能为空")
  43. return;
  44. }
  45. if(isEmpty(password)){
  46. $("#div").html("密码不能为空")
  47. return;
  48. }
  49. if(isEmpty(password2)){
  50. $("#div").html("重复密码不能为空")
  51. return;
  52. }
  53. //判断密码和重复密码是否一致
  54. if(password!=password2){
  55. $("#div").html("密码不一致")
  56. return;
  57. }
  58. //判断密码长度是否符合要求(>3&&<6)
  59. if(username.length<3||username.length>6){
  60. $("#div").html("账号长度不能小于3位,也不能大于6位")
  61. return;
  62. }
  63. //提交表单
  64. $("#registerForm").submit();
  65. });
  66. </script>
  67. </html>

 2.后端代码:controller层:RegisterServlet类: 

  1. package com.hsd.controller;
  2. import com.hsd.entity.User;
  3. import com.hsd.entity.vo.MessageModel;
  4. import com.hsd.service.UserService;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. @WebServlet("/RegisterServlet")
  12. public class RegisterServlet extends HttpServlet {
  13. @Override
  14. /*controller层:(接收请求、响应结果)
  15. 1、接收客户端请求(账号、密码)
  16. 2、把接收的数据封装到实体类
  17. 3、调用service中的注册方法
  18. 4、判断是否注册成功,成功的话跳转到登录页面,失败的话继续注册*/
  19. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  20. //获取userService对象
  21. UserService userService = new UserService();
  22. // 1、接收客户端请求(账号、密码)
  23. String username=req.getParameter("username");
  24. String password=req.getParameter("password");
  25. //2、把接收的数据封装到实体类
  26. User user=new User();
  27. user.setUsername(username);
  28. user.setPassword(password);
  29. //3、调用service中的注册方法
  30. MessageModel messageModel=userService.Register(user);
  31. //4、判断是否注册成功,成功的话跳转到登录页面,失败的话继续注册
  32. if(messageModel.getCode()==1){
  33. //成功,将消息模型存到req中,并重定向到登录页面
  34. req.setAttribute("messageModel",messageModel);
  35. resp.sendRedirect("user.jsp");
  36. }else {
  37. //失败,将消息模型存到req中,并转发到注册页面
  38. req.setAttribute("messageModel",messageModel);
  39. req.getRequestDispatcher("/register.jsp").forward(req,resp);
  40. }
  41. }
  42. }

 student.jsp:首页

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%--
  3. Created by IntelliJ IDEA.
  4. User: 30868
  5. Date: 2022/10/28
  6. Time: 8:44
  7. To change this template use File | Settings | File Templates.
  8. --%>
  9. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  10. <html>
  11. <head>
  12. <title>展示页面</title>
  13. </head>
  14. <body>
  15. <center>
  16. <h1>展示页面</h1>
  17. <h2>欢迎${messageModel.object.username}登录成功!</h2>
  18. <a href="add.jsp">添加</a>
  19. <table border="1px" cellspacing="0">
  20. <tr>
  21. <%--th:加粗居中--%>
  22. <th>选项</th>
  23. <th>编号</th>
  24. <th>姓名</th>
  25. <th>年龄</th>
  26. <th>性别</th>
  27. <th>爱好</th>
  28. <th>日期</th>
  29. <th>操作</th>
  30. </tr>
  31. <%--c:forEach :循环--%>
  32. <c:forEach items="${list}" var="l">
  33. <tr>
  34. <td>
  35. <input type="checkbox" name="option" value="${l.id}">
  36. </td>
  37. <td>${l.id}</td>
  38. <td>${l.name}</td>
  39. <td>${l.age}</td>
  40. <td>
  41. <c:if test="${l.sex==1}">
  42. </c:if>
  43. <c:if test="${l.sex!=1}">
  44. </c:if>
  45. </td>
  46. <td>${l.hobby}</td>
  47. <td>${l.time}</td>
  48. <td>
  49. <%--修改根据id--%>
  50. <a href="selectByIdServlet?id=${l.id}">修改</a>
  51. <%--删除根据id--%>
  52. <a href="deleteByIdServlet?id=${l.id}">删除</a>
  53. </td>
  54. </tr>
  55. </c:forEach>
  56. </table>
  57. <input type="submit" value="全选" onclick="checkAll()">
  58. <input type="submit" value="全不选" onclick="checkNoAll()">
  59. </center>
  60. </body>
  61. <script type="text/javascript">
  62. /*在js中获取点击框*/
  63. var option=document.getElementsByName("option");
  64. //全选
  65. function checkAll() {
  66. for (let i = 0; i < option.length; i++) {
  67. option[i].checked=true;
  68. }
  69. }
  70. function checkNoAll() {
  71. for (let i = 0; i < option.length; i++) {
  72. option[i].checked=false;
  73. }
  74. }
  75. </script>
  76. </html>

StudentServlet类: 

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.util.List;
  11. @WebServlet("/StudentServlet")
  12. public class StudentServlet extends HttpServlet {
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //获取StudentService对象
  16. StudentService studentService = new StudentService();
  17. //调用Service层的selectAll方法
  18. List<Student> list=studentService.selectAll();
  19. //将拿到的数据存到req域中
  20. req.setAttribute("list",list);
  21. //转发到student.jsp展示页面
  22. req.getRequestDispatcher("/student.jsp").forward(req,resp);
  23. }
  24. }

 service层:StudentService类: 

  1. package com.hsd.service;
  2. import com.hsd.entity.Student;
  3. import com.hsd.mapper.StudentMapper;
  4. import com.hsd.utils.GetSessionUtil;
  5. import org.apache.ibatis.session.SqlSession;
  6. import java.util.List;
  7. public class StudentService {
  8. //获取工具类中的SqlSession对象
  9. SqlSession sqlSession= GetSessionUtil.SqlSession();
  10. //获取Mapper
  11. StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
  12. public List<Student> selectAll() {
  13. //获取mapper接口中查看所有的方法
  14. List<Student> list=mapper.selectAll();
  15. //释放资源
  16. sqlSession.close();
  17. //返回到Servlet
  18. return list;
  19. }
  20. public void addServlet(Student student) {
  21. //获取mapper中添加的方法
  22. mapper.addServlet(student);
  23. //提交事务
  24. sqlSession.commit();
  25. //释放资源
  26. sqlSession.close();
  27. }
  28. public void deleteById(int id) {
  29. //获取mapper中删除的方法
  30. mapper.deleteById(id);
  31. //提交事务
  32. sqlSession.commit();
  33. sqlSession.close();
  34. }
  35. public Student selectById(int id) {
  36. //获取mapper中根据id查找的方法
  37. Student student=mapper.selectById(id);
  38. sqlSession.close();
  39. return student;
  40. }
  41. public void update(Student student) {
  42. //获取mapper中的修改方法
  43. mapper.update(student);
  44. //提交事务
  45. sqlSession.commit();
  46. sqlSession.close();
  47. }
  48. }

mapper层: 

  1. package com.hsd.mapper;
  2. import com.hsd.entity.Student;
  3. import java.util.List;
  4. public interface StudentMapper {
  5. //查看所有
  6. List<Student> selectAll();
  7. void addServlet(Student student);
  8. void deleteById(int id);
  9. Student selectById(int id);
  10. void update(Student student);
  11. }

 StudentMapper.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.hsd.mapper.StudentMapper">
  6. <select id="selectAll" resultType="com.hsd.entity.Student">
  7. select * from student;
  8. </select>
  9. <insert id="addServlet">
  10. insert into student value (null,#{name},#{age},#{sex},#{hobby},#{time});
  11. </insert>
  12. <delete id="deleteById">
  13. delete from student where id=#{id};
  14. </delete>
  15. <select id="selectById" resultType="com.hsd.entity.Student">
  16. select * from student where id=#{id};
  17. </select>
  18. <update id="update">
  19. update student set name=#{name},age=#{age},sex=#{sex},hobby=#{hobby},time=#{time} where id=#{id};
  20. </update>
  21. </mapper>

添加:
     1.前端页面add.jsp
     2.后端代码:
       (1)接收客户端请求(添加的数据)
       (2)把接收的数据封装到实体类
       (3)调用service中的添加方法
       (4)添加完毕后返回首页。

          controller层:(接收请求、响应结果)
           1、接收客户端请求(添加的数据)
           2、把接收的数据封装到实体类
           3、调用service中的添加方法
           4、添加成功的话跳转到首页
          service层:(业务逻辑)
           1、获取工具类中的SqlSession对象
           2、获取Mapper
           3、获取mapper中添加的方法
           mapper层:
            mapper接口:定义对应的接口
            mapper.xml:写对应的sql语句
1.前端页面add.jsp:
  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: 30868
  4. Date: 2022/10/29
  5. Time: 8:54
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>添加页面</title>
  12. </head>
  13. <body>
  14. <form action="AddServlet" method="get">
  15. 姓名:<input type="text" name="name"><br>
  16. 年龄:<input type="text" name="age"><br>
  17. 性别:<input type="radio" name="sex" value="1">男
  18. <input type="radio" name="sex" value="0">女<br>
  19. 爱好:<input type="checkbox" name="hobby" value="吃">吃
  20. <input type="checkbox" name="hobby" value="喝">喝
  21. <input type="checkbox" name="hobby" value="玩">玩
  22. <input type="checkbox" name="hobby" value="乐">乐<br>
  23. 日期:<input type="date" name="time"><br>
  24. <input type="reset" value="重置"><br>
  25. <input type="submit" value="添加"><br>
  26. </form>
  27. </body>
  28. </html>

 controller层:AddServlet类:

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.util.Arrays;
  11. @WebServlet("/AddServlet")
  12. public class AddServlet extends HttpServlet {
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //获取StudentService
  16. StudentService studentService = new StudentService();
  17. String name=req.getParameter("name");
  18. String age=req.getParameter("age");
  19. String sex=req.getParameter("sex");
  20. //多选框实现添加用数组
  21. String[] hobby=req.getParameterValues("hobby");
  22. String time=req.getParameter("time");
  23. //将获取到的数据封装到对应的实体类中
  24. //Student student = new Student(Integer.parseInt(null),name,Integer.parseInt(age),sex,hobby,time);
  25. Student student = new Student();
  26. student.setName(name);
  27. student.setAge(Integer.parseInt(age));
  28. student.setSex(sex);
  29. student.setHobby(Arrays.toString(hobby));
  30. student.setTime(time);
  31. //调用StudentService中的添加方法,将添加的数据传回去,添加不需要返回值
  32. studentService.addServlet(student);
  33. //转发到首页
  34. req.getRequestDispatcher("StudentServlet").forward(req,resp);
  35. }
  36. }
service层:在StudentService中写入添加方法。
mapper层:在StudentMapper中写入添加方法,在StudentMapper.xml中写入添加的sql语句。
删除:
      后端代码:
       (1)创建studentService对象
       (2)接收客户端请求(根据id删除)
       (3)删除后返回首页

          controller层:(接收请求、响应结果)
           1、接收客户端请求(根据id删除)
           2、调用service中的删除方法
           3、删除成功的话跳转到首页
          service层:(业务逻辑)
           1、获取工具类中的SqlSession对象
           2、获取Mapper
           3、获取mapper中删除的方法
           mapper层:
            mapper接口:定义对应的接口
            mapper.xml:写对应的sql语句

 deleteByIdServlet类:

  1. package com.hsd.controller;
  2. import com.hsd.service.StudentService;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. @WebServlet("/deleteByIdServlet")
  10. public class deleteByIdServlet extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13. //创建studentService对象
  14. StudentService studentService = new StudentService();
  15. //获取id,根据id删除
  16. String id=req.getParameter("id");
  17. //删除不需要返回值
  18. studentService.deleteById(Integer.parseInt(id));
  19. //删除后返回首页
  20. req.getRequestDispatcher("StudentServlet").forward(req,resp);
  21. }
  22. }

 service层:在StudentService中写入根据id查找和删除的方法。

mapper层:在StudentMapper中写入根据id查找的方法和删除的方法,在StudentMapper.xml中写入根据id查找和删除的sql语句。

修改:
     1.前端页面update.jsp:
        进行数据回显
     2.后端代码:
       获取要修改的数据:
       (1)获取studentService类中的获取id的方法
       (2)将数据存到req域中,通过setAttribute发送给回显页面,方便回显数据
       (3)若找到数据,跳转到修改页面,进行回显
       对获取的数据进行修改
       (1)接收修改后的数据
       (2)把修改后的数据封装到实体类student中
       (3)调用studentService类中的修改方法
       (4)修改后跳转到主页面

          controller层:(接收请求、响应结果)
           1、接收客户端请求(根据id修改)
           2、调用service中的修改方法
           3、修改成功的话跳转到首页
          service层:(业务逻辑)
           1、获取工具类中的SqlSession对象
           2、获取Mapper
           3、获取mapper中修改的方法
           mapper层:
            mapper接口:定义对应的接口
            mapper.xml:写对应的sql语句

 1.前端页面update.jsp:

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
  3. <%--
  4. Created by IntelliJ IDEA.
  5. User: 30868
  6. Date: 2022/10/29
  7. Time: 14:37
  8. To change this template use File | Settings | File Templates.
  9. --%>
  10. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  11. <html>
  12. <head>
  13. <title>修改页面</title>
  14. </head>
  15. <body>
  16. <form action="UpdateServlet" method="get">
  17. 编号:<input type="text" name="id" value="${s.id}"><br>
  18. 姓名:<input type="text" name="name" value="${s.name}"><br>
  19. 年龄:<input type="text" name="age" value="${s.age}"><br>
  20. 性别:<input type="radio" name="sex" value="1" <c:if test="${s.sex==1}"></c:if> checked="checked">男
  21. <input type="radio" name="sex" value="0" <c:if test="${s.sex==0}"></c:if> checked="checked">女<br>
  22. 爱好:<input type="checkbox" name="hobby" value="吃" <c:if test="${fn:contains(s.hobby,'吃' )}">checked="checked"</c:if>>吃
  23. <input type="checkbox" name="hobby" value="喝" <c:if test="${fn:contains(s.hobby,'喝' )}">checked="checked"</c:if>>喝
  24. <input type="checkbox" name="hobby" value="玩" <c:if test="${fn:contains(s.hobby,'玩' )}">checked="checked"</c:if>>玩
  25. <input type="checkbox" name="hobby" value="乐" <c:if test="${fn:contains(s.hobby,'乐' )}">checked="checked"</c:if>>乐<br>
  26. 日期:<input type="date" name="time" value="${s.time}"><br>
  27. <input type="reset" value="重置"><br>
  28. <input type="submit" value="修改"><br>
  29. </form>
  30. </body>
  31. </html>

 2.后端代码:controller层:selectByIdServlet类:修改时,先根据id回显。

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. @WebServlet("/selectByIdServlet")
  11. public class selectByIdServlet extends HttpServlet {
  12. @Override
  13. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  14. //获取studentService对象
  15. StudentService studentService = new StudentService();
  16. //获取id
  17. String id = req.getParameter("id");
  18. //获取studentService类中的获取id的方法
  19. Student student=studentService.selectById(Integer.parseInt(id));
  20. //将数据存到req域中,通过setAttribute发送给回显页面,方便回显数据
  21. req.setAttribute("s",student);
  22. //若找到数据,跳转到修改页面,进行回显
  23. req.getRequestDispatcher("update.jsp").forward(req,resp);
  24. }
  25. }

UpdateServlet类: 

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.util.Arrays;
  11. @WebServlet("/UpdateServlet")
  12. public class UpdateServlet extends HttpServlet {
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //获取studentService对象
  16. StudentService studentService = new StudentService();
  17. //接收修改后的数据
  18. String id = req.getParameter("id");
  19. String name = req.getParameter("name");
  20. String age = req.getParameter("age");
  21. String sex = req.getParameter("sex");
  22. //多选框用数组类型接收数据
  23. String[] hobby = req.getParameterValues("hobby");
  24. String time = req.getParameter("time");
  25. //把修改后的数据封装到实体类student中
  26. Student student = new Student();
  27. student.setId(Integer.parseInt(id));
  28. student.setName(name);
  29. student.setAge(Integer.parseInt(age));
  30. student.setSex(sex);
  31. //将数组类型转换为String
  32. student.setHobby(Arrays.toString(hobby));
  33. student.setTime(time);
  34. //调用studentService类中的修改方法,修改不需要返回值
  35. studentService.update(student);
  36. //修改后跳转到主页面
  37. req.getRequestDispatcher("StudentServlet").forward(req,resp);
  38. }
  39. }

 service层:在StudentService中写入根据id修改的方法。

mapper层:在StudentMapper中写入根据id修改的方法,在StudentMapper.xml中写入根据id修改的sql语句。

页面效果:

 

 

功能完善 

1、选中删除功能

2、根据姓名查询功能

3、根据年龄区间查询功能

:student.jsp页面:

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%--
  3. Created by IntelliJ IDEA.
  4. User: 30868
  5. Date: 2022/10/28
  6. Time: 8:44
  7. To change this template use File | Settings | File Templates.
  8. --%>
  9. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  10. <html>
  11. <head>
  12. <title>展示页面</title>
  13. </head>
  14. <body>
  15. <center>
  16. <h1>展示页面</h1>
  17. <h2>欢迎${messageModel.object.username}登录成功!</h2>
  18. <a href="add.jsp">添加</a>
  19. <form action="SelectByNameServlet" method="get">
  20. 根据姓名查询:<input type="text" name="name" value="${s.name}">
  21. <input type="submit" value="查询">
  22. </form>
  23. <form action="SelectByAgeServlet" method="get">
  24. 根据年龄区间查询:<input type="text" name="age1" value="${s.age1}">---<input type="text" name="age2" value="${s.age2}">
  25. <input type="submit" value="查询">
  26. </form>
  27. <table border="1px" cellspacing="0">
  28. <tr>
  29. <%--th:加粗居中--%>
  30. <th>选项</th>
  31. <th>编号</th>
  32. <th>姓名</th>
  33. <th>年龄</th>
  34. <th>性别</th>
  35. <th>爱好</th>
  36. <th>日期</th>
  37. <th>操作</th>
  38. </tr>
  39. <%--c:forEach :循环--%>
  40. <c:forEach items="${list}" var="l">
  41. <tr>
  42. <td>
  43. <input type="checkbox" name="option" value="${l.id}">
  44. </td>
  45. <td>${l.id}</td>
  46. <td>${l.name}</td>
  47. <td>${l.age}</td>
  48. <td>
  49. <c:if test="${l.sex==1}">
  50. </c:if>
  51. <c:if test="${l.sex!=1}">
  52. </c:if>
  53. </td>
  54. <td>${l.hobby}</td>
  55. <td>${l.time}</td>
  56. <td>
  57. <%--修改根据id--%>
  58. <a href="selectByIdServlet?id=${l.id}">修改</a>
  59. <%--删除根据id--%>
  60. <a href="deleteByIdServlet?id=${l.id}">删除</a>
  61. </td>
  62. </tr>
  63. </c:forEach>
  64. </table>
  65. <input type="submit" value="全选" onclick="checkAll()">
  66. <input type="submit" value="全不选" onclick="checkNoAll()">
  67. <input type="submit" value="选中删除" onclick="XDelete()">
  68. </center>
  69. </body>
  70. <script type="text/javascript">
  71. /*在js中获取点击框*/
  72. var option=document.getElementsByName("option");
  73. //全选
  74. function checkAll() {
  75. for (let i = 0; i < option.length; i++) {
  76. option[i].checked=true;
  77. }
  78. }
  79. //全不选
  80. function checkNoAll() {
  81. for (let i = 0; i < option.length; i++) {
  82. option[i].checked=false;
  83. }
  84. }
  85. //选中删除
  86. function XDelete() {
  87. //定义一个id变量,初始化值为null,用来存储选中的数据
  88. var id="";
  89. //循环多选框
  90. for (let i = 0; i < option.length; i++) {
  91. if(option[i].checked==true)
  92. {
  93. //选中的id赋值给id变量,用逗号分隔开
  94. id=id+option[i].value+","
  95. }
  96. }
  97. location.href="XDeleteServlet?id="+id;
  98. }
  99. </script>
  100. </html>

1、选中删除功能 

controller层:XDeleteServlet类:

  1. package com.hsd.controller;
  2. import com.hsd.service.StudentService;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. @WebServlet("/XDeleteServlet")
  10. public class XDeleteServlet extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13. //创建StudentService对象
  14. StudentService studentService = new StudentService();
  15. //接收页面发送过来的id
  16. String ids=req.getParameter("id");
  17. //查看是否可以获得选中的id
  18. System.out.println(ids);
  19. //调用service中的方法
  20. studentService.xDelete(ids);
  21. //删除成功后返回首页
  22. req.getRequestDispatcher("StudentServlet").forward(req,resp);
  23. }
  24. }

 service层:StudentService类中添加方法:

  1. public void xDelete(String ids){
  2. //查看是否可以获得选中的id
  3. System.out.println(ids);
  4. //字符串分割
  5. String[] split = ids.split(",");
  6. //循环删除,将分割后的id进行循环(选中多条)
  7. for (String id : split) {
  8. //调用mapper中的接口
  9. mapper.xDelete(Integer.parseInt(id));
  10. }
  11. //提交事务
  12. sqlSession.commit();
  13. sqlSession.close();
  14. }

 mapper层:在StudentMapper接口类和xml中添加方法

  1. package com.hsd.mapper;
  2. import com.hsd.entity.Student;
  3. import java.util.List;
  4. public interface StudentMapper {
  5. //查看所有
  6. List<Student> selectAll();
  7. void addServlet(Student student);
  8. void deleteById(int id);
  9. Student selectById(int id);
  10. void update(Student student);
  11. void xDelete(int id);
  12. }
  1. <delete id="xDelete">
  2. delete from student where id = #{id}
  3. </delete>

页面效果:选中id为12,14的删除

 

 2、根据姓名查询功能

 controller层:SelectByNameServlet类

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.util.List;
  11. @WebServlet("/SelectByNameServlet")
  12. public class SelectByNameServlet extends HttpServlet {
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //获取StudentService对象
  16. StudentService studentService = new StudentService();
  17. //获取页面中的name值
  18. String name = req.getParameter("name");
  19. //查看是否获取页面输入的name
  20. //System.out.println(name);
  21. Student student=new Student();
  22. student.setName(name);
  23. //调用selectByName方法
  24. List<Student> list=studentService.selectByName(student);
  25. //将拿到的数据添加到req中
  26. req.setAttribute("list",list);
  27. //通过Session将查找的数据转发到页面
  28. req.setAttribute("s",student);
  29. //转发到展示页面
  30. req.getRequestDispatcher("student.jsp").forward(req,resp);
  31. }
  32. }

 service层:StudentService类中添加方法: 

  1. public List<Student> selectByName(Student student) {
  2. //调用mapper中的方法
  3. List<Student> list=mapper.selectByName(student);
  4. //提交事务
  5. sqlSession.commit();
  6. sqlSession.close();
  7. return list;
  8. }

  mapper层:在StudentMapper接口类和xml中添加方法

  1. package com.hsd.mapper;
  2. import com.hsd.entity.Student;
  3. import java.util.List;
  4. public interface StudentMapper {
  5. //查看所有
  6. List<Student> selectAll();
  7. void addServlet(Student student);
  8. void deleteById(int id);
  9. Student selectById(int id);
  10. void update(Student student);
  11. void xDelete(int id);
  12. List<Student> selectByName(Student student);
  13. List<Student> selectByAge(Student student);
  14. }

 根据姓名模糊查询:

  1. <select id="selectByName" resultType="com.hsd.entity.Student" parameterType="com.hsd.entity.Student">
  2. select * from student where name like concat('%',#{name},'%')
  3. </select>

页面效果:查询名字含‘三’的所有有关信息 

 

3、根据年龄区间查询功能 

 controller层:SelectByAgeServlet类 

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.util.List;
  11. @WebServlet("/SelectByAgeServlet")
  12. public class SelectByAgeServlet extends HttpServlet {
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //
  16. StudentService studentService = new StudentService();
  17. //
  18. String age1=req.getParameter("age1");
  19. String age2=req.getParameter("age2");
  20. //
  21. Student student = new Student();
  22. student.setAge1(Integer.parseInt(age1));
  23. student.setAge2(Integer.parseInt(age2));
  24. //
  25. //
  26. List<Student> list=studentService.selectByAge(student);
  27. //将拿到的数据添加到req中,返回值写list的原因是把数据返回
  28. req.setAttribute("list",list);
  29. req.setAttribute("s",student);
  30. //
  31. req.getRequestDispatcher("/student.jsp").forward(req,resp);
  32. }
  33. }

 service层:StudentService类中添加方法:  

  1. public List<Student> selectByAge(Student student) {
  2. //调用mapper中的方法
  3. List<Student> list=mapper.selectByAge(student);
  4. //提交事务
  5. sqlSession.commit();
  6. sqlSession.close();
  7. return list;
  8. }

   mapper层:在StudentMapper接口类和xml中添加方法

  1. package com.hsd.mapper;
  2. import com.hsd.entity.Student;
  3. import java.util.List;
  4. public interface StudentMapper {
  5. //查看所有
  6. List<Student> selectAll();
  7. void addServlet(Student student);
  8. void deleteById(int id);
  9. Student selectById(int id);
  10. void update(Student student);
  11. void xDelete(int id);
  12. List<Student> selectByName(Student student);
  13. List<Student> selectByAge(Student student);
  14. }

 根据年龄区间查询:

  1. <select id="selectByAge" resultType="com.hsd.entity.Student" parameterType="com.hsd.entity.Student">
  2. select * from student
  3. /*循环判断,where标签在MyBatis中是循环*/
  4. /*if标签在MyBatis中是判断*/
  5. <where>
  6. /*在MyBatis中,在where循环中使用and的前提,必须是还有一次条件,如果只有一次条件就不允许使用and,可以写一个模拟条件*/
  7. sex in('0','1')/*模拟条件*/
  8. /*判断输入的不是空值*/
  9. <if test="age1 != null and age1 != ''">
  10. /*在MyBatis中,大于号和小于号是由(&gt; &lt;)代替的*/
  11. and age &gt;#{age1}
  12. </if>
  13. <if test="age2!=null and age2!=''">
  14. /*在MyBatis中,大于号和小于号是由(gt; lt;)代替的*/
  15. and age &lt;#{age2}
  16. </if>
  17. </where>
  18. </select>

 页面效果:查询年龄在17到20的所有信息

 

进行多条件查询:

将2、根据age查询和3、根据name查询联合起来,进行多条件查询,以下是在2、3的基础上进行的完善。文末会介绍直接进行多条件查询,不用写2、3。

修改的页面如下:student.jsp页面

  1. <%-- <form action="SelectByNameServlet" method="get">
  2. 根据姓名查询:<input type="text" name="name" value="${s.name}">
  3. <input type="submit" value="查询">
  4. </form>
  5. <form action="SelectByAgeServlet" method="get">
  6. 根据年龄区间查询:<input type="text" name="age1" value="${s.age1}">---<input type="text" name="age2" value="${s.age2}">
  7. <input type="submit" value="查询">--%>
  8. <form action="SelectNameAndAgeServlet" method="get">
  9. 根据姓名查询:<input type="text" name="name" value="${s.name}">
  10. 根据年龄区间查询:<input type="text" name="age1" value="${s.age1}">---<input type="text" name="age2" value="${s.age2}">
  11. <input type="submit" value="查询">
  12. </form>
  13. <%--</form>--%>

 在entity层的vo包下添加一个StudentVo类:

  1. package com.hsd.entity.vo;
  2. public class StudentVo {
  3. private String name;//根据姓名查询的字段
  4. private String age1;//根据年龄区间查询开始的年龄字段
  5. private String age2;//根据年龄区间查询结束的年龄字段
  6. public StudentVo() {
  7. }
  8. public StudentVo(String name, String age1, String age2) {
  9. this.name = name;
  10. this.age1 = age1;
  11. this.age2 = age2;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public String getAge1() {
  20. return age1;
  21. }
  22. public void setAge1(String age1) {
  23. this.age1 = age1;
  24. }
  25. public String getAge2() {
  26. return age2;
  27. }
  28. public void setAge2(String age2) {
  29. this.age2 = age2;
  30. }
  31. }

 将Student类进行修改:将参数age1和age2删除,同时将该类中与这两个参数有关的get,set方法及有参无参方法删除。

修改SelectByAgeServlet类: 

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.entity.vo.StudentVo;
  4. import com.hsd.service.StudentService;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.util.List;
  12. @WebServlet("/SelectByAgeServlet")
  13. public class SelectByAgeServlet extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  16. //
  17. StudentService studentService = new StudentService();
  18. //
  19. String age1=req.getParameter("age1");
  20. String age2=req.getParameter("age2");
  21. //
  22. /* Student student = new Student();
  23. if(age1!=null&&age2!=null){
  24. student.setAge1(Integer.parseInt(age1));
  25. student.setAge2(Integer.parseInt(age2));
  26. }*/
  27. //
  28. //
  29. /* List<Student> list=studentService.selectByAge(student);
  30. //将拿到的数据添加到req中,返回值写list的原因是把数据返回
  31. req.setAttribute("list",list);
  32. req.setAttribute("s",student);*/
  33. //将接受的值存到Vo的实体类中
  34. StudentVo studentVo = new StudentVo();
  35. studentVo.setAge1(age1);
  36. studentVo.setAge2(age2);
  37. // 获取StudentService中根据姓名查询的方法,返回值写List集合的原因,就是需要返回所有的数据
  38. List<Student> list = studentService.selectByAge(studentVo);
  39. // 给查询所有的数据全部添加到req中
  40. req.setAttribute("list",list);
  41. // 拿到的数据添加到req中
  42. req.setAttribute("s",studentVo);
  43. //
  44. req.getRequestDispatcher("/student.jsp").forward(req,resp);
  45. }
  46. }

 修改SelectByNameServlet类:

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.entity.vo.StudentVo;
  4. import com.hsd.service.StudentService;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.util.List;
  12. @WebServlet("/SelectByNameServlet")
  13. public class SelectByNameServlet extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  16. //获取StudentService对象
  17. StudentService studentService = new StudentService();
  18. //获取页面中的name值
  19. String name = req.getParameter("name");
  20. //查看是否获取页面输入的name
  21. //System.out.println(name);
  22. /* Student student=new Student();
  23. student.setName(name);
  24. //调用selectByName方法
  25. List<Student> list=studentService.selectByName(student);
  26. //将拿到的数据添加到req中
  27. req.setAttribute("list",list);
  28. //通过Session将查找的数据转发到页面
  29. req.setAttribute("s",student);*/
  30. StudentVo studentVo = new StudentVo();
  31. studentVo.setName(name);
  32. // 获取StudentService中根据姓名查询的方法,返回值写List集合的原因,就是需要返回所有的数据
  33. List<Student> list = studentService.selectByName(studentVo);
  34. // 给查询所有的数据全部添加到req中
  35. req.setAttribute("list",list);
  36. // 给根据姓名查询拿到的数据添加到req中
  37. req.setAttribute("s",studentVo);
  38. //转发到展示页面
  39. req.getRequestDispatcher("student.jsp").forward(req,resp);
  40. }
  41. }

 在controller层加一个类:SelectNameAndAgeServlet类

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.entity.vo.StudentVo;
  4. import com.hsd.service.StudentService;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.util.List;
  12. @WebServlet("/SelectNameAndAgeServlet")
  13. public class SelectNameAndAgeServlet extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  16. StudentService studentService = new StudentService();
  17. //
  18. String name = req.getParameter("name");
  19. String age1=req.getParameter("age1");
  20. String age2=req.getParameter("age2");
  21. StudentVo studentVo = new StudentVo();
  22. studentVo.setName(name);
  23. studentVo.setAge1(age1);
  24. studentVo.setAge2(age2);
  25. List<Student> list=studentService.selectByNameAndAge(studentVo);
  26. req.setAttribute("list",list);
  27. req.setAttribute("s",studentVo);
  28. //
  29. req.getRequestDispatcher("/student.jsp").forward(req,resp);
  30. }
  31. }

 修改StudentService:

  1. public List<Student> selectByName(StudentVo studentVo) {
  2. //调用mapper中的方法
  3. List<Student> list=mapper.selectByName(studentVo);
  4. //提交事务
  5. sqlSession.commit();
  6. sqlSession.close();
  7. return list;
  8. }
  9. public List<Student> selectByAge(StudentVo studentVo) {
  10. //调用mapper中的方法
  11. List<Student> list=mapper.selectByAge(studentVo);
  12. //提交事务
  13. sqlSession.commit();
  14. sqlSession.close();
  15. return list;
  16. }
  17. public List<Student> selectByNameAndAge(StudentVo studentVo) {
  18. List<Student> list=mapper.selectByNameAndAge(studentVo);
  19. //提交事务
  20. sqlSession.commit();
  21. sqlSession.close();
  22. return list;
  23. }

 修改StudentMapper:

  1. List<Student> selectByName(StudentVo studentVo);
  2. // 根据age区间条件查询的方法
  3. List<Student> selectByAge(StudentVo studentVo);
  4. // 多条件查询的方法
  5. List<Student> selectByNameAndAge(StudentVo studentVo);
  1. <select id="selectByName" resultType="com.hsd.entity.Student" parameterType="com.hsd.entity.vo.StudentVo">
  2. select * from student where name like concat('%',#{name},'%')
  3. </select>
  4. <select id="selectByAge" resultType="com.hsd.entity.Student" parameterType="com.hsd.entity.vo.StudentVo">
  5. select * from student
  6. /*循环判断,where标签在MyBatis中是循环*/
  7. /*if标签在MyBatis中是判断*/
  8. <where>
  9. /*在MyBatis中,在where循环中使用and的前提,必须是还有一次条件,如果只有一次条件就不允许使用and,可以写一个模拟条件*/
  10. sex in('0','1')/*模拟条件*/
  11. /*判断输入的不是空值*/
  12. <if test="age1 != null">
  13. /*在MyBatis中,大于号和小于号是由(&gt; &lt;)代替的*/
  14. and age &gt;#{age1}
  15. </if>
  16. <if test="age2!=null">
  17. /*在MyBatis中,大于号和小于号是由(gt; lt;)代替的*/
  18. and age &lt;#{age2}
  19. </if>
  20. </where>
  21. </select>
  22. <select id="selectByNameAndAge" parameterType="com.hsd.entity.vo.StudentVo" resultType="com.hsd.entity.Student">
  23. select * from student
  24. <where>
  25. <if test="name!=null||name!=''">
  26. name like concat('%',#{name},'%')
  27. </if>
  28. <if test="age1!=null and age1!=''">
  29. and age &gt;#{age1}
  30. </if>
  31. <if test="age2!=null and age2!=''">
  32. /*在MyBatis中,大于号和小于号是由(gt; lt;)代替的*/
  33. and age &lt;#{age2}
  34. </if>
  35. </where>
  36. </select>

页面效果: 

直接进行多条件查询,不用写以上的2、3 步

以下用另一个项目进行展示。整体架构和上面的项目一致。

  1. <form action="SelectGnameAndPriceServlet" method="get">
  2. 根据商品名称查询:<input type="text" name="gname" value="${g.gname}"><br>
  3. 根据价格区间查询:<input type="text" name="price1" value="${g.price1}">---<input type="text" name="price2" value="${g.price2}"><br>
  4. <input type="submit" value="查询">
  5. </form>

  在entity层的vo包下添加一个GoodsVo类:

  1. package com.hsd.entity.vo;
  2. public class GoodsVo {
  3. private String gname;
  4. private String price1;
  5. private String price2;
  6. public GoodsVo() {
  7. }
  8. public GoodsVo(String gname, String price1, String price2) {
  9. this.gname = gname;
  10. this.price1 = price1;
  11. this.price2 = price2;
  12. }
  13. public String getGname() {
  14. return gname;
  15. }
  16. public void setGname(String gname) {
  17. this.gname = gname;
  18. }
  19. public String getPrice1() {
  20. return price1;
  21. }
  22. public void setPrice1(String price1) {
  23. this.price1 = price1;
  24. }
  25. public String getPrice2() {
  26. return price2;
  27. }
  28. public void setPrice2(String price2) {
  29. this.price2 = price2;
  30. }
  31. }

此时,Goods类中的参数不需要进行任何修改,因为在后面的操作中,涉及的都是GoodsVo类。

在controller层添加一个SelectByGnameAndPrice类: 

  1. package com.hsd.controller;
  2. import com.hsd.entity.Goods;
  3. import com.hsd.entity.vo.GoodsVo;
  4. import com.hsd.service.GoodsService;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.util.List;
  12. @WebServlet("/SelectGnameAndPriceServlet")
  13. public class SelectGnameAndPriceServlet extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  16. GoodsService goodsService = new GoodsService();
  17. //
  18. String gname = req.getParameter("gname");
  19. String price1=req.getParameter("price1");
  20. String price2=req.getParameter("price2");
  21. GoodsVo goodsVo = new GoodsVo();
  22. goodsVo.setGname(gname);
  23. goodsVo.setPrice1(price1);
  24. goodsVo.setPrice2(price2);
  25. List<GoodsVo> list=goodsService.selectByGnameAndPrice(goodsVo);
  26. //将查询信息展示到页面上
  27. req.setAttribute("list",list);
  28. //回显
  29. req.setAttribute("g",goodsVo);
  30. //
  31. req.getRequestDispatcher("/goods.jsp").forward(req,resp);
  32. }
  33. }

 GoodsService类:添加一个selectByGnameAndPrice方法

  1. public List<GoodsVo> selectByGnameAndPrice(GoodsVo goodsVo) {
  2. List<GoodsVo> list=mapper.selectByGnameAndPrice(goodsVo);
  3. //提交事务
  4. sqlSession.commit();
  5. sqlSession.close();
  6. return list;
  7. }

 GoodsMapper:添加selectByGnameAndPrice方法

 List<GoodsVo> selectByGnameAndPrice(GoodsVo goodsVo);

 GoodsMapper.xml:添加sql语句

  1. <select id="selectByGnameAndPrice" parameterType="com.hsd.entity.vo.GoodsVo" resultType="com.hsd.entity.Goods">
  2. select * from goods
  3. <where>
  4. <if test="gname!=null||gname!=''">
  5. gname like concat('%',#{gname},'%')
  6. </if>
  7. <if test="price1!=null and price1!=''">
  8. and price &gt;#{price1}
  9. </if>
  10. <if test="price2!=null and price2!=''">
  11. /*在MyBatis中,大于号和小于号是由(gt; lt;)代替的*/
  12. and price &lt;#{price2}
  13. </if>
  14. </where>
  15. </select>

对以上项目的修改: 

 一、以上的StudentVo类中age1和age2都是String类型的,若写为int类型,当根据年龄区间进行搜索时,输入框什么都不输入的话,想要的结果是查询所有,但int类型会报500的错误。解决方法如下:

在转换类型时添加一个判断语句即可。

修改之前的500错误如下: 

1、将StudentMapper.xml中的语句进行修改,如下: 

  1. <select id="selectByNameAndAge" parameterType="com.hsd.entity.vo.StudentVo" resultType="com.hsd.entity.Student">
  2. select * from student
  3. <where>
  4. <if test="name!=null and name!=''">
  5. name like concat('%',#{name},'%')
  6. </if>
  7. <if test="age1!=null and age1!=0">
  8. and age &gt;#{age1}
  9. </if>
  10. <if test="age2!=null and age2!=0">
  11. /*在MyBatis中,大于号和小于号是由(gt; lt;)代替的*/
  12. and age &lt;#{age2}
  13. </if>
  14. </where>
  15. </select>

2、 将SelectByNameAndAgeServlet中的语句进行修改,转换类型时,加一个判断。如下:

  1. //判断age不是null且不是空串就进入if,反之没有输入的话,就不走这个查询条件。
  2. if(age1!=null&&!"".equals(age1)){
  3. student.setAge1(Integer.parseInt(age1));
  4. }
  5. if(age2!=null&&!"".equals(age2)){
  6. student.setAge2(Integer.parseInt(age2));
  7. }

二、当进行选中删除时,什么都不选直接点击选中删除按钮时,会报500错误。对其进行修改完善:

给选中删除函数加一个判断,若一条都没选中,则弹窗提示。

 1、引入jquery:

<script src="js/jquery-3.4.1.js"></script>

 2、给选中删除函数加一个判断,若一条都没选中,则弹窗提示。修改如下:

  1. //选中删除
  2. function XDelete() {
  3. if($("input[name=option]:checked").length==0){
  4. alert("至少选中一条数据");
  5. return;
  6. }
  7. //定义一个id变量,初始化值为null,用来存储选中的数据
  8. var id="";
  9. //循环多选框
  10. for (let i = 0; i < option.length; i++) {
  11. if(option[i].checked==true)
  12. {
  13. //选中的id赋值给id变量,用逗号分隔开
  14. id=id+option[i].value+","
  15. }
  16. }
  17. location.href="XDeleteServlet?id="+id;
  18. }

三、添加一个过滤器:当没有登录直接访问主页面和添加页面时,提示未登录。必须登录后才能进行其他操作。

浏览器一旦启动,当登录过一次后,再返回到登录之前的页面,在url栏输入StudentServlet或add.jsp时,不会再提示未登录,可以直接进入。
可以简单理解为:在浏览器启动时,过滤器只会起一次过滤作用。

1、 在controller层添加一个filter包,在包下创建一个RightConfig类:

  1. package com.hsd.filter;
  2. import com.hsd.entity.vo.MessageModel;
  3. import javax.servlet.*;
  4. import javax.servlet.annotation.WebFilter;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.servlet.http.HttpSession;
  9. import java.io.IOException;
  10. //拦截器的工具类
  11. @WebFilter(value = {"/StudentServlet","/add.jsp"})
  12. public class RightConfig implements Filter {
  13. @Override
  14. public void init(FilterConfig filterConfig) throws ServletException {
  15. }
  16. @Override
  17. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  18. //过滤器(拦截器)
  19. //1.先向下转型(强制类型转换),获取HttpServletRequest
  20. HttpServletRequest request= (HttpServletRequest) servletRequest;
  21. HttpServletResponse response= (HttpServletResponse) servletResponse;
  22. //2.获取session域
  23. HttpSession session=request.getSession();
  24. //3.通过getAttribute获取到user,返回一个消息模型对象
  25. MessageModel messageModel = (MessageModel) session.getAttribute("user");
  26. //4.判断是否登录
  27. if(messageModel!=null){
  28. //已经登录,释放拦截器
  29. filterChain.doFilter(request,response);
  30. }else{
  31. //没有登录,返回登录页面进行登录
  32. request.setAttribute("msg","未登录,请返回登录");
  33. //后端代码跳转到jsp需加‘/’
  34. request.getRequestDispatcher("user.jsp").forward(request,response);
  35. }
  36. }
  37. @Override
  38. public void destroy() {
  39. }
  40. }

 选择Filter javax.servlet:

 2、修改UserServlet类:

  1. if(messageModel.getCode()==1){
  2. //成功,将消息模型存到req中,并重定向到首页
  3. //获取session信息
  4. HttpSession session=req.getSession();
  5. //把登录的信息存到session中
  6. session.setAttribute("user",messageModel);
  7. //转发(req)
  8. req.getSession().setAttribute("messageModel",messageModel);
  9. //重定向(resp)
  10. //路径不加‘/’
  11. resp.sendRedirect("StudentServlet");
  12. }else

 3、修改user.jsp:添加提示信息:${msg}

<div style="color: red" id="div">${messageModel.msg} ${msg}</div><br>

 实现退出登录功能:两种方法

(1)写一个超链接:

(2)先添加一个超链接:<a href="ExitServlet">退出登录</a>,
然后在controller层中添加一个ExitServlet类

 (1)写一个超链接:

<a href="user.jsp">退出</a>

 效果:

 

 

 

 缺点:
<1>当点击退出时,直接返回到user.jsp,但是username和password的内容仍存在。
<2>退出后,在url输入StudentServlet或add.jsp时,可以直接进入,即:过滤器没起作用。解决办法:
使用(2)实现退出登录。

(2)先添加一个超链接:<a href="ExitServlet">退出登录</a>,
然后在controller层中添加一个ExitServlet类,在该类中实现将(1)中的<1>username和password消除,实现(1)中的<2>过滤器。 

<a href="ExitServlet">退出登录</a>
  1. package com.hsd.controller;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import javax.servlet.http.HttpSession;
  8. import java.io.IOException;
  9. @WebServlet("/ExitServlet")
  10. public class ExitServlet extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13. //获取session中的信息
  14. HttpSession session=req.getSession();
  15. //清空session域
  16. session.invalidate();
  17. req.getRequestDispatcher("user.jsp").forward(req,resp);
  18. }
  19. }

效果: 

 

​​​​​​​ 

 

总结: 

selectByIdServlet类:
(1)在controller层中:
有req.setAttribute("s",student);语句
(2)在service层中:
有return student;语句。
作用:将数据进行回显
如:输入姓名进行查询时,当点击按钮时,填写的数据不会消失。若无返回,则一旦点击
按钮进行查询,在输入框的内容将消失。

StudentServlet类
SelectByAgeServlet类
SelectByNameServlet类
SelectNameAndAgeServlet类

(1)在controller层中:
三者都有req.setAttribute("list",list);语句。
(2)在service层中:
三者的方法都有返回值return list;语句
作用:将拿到的数据存在req域中。
返回值写list集合的原因:就是需要返回所有的数据到页面上展示
如:在根据姓名查询时,当查询到数据时,先将查到的数据存在req中的list中,
然后根据return list;语句将数据展示到页面上,若无返回,则查询到的信息不会在页面上展示。


 

mapper配套:mapper层的接口和.xml中的方法名及sql语句要一致
getParameter:接收前端页面参数

req.setAttribute:将messageModel对象存到req域中
使用getAttribute通过key获取session中的值
req.getParameterValues("hobby");多选框实现添加用数组
student.setHobby(Arrays.toString(hobby));

重定向(resp):resp.sendRedirect("StudentServlet");
转发(req):req.getRequestDispatcher("/user.jsp").forward(req,resp);

重定向和转发的区别?


相同点:页面都会实现跳转
不同点:请求转发时,url不会发生变化 状态码:307
       重定向时,url会发生变化 状态码:302

mapper层:
.xml中
namespace:命名空间,对应Mapper接口的路径
id(必写)对应Mapper接口中的方法名称,parameterType:接口中的方法的参数类型,resultType:实体类。
提交事务:sqlSession.commit():
添加时需要提交,查询时不需要提交。
即:将数据放到数据库时,需要提交事务;从数据库中取出数据时,不需要提交事务
如:在注册用户时,需将用户名和密码放到数据库中,需要提交事务,而在登录时,只是从数据库获取用户名和密码进行比较,不需要提交事务。

原文链接:https://blog.csdn.net/weixin_53748496/article/details/127588971




所属网站分类: 技术文章 > 博客

作者:程序员的人生

链接:http://www.qianduanheidong.com/blog/article/459210/48ab9b01f483441f9d1f/

来源:前端黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

10 0
收藏该文
已收藏

评论内容:(最多支持255个字符)