手机端的增
这是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程序。
对于手机端的实现,正处于配置环境那一步。
浙公网安备 33010602011771号