【发布时间】:2012-03-16 15:59:11
【问题描述】:
我是服务器端编程的新手,我正在编写一个简单的 servlet/jsp 程序。 servlet 部分应该从 URL 中获取参数并将它们保存到地图中,而 jsp 部分应该读取地图并在 HTML 表格中显示其内容。
这是 servlet:
@WebServlet("/RestaurantServlet86105511")
public class RestaurantServlet86105511 extends HttpServlet {
private static HashMap<String, String> map = new HashMap<>();
private String name;
private String price;
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
name = request.getParameter("name");
price = request.getParameter("price");
map.remove(name);
map.put(name, price);
RequestDispatcher rd = request
.getRequestDispatcher("/WEB-INF/RestaurantJSP86105511.jsp");
rd.forward(request, response);
}
public static HashMap<String, String> getMap() {
return map;
}
}
我不知道我做错了什么,但每次调用 rd.forward 后,地图内容也会被删除,jsp 只会打印我在 URL 中输入的最后一个参数。 还有其他方法可以从 servlet 调用 jsp 吗?还是我只是做错了?
【问题讨论】:
-
由于每次调用
doGet(),您都会在映射中添加name,它会替换与此键name关联的先前值。remove()在您的情况下是多余的。 -
在 Servlet 中包含实例(或静态)变量是不好的做法,因为它们本质上不是线程安全的。学习 MVC 来构建您的应用程序。
标签: java jsp jakarta-ee servlets