You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaEE:如何从JSP下拉框取值到Servlet并会话存储后回显?

Hey there! 第一次发帖完全不用紧张,咱们一步步来搞定这个从下拉框取值存Session再回显的问题😉

先把前端JSP的基础配置捋顺

首先得确保你的下拉框和表单是正确设置的,这是取值的基础:

  • 给<select>标签加上name属性,Servlet就是靠这个name来获取值的,比如:
    <form action="AddToCartServlet" method="post">
        <select name="selectedProduct">
            <option value="javaEE-book">JavaEE入门指南</option>
            <option value="mysql-notes">MySQL笔记</option>
            <option value="spring-boot-course">SpringBoot实战课</option>
        </select>
        <button type="submit">add to card</button>
    </form>
    

    注意:每个<option>一定要加value属性!如果没加,Servlet拿到的会是option里的显示文本(比如“JavaEE入门指南”),而不是你想要的标识值。

Servlet里处理取值和Session存List

接下来是Servlet的逻辑,要注意从Session里取List的时候,先判断是否存在,不存在就初始化:

@WebServlet("/AddToCartServlet")
public class AddToCartServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. 获取下拉框选中的值
        String selectedItem = request.getParameter("selectedProduct");
        // 处理中文乱码(如果需要的话)
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        // 2. 从Session中获取购物车List,不存在则创建新的
        List<String> cartList = (List<String>) request.getSession().getAttribute("cart");
        if (cartList == null) {
            cartList = new ArrayList<>();
            request.getSession().setAttribute("cart", cartList); // 存回Session
        }

        // 3. 将选中的值加入List
        if (selectedItem != null && !selectedItem.isEmpty()) {
            cartList.add(selectedItem);
        }

        // 4. 跳回原来的JSP页面(这里用转发,重定向也可以,Session数据都能保留)
        request.getRequestDispatcher("/your-page.jsp").forward(request, response);
    }
}

小提醒:如果你的值是中文,别忘了设置请求编码request.setCharacterEncoding("UTF-8"),不然会出现乱码问题。

JSP页面回显Session中的List

最后把Session里的购物车内容显示出来,推荐用JSTL标签(更简洁,避免脚本代码),记得先导入标签库:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>购物车页面</title>
</head>
<body>
    <!-- 之前的表单部分 -->
    <form action="AddToCartServlet" method="post">
        <select name="selectedProduct">
            <option value="javaEE-book">JavaEE入门指南</option>
            <option value="mysql-notes">MySQL笔记</option>
            <option value="spring-boot-course">SpringBoot实战课</option>
        </select>
        <button type="submit">add to card</button>
    </form>

    <!-- 回显购物车内容 -->
    <h3>你的购物车:</h3>
    <c:if test="${not empty sessionScope.cart}">
        <ul>
            <c:forEach items="${sessionScope.cart}" var="item">
                <li>${item}</li>
            </c:forEach>
        </ul>
    </c:if>
    <c:if test="${empty sessionScope.cart}">
        <p>购物车还是空的哦~</p>
    </c:if>
</body>
</html>

如果暂时还没学JSTL,用脚本代码也可以:

<h3>你的购物车:</h3>
<%
    List<String> cart = (List<String>) session.getAttribute("cart");
    if (cart != null && !cart.isEmpty()) {
%>
        <ul>
            <% for (String item : cart) { %>
                <li><%= item %></li>
            <% } %>
        </ul>
<%
    } else {
%>
        <p>购物车还是空的哦~</p>
<%
    }
%>

常见坑点自查

  • 是不是忘了给<select>加name属性?这会导致request.getParameter()返回null
  • 是不是<option>没设value?拿到的不是你想要的标识值
  • 是不是每次Servlet里都new了一个新的List?这样会覆盖之前Session里的内容,一定要先判断Session里有没有再初始化
  • 表单的action路径是不是写错了?要和Servlet的@WebServlet注解里的路径一致

内容的提问来源于stack exchange,提问作者j0w

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:55:00