3月4日总结
今天又烧了一天,持续低烧,真的好难受,又在宿舍躺了一天,简单补了补作业,我恨牙疼我恨发烧。
个人作业02
利用Intelij IDEA构建一个Web项目,选择Maven,服务器为Tomcat,要求完成物资类别单的增删改查。
具体要求为:
在MySQL数据库中创建物资类别表,包含物资名称、规格、材料,需要满足不同的物资名称、规格、材质的物资不能设立相同的物资编码,随后在Intelij IDEA创建Maven的Web项目,与MySQL数据库连接,利用HTML与Servlet完成物资类别单的新增、删除、修改、查询四个功能。
AI结果生成为:
好,我现在需要按照用户的要求,使用IntelliJ IDEA构建一个Maven Web项目,连接MySQL数据库,实现物资类别单的增删改查功能。首先,我需要理清楚整个项目的结构和所需的步骤,确保每个环节都正确无误。
首先,用户提到要在MySQL中创建物资类别表,包含物资名称、规格、材料,并且不同的物资名称、规格和材质的组合不能有相同的物资编码。这里可能需要先设计数据库表的结构。物资编码应该是主键,但用户的要求是当名称、规格、材料不同时,编码不能重复。不过这里可能有点矛盾,通常主键本身就是唯一的,所以可能需要理解用户的需求是组合唯一,而不是编码本身唯一。或者用户可能希望物资编码是自动生成的,或者根据某种规则生成,确保名称、规格、材料不同的情况下编码不同。这点可能需要进一步确认,但根据常规做法,可能物资编码是主键,自动生成,而名称、规格、材料的组合需要唯一,所以应该在数据库表中为这三个字段添加唯一约束。
接下来,在IntelliJ中创建Maven Web项目。需要选择Maven archetype,比如使用maven-archetype-webapp。然后配置Tomcat服务器,确保项目能正确部署和运行。
然后需要添加MySQL的JDBC驱动依赖到pom.xml文件中,这样Maven会自动下载所需的库。同时,可能需要配置数据库连接信息,通常放在一个属性文件中,比如jdbc.properties,方便管理。
接着,创建数据库表。使用MySQL Workbench或者命令行,执行CREATE TABLE语句,定义物资类别表的结构,包括字段如id(主键)、name、specification、material,可能还有code(物资编码)。根据用户要求,name、specification、material的组合必须唯一,所以需要在这三个字段上添加唯一约束。或者可能物资编码需要由这三个字段生成?这里可能需要澄清。假设物资编码是自动生成的主键,而三个字段的组合必须唯一,那么需要在这三个字段上添加UNIQUE约束。
接下来是后端部分,使用Servlet处理HTTP请求,实现增删改查。通常每个操作对应一个Servlet,或者使用一个Servlet通过不同的action参数区分操作。然后,需要编写DAO(Data Access Object)层,处理与数据库的交互,比如增删改查的方法。
前端部分,使用HTML和可能的JSP或者简单的HTML表单,通过AJAX或者表单提交与Servlet交互。用户提到用HTML,所以可能使用静态HTML页面,通过表单提交到Servlet,然后Servlet处理请求后重定向或返回结果页面。
具体步骤可能如下:
- 创建数据库和表:
-
创建数据库,比如wuzi_db。
-
创建表material_category,字段包括id(主键自增)、code(唯一)、name、specification、material,并且name、specification、material的组合唯一。或者可能code由这三个字段生成,但需要确保唯一。或者code是主键,而这三个字段的组合唯一?需要明确用户的需求。例如,用户可能要求物资编码必须唯一,且不能有相同的名称、规格、材料组合,即使编码不同。或者,当新增时,如果名称、规格、材料已存在,则不允许新增,此时需要在数据库中为这三个字段添加唯一约束。
比如,表结构可能如下:
CREATE TABLE material_category (
id INT PRIMARY KEY AUTO_INCREMENT,
code VARCHAR(50) UNIQUE,
name VARCHAR(100) NOT NULL,
specification VARCHAR(100),
material VARCHAR(100),
UNIQUE KEY unique_combo (name, specification, material)
);
这里code是唯一的,同时name、specification、material的组合也是唯一的。或者可能code是根据这三个字段生成的,比如某种哈希或组合,但这样的话code可能不需要用户输入,而是自动生成。但用户的问题中提到“物资编码”,可能需要用户输入,但需要确保当这三个字段不同时,编码不能重复。这可能需要进一步分析。
可能用户的意思是,物资编码是主键,但不同的名称、规格、材料不能有相同的编码。这可能需要应用层逻辑来检查,或者在数据库中将这三个字段设为唯一,同时编码由用户输入,但必须唯一。但这样的话,可能存在三个字段相同但编码不同的情况,但用户不允许。所以正确的做法可能是,将name、specification、material的组合设为唯一,这样即使编码不同,这三个字段相同的话也会被拒绝。或者用户可能希望编码由这三个字段生成,比如某种组合,确保唯一。或者用户可能希望当新增记录时,如果这三个字段的组合已存在,则不允许新增,不管编码是否相同。这种情况下,应该在数据库中对这三个字段设置唯一约束,这样无论编码是否相同,只要这三个字段重复,就会报错。
所以,正确的表结构可能包括:
CREATE TABLE material_category (
id INT PRIMARY KEY AUTO_INCREMENT,
code VARCHAR(50) UNIQUE NOT NULL,
name VARCHAR(100) NOT NULL,
specification VARCHAR(100) NOT NULL,
material VARCHAR(100) NOT NULL,
UNIQUE KEY unique_combo (name, specification, material)
);
这样,code字段必须唯一,且name、spec、material的组合也唯一。这可能满足用户的要求,即不同的名称、规格、材料不能有相同的code,或者说不同的组合不能有相同的code?可能用户的意思是,不同的组合必须有不同的code,但code本身必须唯一。所以,当插入一条记录时,如果code已存在,或者三个字段的组合已存在,都会导致插入失败。这可能需要同时设置这两个唯一约束。不过,可能用户的需求是,当三个字段的组合不同时,code可以相同?不太可能。因此,可能需要进一步明确。根据用户的原话:“不同的物资名称、规格、材质的物资不能设立相同的物资编码”,也就是如果名称、规格、材质不同,那么它们的编码不能相同。这可能意味着,当三个字段中的任何一个不同时,编码必须不同。或者,当三个字段的组合不同时,编码不能相同。这可能难以通过数据库约束实现,因为需要确保不同组合的编码也不相同。例如,假设有一条记录的编码是A,三个字段是X,Y,Z;另一条记录的三个字段是A,B,C,它们的编码不能是A。这种情况下,编码必须全局唯一,而不仅仅是组合唯一。这可能意味着code字段需要设置唯一约束,而三个字段的组合也需要唯一约束。或者用户可能希望code由三个字段生成,比如拼接,这样不同的组合自然有不同的code。但用户可能需要code由用户输入,这时候需要确保不同组合的code不同,这可能需要应用层逻辑来检查,比如在插入时,检查是否存在相同的code,或者相同的组合。这时候可能需要更复杂的逻辑。
但根据用户描述,可能更合理的做法是,code是主键,且当三个字段不同时,code必须不同。这可能意味着code的生成逻辑需要确保这一点,或者用户输入时必须保证。这种情况下,可能code需要是唯一的,而三个字段的组合也需要唯一。这样,无论是code重复还是组合重复,都无法插入。例如,code是主键,同时三个字段的组合有唯一约束。这可能满足用户的需求,即不同的组合不能有相同的code,同时code本身必须唯一。但用户的原话是“不同的物资名称、规格、材质的物资不能设立相同的物资编码”,也就是当三个字段不同时,它们的code不能相同。例如,如果存在两条记录,三个字段不同,但code相同,这是不允许的。因此,在这种情况下,code必须唯一,而三个字段的组合不需要唯一约束,但需要确保当三个字段不同时,code不能重复。但这样的话,code的唯一性约束已经确保了code的唯一性,无论三个字段是否相同。这可能与用户的需求不符。用户的需求可能实际上是,当三个字段的组合相同时,不允许插入,而code可以是其他情况。例如,用户可能希望三个字段的组合唯一,而code可以自动生成或由用户输入,但必须唯一。这时候,三个字段的组合需要唯一约束,而code也需要唯一约束。这样,无论哪个条件被违反,都会导致插入失败。
所以,最终的数据库表结构应该包括:
-
id INT 主键自增(可选)
-
code VARCHAR 唯一
-
name VARCHAR
-
specification VARCHAR
-
material VARCHAR
-
唯一约束在 (name, specification, material)
这样,当用户试图插入一条记录时,如果code已存在,或者三个字段的组合已存在,都会导致插入失败。这应该满足用户的需求。
- 在IntelliJ中创建Maven Web项目:
-
使用maven-archetype-webapp创建项目结构。
-
配置pom.xml,添加Servlet API依赖,MySQL驱动依赖,JSTL(如果需要)等。
-
配置Tomcat服务器,确保项目能正确部署。
- 编写DAO层:
-
创建数据库连接工具类,读取jdbc.properties配置。
-
编写MaterialCategoryDAO类,包含增删改查方法。
-
在新增方法中,需要处理可能出现的重复code或重复组合的异常,返回相应的提示。
- 编写Servlet:
-
创建AddMaterialServlet、DeleteMaterialServlet、UpdateMaterialServlet、QueryMaterialServlet,分别处理对应的请求。
-
或者使用一个MaterialServlet,通过请求参数区分action(如action=add, action=delete等)。
-
在Servlet中获取请求参数,调用DAO层方法,处理结果,并重定向或转发到相应的页面。
- 编写前端页面:
-
创建HTML页面,如add.html(新增页面)、list.html(查询页面,包含编辑和删除链接)。
-
在查询页面,可能需要使用JSP或Thymeleaf来动态显示数据,但用户提到用HTML,可能需要通过Servlet转发请求属性,使用JSP来显示动态内容。或者使用AJAX从后端获取数据,动态填充HTML表格。不过用户可能允许使用JSP,因为纯HTML无法动态显示数据。
- 测试:
-
确保每个功能都能正确操作数据库,处理异常情况,如重复数据等。
-
测试增删改查功能,验证数据正确性。
现在,可能遇到的问题包括:
-
数据库连接配置错误,比如驱动类名、URL、用户名密码是否正确。
-
唯一约束冲突时的异常处理,需要在前端显示错误信息。
-
事务管理,是否需要使用事务,但在简单的增删改查中可能不需要。
-
前端页面的表单提交是否正确,Servlet是否正确处理参数。
-
分页和查询条件的处理,用户可能要求查询功能支持条件查询,但根据需求可能只是列出所有记录。
现在,我需要按照这些步骤逐步实现。
首先,创建数据库:
CREATE DATABASE wuzi_db;
USE wuzi_db;
CREATE TABLE material_category (
id INT PRIMARY KEY AUTO_INCREMENT,
code VARCHAR(50) UNIQUE NOT NULL,
name VARCHAR(100) NOT NULL,
specification VARCHAR(100) NOT NULL,
material VARCHAR(100) NOT NULL,
UNIQUE KEY unique_combo (name, specification, material)
);
然后,在IntelliJ中创建Maven项目,选择maven-archetype-webapp。项目结构应该包括src/main/webapp,WEB-INF/web.xml等。
在pom.xml中添加依赖:
<dependencies>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- MySQL Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!-- 如果需要JSON处理,比如返回JSON数据 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
</dependencies>
然后,创建数据库连接工具类,比如DBUtil,读取jdbc.properties:
在src/main/resources目录下创建jdbc.properties:
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/wuzi_db?useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
然后,编写DBUtil类,放在src/main/java下的合适包中,比如com.example.util:
public class DBUtil {
private static String driver;
private static String url;
private static String username;
private static String password;
static {
try {
Properties props = new Properties();
InputStream in = DBUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
props.load(in);
driver = props.getProperty("jdbc.driver");
url = props.getProperty("jdbc.url");
username = props.getProperty("jdbc.username");
password = props.getProperty("jdbc.password");
Class.forName(driver);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, username, password);
}
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
然后,创建MaterialCategory实体类,对应数据库表:
public class MaterialCategory {
private int id;
private String code;
private String name;
private String specification;
private String material;
// getters and setters
}
接下来,编写MaterialCategoryDAO,实现增删改查:
public class MaterialCategoryDAO {
public boolean add(MaterialCategory mc) {
String sql = "INSERT INTO material_category (code, name, specification, material) VALUES (?, ?, ?, ?)";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, mc.getCode());
pstmt.setString(2, mc.getName());
pstmt.setString(3, mc.getSpecification());
pstmt.setString(4, mc.getMaterial());
int rows = pstmt.executeUpdate();
return rows > 0;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
public boolean deleteByCode(String code) {
String sql = "DELETE FROM material_category WHERE code = ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, code);
int rows = pstmt.executeUpdate();
return rows > 0;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
public boolean update(MaterialCategory mc) {
String sql = "UPDATE material_category SET name=?, specification=?, material=? WHERE code=?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, mc.getName());
pstmt.setString(2, mc.getSpecification());
pstmt.setString(3, mc.getMaterial());
pstmt.setString(4, mc.getCode());
int rows = pstmt.executeUpdate();
return rows > 0;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
public List<MaterialCategory> findAll() {
List<MaterialCategory> list = new ArrayList<>();
String sql = "SELECT * FROM material_category";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
MaterialCategory mc = new MaterialCategory();
mc.setId(rs.getInt("id"));
mc.setCode(rs.getString("code"));
mc.setName(rs.getString("name"));
mc.setSpecification(rs.getString("specification"));
mc.setMaterial(rs.getString("material"));
list.add(mc);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
public MaterialCategory findByCode(String code) {
String sql = "SELECT * FROM material_category WHERE code = ?";
try (Connection conn = DBUtil.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, code);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
MaterialCategory mc = new MaterialCategory();
mc.setId(rs.getInt("id"));
mc.setCode(rs.getString("code"));
mc.setName(rs.getString("name"));
mc.setSpecification(rs.getString("specification"));
mc.setMaterial(rs.getString("material"));
return mc;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
然后,编写Servlet。例如,处理新增的AddServlet:
@WebServlet("/add")
public class AddMaterialServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String code = request.getParameter("code");
String name = request.getParameter("name");
String spec = request.getParameter("specification");
String material = request.getParameter("material");
MaterialCategory mc = new MaterialCategory();
mc.setCode(code);
mc.setName(name);
mc.setSpecification(spec);
mc.setMaterial(material);
MaterialCategoryDAO dao = new MaterialCategoryDAO();
boolean success = dao.add(mc);
if (success) {
response.sendRedirect("list");
} else {
// 处理失败情况,可能因为唯一约束冲突
request.setAttribute("error", "添加失败,物资编码或组合已存在");
request.getRequestDispatcher("/add.html").forward(request, response);
}
}
}
同样,处理删除的DeleteServlet:
@WebServlet("/delete")
public class DeleteMaterialServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String code = request.getParameter("code");
MaterialCategoryDAO dao = new MaterialCategoryDAO();
boolean success = dao.deleteByCode(code);
if (success) {
response.sendRedirect("list");
} else {
request.setAttribute("error", "删除失败");
request.getRequestDispatcher("/list").forward(request, response);
}
}
}
更新和查询的Servlet类似。
然后,编写前端页面。例如,add.html:
<!DOCTYPE html>
<html>
<head>
<title>新增物资类别</title>
</head>
<body>
<h1>新增物资类别</h1>
<form action="add" method="post">
<label>物资编码:<input type="text" name="code" required></label><br>
<label>名称:<input type="text" name="name" required></label><br>
<label>规格:<input type="text" name="specification" required></label><br>
<label>材料:<input type="text" name="material" required></label><br>
<input type="submit" value="提交">
</form>
<a href="list">返回列表</a>
</body>
</html>
查询页面可能需要使用JSP来动态显示数据,因为纯HTML无法展示数据库内容。例如,list.jsp:
<%@ page import="java.util.List" %>
<%@ page import="com.example.model.MaterialCategory" %>
<!DOCTYPE html>
<html>
<head>
<title>物资类别列表</title>
</head>
<body>
<h1>物资类别列表</h1>
<table border="1">
<tr>
<th>物资编码</th>
<th>名称</th>
<th>规格</th>
<th>材料</th>
<th>操作</th>
</tr>
<%
List<MaterialCategory> list = (List<MaterialCategory>) request.getAttribute("list");
for (MaterialCategory mc : list) {
%>
<tr>
<td><%= mc.getCode() %></td>
<td><%= mc.getName() %></td>
<td><%= mc.getSpecification() %></td>
<td><%= mc.getMaterial() %></td>
<td>
<a href="edit?code=<%= mc.getCode() %>">编辑</a>
<a href="delete?code=<%= mc.getCode() %>" onclick="return confirm('确定删除?')">删除</a>
</td>
</tr>
<% } %>
</table>
<a href="add.html">新增物资类别</a>
</body>
</html>
对应的ListServlet:
@WebServlet("/list")
public class ListMaterialServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
MaterialCategoryDAO dao = new MaterialCategoryDAO();
List<MaterialCategory> list = dao.findAll();
request.setAttribute("list", list);
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
}
编辑页面edit.jsp:
<%@ page import="com.example.model.MaterialCategory" %>
<%
MaterialCategory mc = (MaterialCategory) request.getAttribute("material");
%>
<!DOCTYPE html>
<html>
<head>
<title>编辑物资类别</title>
</head>
<body>
<h1>编辑物资类别</h1>
<form action="update" method="post">
<input type="hidden" name="code" value="<%= mc.getCode() %>">
<label>名称:<input type="text" name="name" value="<%= mc.getName() %>" required></label><br>
<label>规格:<input type="text" name="specification" value="<%= mc.getSpecification() %>" required></label><br>
<label>材料:<input type="text" name="material" value="<%= mc.getMaterial() %>" required></label><br>
<input type="submit" value="更新">
</form>
<a href="list">返回列表</a>
</body>
</html>
对应的EditServlet:
@WebServlet("/edit")
public class EditMaterialServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String code = request.getParameter("code");
MaterialCategoryDAO dao = new MaterialCategoryDAO();
MaterialCategory mc = dao.findByCode(code);
if (mc != null) {
request.setAttribute("material", mc);
request.getRequestDispatcher("/edit.jsp").forward(request, response);
} else {
response.sendRedirect("list");
}
}
}
UpdateServlet:
@WebServlet("/update")
public class UpdateMaterialServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String code = request.getParameter("code");
String name = request.getParameter("name");
String spec = request.getParameter("specification");
String material = request.getParameter("material");
MaterialCategory mc = new MaterialCategory();
mc.setCode(code);
mc.setName(name);
mc.setSpecification(spec);
mc.setMaterial(material);
MaterialCategoryDAO dao = new MaterialCategoryDAO();
boolean success = dao.update(mc);
if (success) {
response.sendRedirect("list");
} else {
request.setAttribute("error", "更新失败,可能组合已存在");
request.getRequestDispatcher("/edit?code=" + code).forward(request, response);
}
}
}
最后,配置web.xml(虽然使用注解方式配置Servlet,但可能还需要配置欢迎页面等):
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>list</welcome-file>
</welcome-file-list>
</web-app>
在部署到Tomcat时,需要确保数据库连接参数正确,并且Tomcat的lib目录下有MySQL驱动(如果遇到ClassNotFoundException,可能需要将驱动放在Tomcat的lib目录下,或者确保Maven依赖正确)。
测试时,访问http://localhost:8080/项目名/list,应该能看到物资列表,进行增删改查操作。
可能还需要处理异常情况,比如当添加重复的code或组合时,显示错误信息。例如,在add.html中,如果添加失败,返回错误信息。可能需要使用JSP来动态显示错误信息,或者通过Servlet转发到带有错误提示的页面。
总结来说,整个流程包括数据库设计、项目搭建、DAO层编写、Servlet处理请求、前端页面展示。需要确保每个环节的连接正确,异常处理得当。
以下是分步指南,帮助您使用IntelliJ IDEA创建Maven Web项目并实现物资类别单的增删改查功能。
步骤1:创建数据库和表
在MySQL中执行以下SQL语句:
sql
CREATE DATABASE wuzi_db;
USE wuzi_db;
CREATE TABLE material_category (
id INT PRIMARY KEY AUTO_INCREMENT,
code VARCHAR(50) UNIQUE NOT NULL,
name VARCHAR(100) NOT NULL,
specification VARCHAR(100) NOT NULL,
material VARCHAR(100) NOT NULL,
UNIQUE KEY unique_combo (name, specification, material)
);
步骤2:创建Maven Web项目
打开IntelliJ IDEA,选择 File > New > Project。
选择 Maven,勾选 Create from archetype,选择 maven-archetype-webapp。
填写 GroupId 和 ArtifactId,完成项目创建。
步骤3:配置pom.xml
添加依赖到pom.xml:
xml
<dependencies>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- MySQL Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!-- JSON Support -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.3</version>
</dependency>
</dependencies>
步骤4:创建数据库工具类
在src/main/java下创建com.example.util.DBUtil:
public class DBUtil {
// 数据库连接配置(参考思考过程)
// 确保创建jdbc.properties文件并配置正确参数
}
步骤5:创建实体类
创建com.example.model.MaterialCategory:
public class MaterialCategory {
private int id;
private String code;
private String name;
private String specification;
private String material;
// Getters and Setters
}
步骤6:创建DAO类
创建com.example.dao.MaterialCategoryDAO,包含增删改查方法(参考思考过程中的DAO实现)。
步骤7:创建Servlet
创建以下Servlet(每个功能对应一个Servlet):
AddMaterialServlet(处理新增)
DeleteMaterialServlet(处理删除)
UpdateMaterialServlet(处理更新)
ListMaterialServlet(显示列表)
EditMaterialServlet(跳转到编辑页面)
示例ListMaterialServlet
@WebServlet("/list")
public class ListMaterialServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
MaterialCategoryDAO dao = new MaterialCategoryDAO();
List<MaterialCategory> list = dao.findAll();
request.setAttribute("list", list);
request.getRequestDispatcher("/list.jsp").forward(request, response);
}
}
步骤8:创建前端页面
list.jsp(显示物资列表)
add.html(新增物资表单)
edit.jsp(编辑物资表单)
示例list.jsp:
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>物资列表</title>
</head>
<body>
<h1>物资类别列表</h1>
<table border="1">
<tr>
<th>编码</th><th>名称</th><th>规格</th><th>材料</th><th>操作</th>
</tr>
<c:forEach items="${list}" var="item">
<tr>
<td>${item.code}</td>
<td>${item.name}</td>
<td>${item.specification}</td>
<td>${item.material}</td>
<td>
<a href="edit?code=${item.code}">编辑</a>
<a href="delete?code=${item.code}" onclick="return confirm('确定删除?')">删除</a>
</td>
</tr>
</c:forEach>
</table>
<a href="add.html">新增物资</a>
</body>
</html>
步骤9:配置Tomcat并运行
点击IntelliJ右上角 Add Configuration,添加Tomcat服务器。
部署项目,启动Tomcat。
访问 http://localhost:8080/项目名/list 测试功能。
注意事项
确保MySQL服务正在运行,且jdbc.properties中的连接信息正确。
处理表单提交时,Servlet的doPost方法需正确接收参数。
编辑功能需先查询数据再填充到表单中。
添加唯一约束后,数据库会拒绝重复数据,需在前端或Servlet中处理异常提示。
通过以上步骤,您可以实现物资类别单的增删改查功能。根据具体需求调整代码逻辑和页面设计。
浙公网安备 33010602011771号