实验9 JSP访问数据库(二)

打印 上一主题 下一主题

主题 898|帖子 898|积分 2694

目的:
1、认识JDBC的数据库访问模式。
2、掌握预处理语句的利用
实验要求:

  • 利用Tomcat作为Web服务器
  • 通过JDBC访问数据库,实现增删改查功能的实现
  • 要求提交实验陈诉,将代码和实验结果页面截图放入陈诉中

实验内容:
1.编写一个网页,实现根据输入门生姓名的暗昧查询,假如查找不到就显示“查无此人”



StudentQueryServlet.java

这是一个Servlet,负责接收用户的哀求,毗连数据库执行查询,并返回查询结果。
  1. package com.example.servlet;
  2. import java.io.*;
  3. import java.sql.*;
  4. import javax.servlet.*;
  5. import javax.servlet.http.*;
  6. public class StudentQueryServlet extends HttpServlet {
  7.     // JDBC数据库连接配置
  8.     private static final String DB_URL = "jdbc:mysql://localhost:3307/student"; // 替换成你的数据库地址,我这里写的是3307不是3306
  9.     private static final String DB_USER = "root"; // 数据库用户名
  10.     private static final String DB_PASS = "123456"; // 数据库密码
  11.     // 处理GET请求
  12.     @Override
  13.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14.         // 获取用户输入的学生姓名
  15.         String studentName = request.getParameter("studentName");
  16.         // 设置响应内容类型为HTML
  17.         response.setContentType("text/html;charset=UTF-8");
  18.         PrintWriter out = response.getWriter();
  19.         // 默认返回“查无此人”信息
  20.         String result = "查无此人";
  21.         // 连接数据库并执行查询
  22.         try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS)) {
  23.             String sql = "SELECT * FROM students WHERE name LIKE ?"; // SQL模糊查询
  24.             try (PreparedStatement stmt = conn.prepareStatement(sql)) {
  25.                 stmt.setString(1, "%" + studentName + "%"); // 设置模糊查询的姓名
  26.                 ResultSet rs = stmt.executeQuery();
  27.                 // 如果查询到结果,则显示学生信息
  28.                 if (rs.next()) {
  29.                     result = "<h3>查询结果:</h3>";
  30.                     do {
  31.                         result += "<p>姓名:" + rs.getString("name") + "<br>"
  32.                                 + "年龄:" + rs.getInt("age") + "<br>"
  33.                                 + "专业:" + rs.getString("major") + "</p>";
  34.                     } while (rs.next());
  35.                 }
  36.             }
  37.         } catch (SQLException e) {
  38.             e.printStackTrace();
  39.             result = "数据库连接错误";
  40.         }
  41.         // 输出HTML响应
  42.         out.println("<html><body>");
  43.         out.println("<h1>学生信息查询</h1>");
  44.         out.println("<form method='GET' action='StudentQueryServlet'>");
  45.         out.println("请输入学生姓名:<input type='text' name='studentName' />");
  46.         out.println("<input type='submit' value='查询' />");
  47.         out.println("</form>");
  48.         out.println("<hr>");
  49.         out.println(result);
  50.         out.println("</body></html>");
  51.     }
  52. }
复制代码
web.xml 设置

web.xml 是Web应用的设置文件,用于设置Servlet、映射等信息。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  5.          version="3.1">
  6.     <!-- Web应用名称 -->
  7.     <display-name>sample</display-name>
  8.     <!-- Servlet配置 -->
  9.     <servlet>
  10.         <servlet-name>StudentQueryServlet</servlet-name>
  11.         <servlet-class>com.example.servlet.StudentQueryServlet</servlet-class>
  12.         <load-on-startup>1</load-on-startup> <!-- 应用启动时加载 -->
  13.     </servlet>
  14.     <!-- Servlet映射 -->
  15.     <servlet-mapping>
  16.         <servlet-name>StudentQueryServlet</servlet-name>
  17.         <url-pattern>/StudentQueryServlet</url-pattern> <!-- URL访问路径 -->
  18.     </servlet-mapping>
  19.     <!-- 欢迎文件配置 -->
  20.     <welcome-file-list>
  21.         <welcome-file>index.jsp</welcome-file> <!-- 默认首页 -->
  22.     </welcome-file-list>
  23. </web-app>
