在我的JAVA动态Web应用程序中,我通过action =“post”将值从Payment.jsp传递给servlet。 在servlet中的doPost()方法:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
String cost=request.getParameter("COST_ID");
HttpSession session=request.getSession();
synchronized (session) {
session.setAttribute("payamount", cost);
}
request.setAttribute("cost", cost);
request.getRequestDispatcher("makepayment.jsp").forward(request, response);
}
在makepayment.jsp中,我使用$ {cost}
获取值我的问题是,当我去地址栏并按下输入$ {cost}不打印任何内容。
知道这是因为它调用了doGet()方法,但我该如何解决这个问题呢?
答案 0 :(得分:1)
您需要了解servlet应用程序的流程。
当您在浏览器中提交表单时,浏览器会对输入参数进行序列化并创建GET
/ POST
请求。它将此请求发送到您的服务器,并选择一个servlet来处理它。您在请求属性中放置的属性适用于该请求的生命周期,即。直到返回响应。它们将不会在第二次请求中提供。
在您的问题中,您提交POST
请求(例如,通过单击按钮),发送请求并执行您的servlet的doPost()
方法。这些行
request.setAttribute("cost", cost);
request.getRequestDispatcher("makepayment.jsp").forward(request, response);
将属性cost
添加到请求属性并转发到jsp
资源。该资源可以访问请求属性,例如。 ${cost}
,同时生成最终将返回给客户端的响应。
我的问题是,当我去地址栏并按回车时,$ {cost}不打印任何内容。
如果您转到地址栏并按Enter键,则会发送新请求,因此,在未看到您的doGet()
的情况下,上一个请求中的请求属性将不存在。您需要以某种方式持久化它们,可能使用会话属性。