servlet:
package com.company.servlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
@WebServlet("/FoodSelectionServlet")
public class FoodSelectionServlet extends HttpServlet {
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/foodsDB";
private static final String JDBC_USER = "root";
private static final String JDBC_PASS = "030718Zzts.";
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
Map<String, Map<String, Object>> foodSelections = new HashMap<>();
Connection conn = null;
request.setCharacterEncoding("utf-8");
try {
String[] selectedFoods = request.getParameterValues("foodChoice");
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
for (String foodId : selectedFoods) {
// 假设用户提交了食物的名称和图片名称
String nameParam = "name_" + foodId;
String imageParam = "image_" + foodId;
String priceParam = "price_" + foodId;
// 根据构造的参数名获取用户提交的值
String name = request.getParameter(nameParam);
String image = request.getParameter(imageParam);
// 假设价格以字符串形式提交,需要转换为float
String priceStr = request.getParameter(priceParam);
String price = priceStr;
// 为每个食物创建一个插入语句
String insertSql = "INSERT INTO foods (id, name, image, price) VALUES (?, ?, ?, ?)";
try (PreparedStatement insertPs = conn.prepareStatement(insertSql)) {
insertPs.setString(1, foodId);
insertPs.setString(2, name);
insertPs.setString(3, image);
insertPs.setString(4, price);
int rowsAffected = insertPs.executeUpdate();
if (rowsAffected > 0) {
// 存储食物信息到Map,用于显示选择结果
Map<String, Object> foodInfo = new HashMap<>();
foodInfo.put("id", foodId);
foodInfo.put("name", name);
foodInfo.put("image", image);
foodInfo.put("price", price);
foodSelections.put(foodId, foodInfo);
}
}
}
conn.commit();
// 将查询结果设置到request属性中
request.setAttribute("foodSelections", foodSelections);
// 转发到显示页面
RequestDispatcher dispatcher = request.getRequestDispatcher("yourChoice.jsp");
dispatcher.forward(request, response);
} catch (Exception e) {
if (conn != null) {
try {
conn.rollback(); // 发生异常时回滚事务
} catch (SQLException ex) {
ex.printStackTrace();
}
}
out.println("Error: " + e.getMessage());
e.printStackTrace();
} finally {
// 关闭数据库连接
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>登录美食选择页面</title>
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse;
margin: auto;
}
th, td {
padding: 8px;
text-align: center;
}
img {
width: 100px;
height: auto;
}
.anniu {
text-align: center;
}
.submit {
margin-top: 10px;
text-align: center;
}
h1 {
text-align: center;
}
</style>
</head>
<body>
<form action="FoodSelectionServlet" method="post">
<table>
<h1>你想吃什么呢?</h1>
<tr>
<th>编号</th>
<th>名称</th>
<th>图片</th>
<th>价格</th>
<th>选择</th>
</tr>
<tr>
<td>001</td>
<td><input type="hidden" name="name_001" value="盖浇饭">盖浇饭</td>
<td><img src="001.png" alt="盖浇饭"><input type="hidden" name="image_001" value="001.png"></td>
<td><input type="hidden" name="price_001" value="20">20</td>
<td><input type="checkbox" name="foodChoice" value="001"></td>
</tr>
<tr>
<td>002</td>
<td><input type="hidden" name="name_002" value="臭豆腐">臭豆腐</td>
<td><img src="002.png" alt="臭豆腐"><input type="hidden" name="image_002" value="002.png"></td>
<td><input type="hidden" name="price_002" value="5">5</td>
<td><input type="checkbox" name="foodChoice" value="002"></td>
</tr>
<tr>
<td>003</td>
<td><input type="hidden" name="name_003" value="肉夹馍">肉夹馍</td>
<td><img src="003.png" alt="肉夹馍"><input type="hidden" name="image_003" value="003.png"></td>
<td><input type="hidden" name="price_003" value="10">10</td>
<td><input type="checkbox" name="foodChoice" value="003"></td>
</tr>
<tr>
<td>004</td>
<td><input type="hidden" name="name_004" value="麻辣烫">麻辣烫</td>
<td><img src="004.png" alt="麻辣烫"><input type="hidden" name="image_004" value="004.png"></td></td>
<td><input type="hidden" name="price_004" value="25">25</td>
<td class="anniu"><input type="checkbox" name="foodChoice" value="004"></td>
</tr>
</table>
<div class="submit">
<input type="submit" value="提交">
</div>
</form>
</body>
</html>
<%@ page import="java.util.Map" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>选择结果页面</title>
<style>
table, th, td {
border: 1px solid black;
border-collapse: collapse;
margin: auto;
}
th, td {
padding: 8px;
text-align: center;
}
img {
width: 100px;
height: auto;
}
h2, h1 {
text-align: center;
}
</style>
</head>
<body>
<h1>你真会吃!</h1>
<table>
<tr>
<th>ID</th>
<th>名称</th>
<th>图片</th>
<th>价格</th>
</tr>
<%
Map<String, Map<String, Object>> foodSelections = (Map<String, Map<String, Object>>) request.getAttribute("foodSelections");
double totalCost = 0;
if (foodSelections != null) {
for (String key : foodSelections.keySet()) {
Map<String, Object> foodInfo = foodSelections.get(key);
%>
<tr>
<td><%= foodInfo.get("id") %></td>
<td><%= foodInfo.get("name") %></td>
<td><img src="<%= foodInfo.get("image") %>" alt="<%= foodInfo.get("name") %>"></td>
<td><%= foodInfo.get("price") %></td>
</tr>
<%
totalCost += Double.parseDouble((String) foodInfo.get("price"));
}
} else {
%>
<tr>
<td colspan="4">您没有选择任何美食。</td>
</tr>
<%
}
%>
</table>
<h2>总计: <%= totalCost %> 元</h2>
</body>
</html>