复制代码
index.jsp 页面

这是用户输入门生姓名并提交查询哀求的页面。
  1. <%@ page contentType="text/html; charset=UTF-8" %>
  2. <!DOCTYPE html>
  3. <html lang="zh-CN">
  4. <head>
  5.     <meta charset="UTF-8">
  6.     <title>学生信息查询</title>
  7. </head>
  8. <body>
  9. <h1>学生信息查询</h1>
  10. <form method="GET" action="StudentQueryServlet">
  11.     <label for="studentName">请输入学生姓名:</label>
  12.     <input type="text" id="studentName" name="studentName" required />
  13.     <input type="submit" value="查询" />
  14. </form>
  15. </body>
  16. </html>
复制代码
JDBC驱动

将MySQL JDBC驱动(mysql-connector-java-x.x.x.jar)放入 WEB-INF/lib 目录中,如许Tomcat在启动时可以找到并加载该驱动。或者也可以放在tomcat的lib下

数据库设置

  1. create database student;
  2. use student;
  3. CREATE TABLE students (
  4.                           id INT AUTO_INCREMENT PRIMARY KEY,
  5.                           name VARCHAR(255) NOT NULL,
  6.                           age INT,
  7.                           major VARCHAR(255)
  8. );
  9. INSERT INTO students (name, age, major) VALUES ('John Doe', 21, 'Computer Science');
  10. INSERT INTO students (name, age, major) VALUES ('Jane Smith', 22, 'Physics');
  11. INSERT INTO students (name, age, major) VALUES ('Alice Johnson', 20, 'Mathematics');
复制代码
 




2.实现门生注册和登录功能,输入门生学号(stuId)和暗码(stuPwd),假如学号不存在,跳转到注册界面,完成注册功能;假如学号存在,暗码匹配显示“登录成功”,否则显示“登录失败”。注:要求用PreparedStatement实现。


java
  1. package com.example.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.HttpServlet;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import java.io.IOException;
  7. import java.sql.*;
  8. public class StudentLogin extends HttpServlet {
  9.     private static final String DB_URL = "jdbc:mysql://localhost:3307/student";
  10.     private static final String DB_USER = "root";
  11.     private static final String DB_PASS = "123456";
  12.     @Override
  13.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14.         String id = request.getParameter("id");
  15.         String pwd = request.getParameter("pwd");
  16.         response.setContentType("text/html;charset=UTF-8");
  17.         String result = null;
  18.         try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS)) {
  19.             String sql = "SELECT * FROM student02 WHERE id = ?";
  20.             try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
  21.                 pstmt.setString(1, id);
  22.                 ResultSet rs = pstmt.executeQuery();
  23.                 if (rs.next()) {
  24.                     String dbPwd = rs.getString("pwd");
  25.                     if (dbPwd.equals(pwd)) {
  26.                         result = "登录成功";
  27.                     } else {
  28.                         result = "密码错误";
  29.                     }
  30.                 } else {
  31.                     result = "学号不存在,请注册";
  32.                     response.sendRedirect("register.jsp"); // 学号不存在,重定向到注册页面
  33.                     return;
  34.                 }
  35.             }
  36.         } catch (SQLException e) {
  37.             e.printStackTrace();
  38.             result = "数据库连接错误";
  39.         }
  40.         response.getWriter().write(result);
  41.     }
  42. }
