Web课外练习11

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>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值