手机端的增

这是javaweb版本的增:
测试内容:

代码结构:

model层:

package model;

public class Course {
    private int id;
    private String courseName;
    private String teacher;
    private String location;

    public Course() {
    }

    public Course(int id, String courseName, String teacher, String location) {
        this.id = id;
        this.courseName = courseName;
        this.teacher = teacher;
        this.location = location;
    }

    /**
     * 获取
     * @return id
     */
    public int getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * 获取
     * @return courseName
     */
    public String getCourseName() {
        return courseName;
    }

    /**
     * 设置
     * @param courseName
     */
    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    /**
     * 获取
     * @return teacher
     */
    public String getTeacher() {
        return teacher;
    }

    /**
     * 设置
     * @param teacher
     */
    public void setTeacher(String teacher) {
        this.teacher = teacher;
    }

    /**
     * 获取
     * @return location
     */
    public String getLocation() {
        return location;
    }

    /**
     * 设置
     * @param location
     */
    public void setLocation(String location) {
        this.location = location;
    }

    public String toString() {
        return "Course{id = " + id + ", courseName = " + courseName + ", teacher = " + teacher + ", location = " + location + "}";
    }

    // getters and setters
}

servlet层:

package servlet;

import model.Course;
import utils.DatabaseService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/CourseListServlet")
public class CourseListServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Course> courses = getCoursesFromDB();
        request.setAttribute("courses", courses);
        request.getRequestDispatcher("courseList.jsp").forward(request, response);
    }

    private List<Course> getCoursesFromDB() {
        List<Course> courses = new ArrayList<>();
        try (Connection conn = DatabaseService.getConnection();
             PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM course")) {
            ResultSet rs = pstmt.executeQuery();
            while (rs.next()) {
                Course course = new Course();
                course.setId(rs.getInt("id"));
                course.setCourseName(rs.getString("course_name"));
                course.setTeacher(rs.getString("teacher"));
                course.setLocation(rs.getString("location"));
                courses.add(course);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return courses;
    }
}
package servlet;

import utils.DatabaseService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

@WebServlet("/CourseServlet")
public class CourseServlet extends HttpServlet {
    private static final String CHECK_DUPLICATE_SQL = "SELECT COUNT(*) FROM course WHERE course_name = ?";
    private static final String INSERT_SQL = "INSERT INTO course (course_name, teacher, location) VALUES (?, ?, ?)";

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String courseName = request.getParameter("courseName");
        String teacher = request.getParameter("teacher");
        String location = request.getParameter("location");

        // 1. 验证逻辑
        String errorMsg = validate(courseName, teacher, location);
        if (errorMsg != null) {
            request.setAttribute("errorMsg", errorMsg);
            // 验证失败,转发回添加页面
            request.getRequestDispatcher("index.jsp").forward(request, response);
            return;
        }

        // 2. 数据库操作
        try (Connection conn = DatabaseService.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(INSERT_SQL)) {
            pstmt.setString(1, courseName);
            pstmt.setString(2, teacher);
            pstmt.setString(3, location);
            pstmt.executeUpdate();

            // 操作成功,通过 Session 传递成功提示
            HttpSession session = request.getSession();
            session.setAttribute("successMsg", "课程添加成功!");
            // 重定向到课程列表页
            response.sendRedirect("CourseListServlet");
        } catch (Exception e) {
            e.printStackTrace();
            // 操作失败,传递失败提示
            HttpSession session = request.getSession();
            session.setAttribute("errorMsg", "课程添加失败,请联系管理员");
            response.sendRedirect("CourseListServlet");
        }
    }

    private String validate(String courseName, String teacher, String location) {
        // 课程名称重复校验
        try (Connection conn = DatabaseService.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(CHECK_DUPLICATE_SQL)) {
            pstmt.setString(1, courseName);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next() && rs.getInt(1) > 0) {
                return "课程名称重复,请重新录入";
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "课程名称校验失败,请重试";
        }

        // 教师校验
        String[] validTeachers = {"王建民", "刘立嘉", "刘丹", "杨子光", "张云霞", "武永亮", "高飞", "孙静", "黄荣峰"};
        if (!java.util.Arrays.asList(validTeachers).contains(teacher)) {
            return "任课教师不在指定列表中";
        }

        // 上课地点校验
        String[] validPrefixes = {"一教", "二教", "三教", "基教"};
        boolean isValid = false;
        for (String prefix : validPrefixes) {
            if (location.startsWith(prefix)) {
                isValid = true;
                break;
            }
        }
        if (!isValid) {
            return "上课地点需以一教/二教/三教/基教开头";
        }
        return null;
    }
}

utils层:

package utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


public class DatabaseService {
    // 数据库连接参数(需替换为你的实际配置)
    private static final String URL = "jdbc:mysql://localhost:3306/kech";
    private static final String USER = "root";
    private static final String PASSWORD = "123456";

    // 静态代码块加载数据库驱动
    static {
        try {
            // 加载 MySQL 驱动(根据数据库类型调整,如 PostgreSQL 则换对应驱动类)
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError();
        }
    }

    /**
     * 获取数据库连接
     * @return 数据库连接对象
     * @throws SQLException 连接数据库时的异常
     */
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }
}