复制代码
  1. package com.example.servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.HttpServlet;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import java.io.IOException;
  7. import java.sql.*;
  8. public class StudentRegister extends HttpServlet {
  9.     private static final String DB_URL = "jdbc:mysql://localhost:3307/student";
  10.     private static final String DB_USER = "root";
  11.     private static final String DB_PASS = "123456";
  12.     @Override
  13.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14.         String id = request.getParameter("id");
  15.         String pwd = request.getParameter("pwd");
  16.         String name = request.getParameter("name");
  17.         response.setContentType("text/html;charset=UTF-8");
  18.         String result = null;
  19.         try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS)) {
  20.             // 检查学号是否已经存在
  21.             String sql = "SELECT * FROM student02 WHERE id = ?";
  22.             try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
  23.                 pstmt.setString(1, id);
  24.                 ResultSet rs = pstmt.executeQuery();
  25.                 if (rs.next()) {
  26.                     result = "学号已存在,请重新输入";
  27.                     response.getWriter().write(result);
  28.                 } else {
  29.                     // 插入新学生
  30.                     sql = "INSERT INTO student02 (id, pwd, name) VALUES (?, ?, ?)";
  31.                     try (PreparedStatement insertStmt = conn.prepareStatement(sql)) {
  32.                         insertStmt.setString(1, id);
  33.                         insertStmt.setString(2, pwd);
  34.                         insertStmt.setString(3, name);
  35.                         insertStmt.executeUpdate();
  36.                         result = "注册成功";
  37.                         response.getWriter().write(result);
  38.                     }
  39.                 }
  40.             } catch (SQLException e) {
  41.                 e.printStackTrace();
  42.                 result = "数据库连接错误";
  43.                 response.getWriter().write(result);
  44.             }
  45.         } catch (SQLException e) {
  46.             e.printStackTrace();
  47.             result = "数据库连接错误";
  48.             response.getWriter().write(result);
  49.         }
  50.     }
  51. }
复制代码
jsp: 
  1. <%--
  2.   Created by IntelliJ IDEA.
  3.   User: d'd'd
  4.   Date: 2024/11/15
  5.   Time: 14:07
  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. <h1>学生登录</h1>
  15. <form action="StudentLogin" method="post">
  16.     <label for="id">学号:</label>
  17.     <input type="text" id="id" name="id" required>
  18.     <br>
  19.     <label for="pwd">密码:</label>
  20.     <input type="password" id="pwd" name="pwd" required>
  21.     <br>
  22.     <input type="submit" value="登录">
  23. </form>
  24. <a href="register.jsp">没有账号?去注册</a>
  25. </body>
  26. </html>
复制代码
 
  1. <%--
  2.   Created by IntelliJ IDEA.
  3.   User: d'd'd
  4.   Date: 2024/11/15
  5.   Time: 14:08
  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. <h1>学生注册</h1>
  15. <form action="StudentRegister" method="post">
  16.     <label for="id">学号:</label>
  17.     <input type="text" id="id" name="id" required>
  18.     <br>
  19.     <label for="pwd">密码:</label>
  20.     <input type="password" id="pwd" name="pwd" required>
  21.     <br>
  22.     <label for="name">姓名:</label>
  23.     <input type="text" id="name" name="name" required>
  24.     <br>
  25.     <input type="submit" value="注册">
  26. </form>
  27. </body>
  28. </html>
复制代码
 
 web.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  4.          xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  5.          version="3.1">
  6.     <!-- Web应用名称 -->
  7.     <display-name>StudentApp</display-name>
  8.     <!-- 登录Servlet配置 -->
  9.     <servlet>
  10.         <servlet-name>StudentLogin</servlet-name>
  11.         <servlet-class>com.example.servlet.StudentLogin</servlet-class>
  12.         <load-on-startup>1</load-on-startup>
  13.     </servlet>
  14.     <!-- 注册Servlet配置 -->
  15.     <servlet>
  16.         <servlet-name>StudentRegister</servlet-name>
  17.         <servlet-class>com.example.servlet.StudentRegister</servlet-class>
  18.         <load-on-startup>2</load-on-startup>
  19.     </servlet>
  20.     <!-- 登录Servlet映射 -->
  21.     <servlet-mapping>
  22.         <servlet-name>StudentLogin</servlet-name>
  23.         <url-pattern>/StudentLogin</url-pattern>
  24.     </servlet-mapping>
  25.     <!-- 注册Servlet映射 -->
  26.     <servlet-mapping>
  27.         <servlet-name>StudentRegister</servlet-name>
  28.         <url-pattern>/StudentRegister</url-pattern>
  29.     </servlet-mapping>
  30.     <!-- 默认欢迎页面 -->
  31.     <welcome-file-list>
  32.         <welcome-file>login.jsp</welcome-file>
  33.     </welcome-file-list>
  34. </web-app>
