【问题标题】:Calling a JSP from Servlet with a dynamic Map使用动态 Map 从 Servlet 调用 JSP
【发布时间】: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


【解决方案1】:

你应该做的是把你的地图作为一个属性放入请求中:

request.setAttribute("yourMap", map);

然后在 JSP 中你可以使用 JSTL 和 EL 来访问这些值。

Price: ${yourMap.price}
Name: ${yourMap.name}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2021-06-29
    • 1970-01-01
    相关资源
    最近更新 更多