jsp页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List" %>
<%@ page import="model.Course" %>
<html>
<head>
    <title>课程列表</title>
    <style>
        /* 整体页面样式 */
        body {
            font-family: 'Arial', sans-serif;
            background-color: #f4f4f4;
            margin: 0;
            padding: 20px;
            color: #333;
        }

        /* 标题样式 */
        h2 {
            text-align: center;
            color: #4CAF50;
            font-size: 2em;
            margin-bottom: 20px;
        }

        /* 操作结果提示样式 */
        .success {
            color: #4CAF50;
            background-color: #e8f5e9;
            padding: 10px;
            border-radius: 5px;
            text-align: center;
            margin: 10px 0;
            border: 1px solid #c8e6c9;
        }

        .error {
            color: #ff4444;
            background-color: #ffe6e6;
            padding: 10px;
            border-radius: 5px;
            text-align: center;
            margin: 10px 0;
            border: 1px solid #ff9999;
        }

        /* 链接样式 */
        a {
            display: inline-block;
            margin: 10px 0;
            color: #4CAF50;
            text-decoration: none;
            font-size: 1em;
            transition: color 0.3s ease;
        }

        a:hover {
            color: #45a049;
        }

        /* 表格样式 */
        table {
            width: 80%;
            margin: 20px auto;
            border-collapse: collapse;
            background-color: #fff;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
            border-radius: 10px;
            overflow: hidden;
        }

        th, td {
            padding: 12px;
            text-align: left;
            border-bottom: 1px solid #ddd;
        }

        th {
            background-color: #4CAF50;
            color: #fff;
            font-weight: bold;
        }

        tr:hover {
            background-color: #f1f1f1;
        }

        tr:nth-child(even) {
            background-color: #f9f9f9;
        }
    </style>
</head>
<body>
<h2>课程列表</h2>

<%-- 显示操作结果提示 --%>
<% String message = (String) session.getAttribute("message"); %>
<% if (message != null) { %>
<div class="<%= message.contains("成功") ? "success" : "error" %>">
    <%= message %>
</div>
<% session.removeAttribute("message"); %>
<% } %>

<a href="index.jsp">返回添加课程</a>

<table>
    <tr>
        <th>课程名称</th>
        <th>任课教师</th>
        <th>上课地点</th>
    </tr>
    <%
        List<Course> courses = (List<Course>) request.getAttribute("courses");
        if (courses != null) {
            for (Course course : courses) {
    %>
    <tr>
        <td><%= course.getCourseName() %></td>
        <td><%= course.getTeacher() %></td>
        <td><%= course.getLocation() %></td>
    </tr>
    <%
            }
        }
    %>
</table>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>添加新课程</title>
    <style>
        /* 整体页面样式 */
        body {
            font-family: 'Arial', sans-serif;
            background-color: #f4f4f4;
            margin: 0;
            padding: 20px;
            color: #333;
        }

        /* 标题样式 */
        h2 {
            text-align: center;
            color: #4CAF50;
            font-size: 2em;
            margin-bottom: 20px;
        }

        /* 错误提示样式 */
        .msg {
            color: #ff4444;
            background-color: #ffe6e6;
            padding: 10px;
            border-radius: 5px;
            text-align: center;
            margin: 10px 0;
            border: 1px solid #ff9999;
        }

        /* 表单容器样式 */
        form {
            background-color: #fff;
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
            max-width: 400px;
            margin: 0 auto;
        }

        /* 输入框样式 */
        input[type="text"] {
            width: 100%;
            padding: 10px;
            margin: 10px 0;
            border: 1px solid #ddd;
            border-radius: 5px;
            font-size: 1em;
        }

        /* 提交按钮样式 */
        input[type="submit"] {
            width: 100%;
            padding: 10px;
            background-color: #4CAF50;
            color: #fff;
            border: none;
            border-radius: 5px;
            font-size: 1em;
            cursor: pointer;
            transition: background-color 0.3s ease;
        }

        input[type="submit"]:hover {
            background-color: #45a049;
        }

        /* 链接样式 */
        a {
            display: block;
            text-align: center;
            margin-top: 20px;
            color: #4CAF50;
            text-decoration: none;
            font-size: 1em;
            transition: color 0.3s ease;
        }

        a:hover {
            color: #45a049;
        }
    </style>
</head>
<body>
<h2>添加新课程</h2>
<!-- 显示校验失败提示 -->
<% String errorMsg = (String) request.getAttribute("errorMsg"); %>
<% if (errorMsg != null) { %>
<div class="msg"><%= errorMsg %></div>
<% } %>
<form action="CourseServlet" method="post">
    课程名称:<input type="text" name="courseName" required><br>
    任课教师:<input type="text" name="teacher" required><br>
    上课地点:<input type="text" name="location" required><br>
    <input type="submit" value="提交">
</form>
<a href="CourseListServlet">查看课程列表</a>
</body>
</html>

sql语句:

create database kech;
use kech;
CREATE TABLE course (
                        id INT AUTO_INCREMENT PRIMARY KEY,
                        course_name VARCHAR(50) UNIQUE,
                        teacher VARCHAR(50),
                        location VARCHAR(50)
);

代码量:差不多是400行
所花时间:是1.5h
所学到的知识点:
javaweb增的实现,可以借助大模型来实现。
页面跳转的逻辑,可以在servlet层进行实现完成。页面的美化,可以在完成整个功能之后,在vscode中进行修改。
数据库的连接,需要考加载驱动来完成。对于在pom.xml中添加依赖,可以通过添加maven依赖这个方法来解决依赖缺少的问题。
又一次熟悉了web程序。
对于手机端的实现,正处于配置环境那一步。

posted @ 2025-03-07 21:39  f-52Hertz  阅读(16)  评论(0)    收藏  举报