复制代码
 

 













用springboot+mybatis完成一个门生登录注册系统,并具有增删改查信息功能

后端

1.创建 Spring Boot 项目,依赖包含:


2.建表

  1. -- 删除数据库
  2.     drop database students;
  3. -- 创建数据库
  4. create database students;
  5. -- 使用数据库
  6. use students;
  7. CREATE TABLE students (
  8.       id INT AUTO_INCREMENT PRIMARY KEY,
  9.       username VARCHAR(50) NOT NULL,
  10.       password VARCHAR(255) NOT NULL,
  11.       full_name VARCHAR(100) NOT NULL,
  12.       email VARCHAR(100) NOT NULL,
  13.       phone VARCHAR(20),
  14.       created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  15. );
复制代码
3.设置数据库

设置 application.properties 来毗连 MySQL 数据库。
  1. spring.application.name=M-stu-sys
  2. # 数据库连接配置
  3. # 这一行指定了数据库的连接URL。
  4. spring.datasource.url=jdbc:mysql://localhost:3306/students?useSSL=false&serverTimezone=UTC
  5. # 用于指定连接数据库的用户名,这里设置为root,你需要将其替换为你实际使用的数据库用户名。
  6. spring.datasource.username=root
  7. # 这是连接数据库的密码,将yourpassword替换为你的数据库密码。
  8. spring.datasource.password=123456
  9. # 明确指定使用的MySQL JDBC驱动类,com.mysql.cj.jdbc.Driver是MySQL 8.0及以上版本使用的驱动类。
  10. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  11. # MyBatis配置
  12. # 告诉MyBatis在哪里查找映射文件(XML文件)。classpath:mapper/*.xml表示在类路径下的mapper目录中查找所有以.xml结尾的文件,这些文件包含了SQL语句和数据库操作的映射定义。
  13. mybatis.mapper-locations=classpath:mapper/*.xml
  14. # 用于设置MyBatis的类型别名包。这样在映射文件中可以使用短名称来代替全限定类名,方便书写SQL语句,提高代码的可读性。例如,如果在com.example.demo.model包中有一个User类,在映射文件中可以直接使用User来代替com.example.demo.model.User。
  15. mybatis.type-aliases-package=org.example.mstusys.entity
  16. # JPA配置(如果项目中用到JPA)
  17. # 这个配置用于控制Hibernate(JPA的实现)如何根据实体类自动创建、更新或验证数据库表结构。update表示根据实体类的定义自动更新数据库表结构,例如添加新的字段、创建新的表等。但在生产环境中使用时要谨慎,因为可能会意外修改数据库结构。其他可选值包括create(每次启动应用时创建新的数据库表,删除旧表,慎用)、create-drop(在应用启动时创建表,关闭时删除表)、validate(只验证表结构是否与实体类定义一致,不进行修改)等。如果你的项目中没有使用JPA,可以删除这一行配置。
  18. spring.jpa.hibernate.ddl-auto=update
复制代码
4.实体类

  1. package org.example.mstusys.entity;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. @Data
  6. @AllArgsConstructor
  7. @NoArgsConstructor
  8. public class Student {
  9.     private Integer id;
  10.     private String username;
  11.     private String password;
  12.     private String fullName;
  13.     private String email;
  14.     private String phone;
  15.     private String createdAt;
  16. }
复制代码

5.创建 Mapper 接口和 XML 文件

创建一个 StudentMapper 接口,并提供 SQL 语句映射。
  1. package org.example.mstusys.mapper;
  2. import org.apache.ibatis.annotations.*;
  3. import org.example.mstusys.entity.Student;
  4. import java.util.List;
  5. @Mapper
  6. public interface StudentMapper {
  7.     // 向students表中插入一条学生记录,插入的字段包括用户名、密码、全名、邮箱和电话,参数为一个Student对象
  8.     @Insert("INSERT INTO students (username, password, full_name, email, phone) " +
  9.             "VALUES (#{username}, #{password}, #{fullName}, #{email}, #{phone})")
  10.     int registerStudent(Student student);
  11.     // 根据用户名查找学生记录,返回一个Student对象,如果未找到则返回null
  12.     @Select("SELECT * FROM students WHERE username = #{username}")
  13.     Student findByUsername(String username);
  14.     // 根据学生id查找学生记录,返回一个Student对象,如果未找到则返回null
  15.     @Select("SELECT * FROM students WHERE id = #{id}")
  16.     Student findById(int id);
  17.     // 查询students表中的所有学生记录,返回一个包含所有学生记录的List<Student>集合
  18.     @Select("SELECT * FROM students")
  19.     List<Student> findAll();
  20.     // 根据学生id更新学生记录,更新的字段包括用户名、密码、全名、邮箱和电话,参数为一个Student对象
  21.     @Update("UPDATE students SET username = #{username}, password = #{password}, full_name = #{fullName}, " +
  22.             "email = #{email}, phone = #{phone} WHERE id = #{id}")
  23.     int updateStudent(Student student);
  24.     // 根据学生id删除学生记录,返回受影响的行数,如果删除成功则返回1,否则返回0
  25.     @Delete("DELETE FROM students WHERE id = #{id}")
  26.     int deleteStudent(int id);
  27. }
复制代码

6.创建 Service 层

创建一个 StudentService 类,用于处理业务逻辑。
  1. package org.example.mstusys.service;
  2. import org.example.mstusys.entity.Student;
  3. import org.example.mstusys.mapper.StudentMapper;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import java.util.List;
  7. @Service
  8. public class StudentService {
  9.     // 注入StudentMapper
  10.     @Autowired
  11.     private StudentMapper studentMapper;
  12.     /**
  13.      * 注册学生
  14.      * @param student
  15.      * @return
  16.      */
  17.     public int registerStudent(Student student) {
  18.         return studentMapper.registerStudent(student);
  19.     }
  20.     /**
  21.      * 登录
  22.      * @param username
  23.      * @return
  24.      */
  25.     public Student login(String username){
  26.         return studentMapper.findByUsername(username);
  27.     }
  28.     /**
  29.      * 根据id获取学生信息
  30.      * @param id
  31.      * @return
  32.      */
  33.     public Student getStudentById(int id){
  34.         return studentMapper.findById(id);
  35.     }
  36.     /**
  37.      * 获取所有学生信息
  38.      * @return
  39.      */
  40.     public List<Student> getAllStudents() {
  41.         return studentMapper.findAll();
  42.     }
  43.     /**
  44.      * 更新学生信息
  45.      * @param student
  46.      * @return
  47.      */
  48.     public int updateStudent(Student student) {
  49.         return studentMapper.updateStudent(student);
  50.     }
  51.     /**
  52.      * 删除学生信息
  53.      * @param id
  54.      * @return
  55.      */
  56.     public int deleteStudent(int id) {
  57.         return studentMapper.deleteStudent(id);
  58.     }
  59. }
