你说得差不多了。要从数据库获取下拉列表值,您应该首先调用执行预处理工作的servlet,然后让servlet显示带有下拉列表的JSP。
由于普通的HTTP请求(单击链接,书签或在地址栏中输入URL)会按定义触发GET请求,因此您希望在该
doGet()方法中完成这项工作。这是一个以a的形式获取下拉值的示例
List<Product>。
@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Product> products = productService.list(); request.setAttribute("products", products); // It'll be available as ${products}. request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);}在其中
/WEB-INF/products.jsp可以显示如下:
<form action="order" method="post"> <select name="productId"> <c:forEach items="${products}" var="product"> <option value="${product.id}">${product.name}</option> </c:forEach> </select> <input type="submit" value="Order" /></form>将此servlet映射到的URL模式,
/products并通过http://example.com/context/products调用它。它将从数据库加载产品,将其存储在请求范围内,再转发给JSP以使其呈现。
提交表单时,将调用
doPost()映射到URL模式的servlet
的方法
/order。提交HTML表单时,
name=value每个输入元素对都可以用作HTTP请求参数。因此,您可以获得产品ID,如下所示:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String productId = request.getParameter("productId"); // ... do your job here to insert the data. request.getRequestDispatcher("/WEB-INF/someresult.jsp").forward(request, response);}