复制代码
7.创建 Controller 层

创建一个 StudentController 控制器来处理 HTTP 哀求。
  1. package org.example.mstusys.controller;
  2. import org.example.mstusys.entity.Student;
  3. import org.example.mstusys.service.StudentService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.*;
  6. import java.util.List;
  7. @RestController
  8. @RequestMapping("/students")
  9. public class StudentController {
  10.     @Autowired
  11.     private StudentService studentService;
  12.     /**
  13.      * 注册
  14.      * @param student
  15.      * @return
  16.      */
  17.     @PostMapping("/register")
  18.     public String register(@RequestBody Student student){
  19.         int result = studentService.registerStudent(student);
  20.         return result > 0 ? "Registration successful" : "Registration failed";
  21.     }
  22.     /**
  23.      * 登录
  24.      * @param username
  25.      * @param password
  26.      * @return
  27.      */
  28.     @PostMapping("/login")
  29.     public String login(@RequestParam String username,@RequestParam String password){
  30.         Student student = studentService.login(username);
  31.         if(student != null && student.getPassword().equals(password)){
  32.             return "Login successful";
  33.         }else{
  34.             return "Invalid username or password";
  35.         }
  36.     }
  37.     /**
  38.      * 根据id查询学生
  39.      * @param id
  40.      * @return
  41.      */
  42.     @GetMapping("/{id}")
  43.     public Student getStudentById(@PathVariable int id){
  44.         return studentService.getStudentById(id);
  45.     }
  46.     /**
  47.      * 查询所有学生
  48.      * @return
  49.      */
  50.     @GetMapping("/all")
  51.     public List<Student> getAllStudents(){
  52.         return studentService.getAllStudents();
  53.     }
  54.     /**
  55.      * 更新学生信息
  56.      * @param student
  57.      * @return
  58.      */
  59.     @PutMapping("/update")
  60.     public String updateStudent(@RequestBody Student student) {
  61.         int result = studentService.updateStudent(student);
  62.         return result > 0 ? "Student updated successfully" : "Update failed";
  63.     }
  64.     /**
  65.      * 删除学生
  66.      * @param id
  67.      * @return
  68.      */
  69.     @DeleteMapping("/delete/{id}")
  70.     public String deleteStudent(@PathVariable int id) {
  71.         int result = studentService.deleteStudent(id);
  72.         return result > 0 ? "Student deleted successfully" : "Delete failed";
  73.     }
  74. }
复制代码

8.启动 Spring Boot 应用

确保你的 @SpringBootApplication 类设置准确
  1. package org.example.mstusys;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class MStuSysApplication {
  6.     public static void main(String[] args) {
  7.         SpringApplication.run(MStuSysApplication.class, args);
  8.     }
  9. }
复制代码
 




9. 测试接口

利用 Postman 或其他 API 测试工具来测试接口:


  • POST /students/register:注册门生


  • POST /students/login:登录门生


  • GET /students/{id}:查询单个门生信息


  • GET /students/all:查询全部门生信息


  • PUT /students/update:更新门生信息


  • DELETE /students/delete/{id}:删除门生信息



通过 Postman 测试 Spring Boot + MyBatis 项目中的接口非常方便。你可以发送差异的 HTTP 哀求(如 POST、GET、PUT、DELETE)来测试用户注册、登录、查询、更新和删除等功能。记得在测试时保证服务器已经启动,而且数据库已经设置好。

10. 利用 Spring Security(可选)

假如须要对登录举行更严酷的身份验证,发起集成 Spring Security 举行加密和认证。
前端

确保你已经安装了 Node.js 和 npm。你可以通过以下命令查抄是否安装了:
  1. node -v
  2. npm -v
复制代码
我用的是
docker-compose 部署node.js和mysql

1.设置 docker-compose.yml

我们将在项目根目录(M-stu-sys/)下创建一个 docker-compose.yml 文件。它将定义如何启动 Node.js(前端)和 MySQL 服务。
  1. version: '3.8'
  2. services:
  3.   # 前端服务(Node.js)
  4.   frontend:
  5.     build:
  6.       context: ./frontend  # 假设你的 Vue.js 项目位于 ./frontend 目录中
  7.     ports:
  8.       - "8080:80"  # 映射容器的 80 端口到主机的 8080 端口
  9.     environment:
  10.       - VUE_APP_API_URL=http://backend:8080/api  # Vue.js 调用后端的 API 地址
  11.     depends_on:
  12.       - backend  # 前端依赖后端服务
  13.     networks:
  14.       - mynetwork
  15.   # 后端服务(Spring Boot)
  16.   backend:
  17.     build:
  18.       context: .  # 后端的 Dockerfile 位于根目录下
  19.     ports:
  20.       - "8081:8080"  # 将后端服务暴露在宿主机的 8081 端口
  21.     environment:
  22.       - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/student  # 配置数据库连接
  23.       - SPRING_DATASOURCE_USERNAME=root
  24.       - SPRING_DATASOURCE_PASSWORD=123456
  25.     depends_on:
  26.       - mysql  # 后端依赖 MySQL 服务
  27.     networks:
  28.       - mynetwork
  29.   # MySQL 服务
  30.   mysql:
  31.     image: mysql:8.0
  32.     container_name: mysql8-test05
  33.     environment:
  34.       MYSQL_ROOT_PASSWORD: 123456
  35.       MYSQL_DATABASE: student  # 这里将数据库名改为了mysql8,可按需修改
  36.     ports:
  37.       - "3306:3306"
  38.     volumes:
  39.       - mysql_data:/var/lib/mysql
  40.     networks:
  41.       - mynetwork
  42. # 定义数据卷,持久化 MySQL 数据
  43. volumes:
  44.   mysql_data:
  45. # 定义网络
  46. networks:
  47.   mynetwork:
  48.     driver: bridge  # 使用桥接网络
复制代码
2.设置前端 Dockerfile(Vue.js)
frontend/Dockerfile 内容
  1. # 使用 Node.js 作为构建镜像
  2. FROM node:16-alpine as build
  3. # 设置工作目录
  4. WORKDIR /app
  5. # 复制 package.json 和 package-lock.json 文件
  6. COPY package*.json ./
  7. # 安装前端依赖
  8. RUN npm install
  9. # 复制剩余的项目文件
  10. COPY . .
  11. # 构建 Vue.js 项目
  12. RUN npm run build
  13. # 使用 Nginx 作为生产环境的静态文件服务器
  14. FROM nginx:alpine
  15. # 将构建的 Vue.js 应用拷贝到 Nginx 容器中
  16. COPY --from=build /app/dist /usr/share/nginx/html
  17. # 暴露端口 80
  18. EXPOSE 80
复制代码
3.设置后端 Dockerfile(Spring Boot) 
  1. # 使用 OpenJDK 作为基础镜像
  2. FROM openjdk:17-jdk-slim
  3. # 将 Spring Boot 可执行 JAR 文件复制到容器内
  4. COPY target/*.jar app.jar
  5. # 设置容器启动时执行的命令
  6. ENTRYPOINT ["java", "-jar", "/app.jar"]
  7. # 暴露端口 8080
  8. EXPOSE 8080
复制代码
4.设置 Vue.js 前端的 frontend/package.json
  1. {
  2.   "scripts": {
  3.     "serve": "vue-cli-service serve",
  4.     "build": "vue-cli-service build",
  5.     "lint": "vue-cli-service lint"
  6.   },
  7.   "dependencies": {
  8.     "axios": "^0.21.1",
  9.     "vue": "^2.6.14",
  10.     "vue-router": "^3.5.1"
  11.   },
  12.   "devDependencies": {
  13.     "@vue/cli-service": "^4.5.13"
  14.   },
  15.   "env": {
  16.     "VUE_APP_API_URL": "http://localhost:8080/api"
  17.   }
  18. }
复制代码
 可以在 Vue.js 的代码中利用 process.env.VUE_APP_API_URL 来访问后端 API 所在。
5: 启动 Docker Compose
  1. docker-compose up --build
复制代码
 启动成功后,Vue.js 前端会通过 Nginx 在容器中运行,可以在浏览器中访http://localhost:8080 来查看前端应用

项目结构:
   

  遇到一些错误可以手动拉镜像




  1. docker pull nginx:alpine
  2. docker pull node:16-alpine
复制代码
 




通过以下命令查抄后端是否正常启动:


3.(选做)参考学习平台上“JDBC操作_增删改”的视频,利用表格展示数据库中stuinfo表中的个人信息,每行一条个人信息,表格新增两列,分别提供“修改”和“删除”两个链接。点击“修改”链接时,跳转到新页面可供用户修改和保存;点击“删除”时,跳转到新页面完成删除操作并提示操作结果


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表