-1

在我的 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} 获得价值

我的问题是,当我进入地址栏并按 Enter 时,${cost} 什么也没有打印。

知道那是因为它调用 doGet() 方法,但我该如何解决这个问题?

4

1 回答 1

1

您需要了解 servlet 应用程序的流程。

当您在浏览器中提交表单时,浏览器会序列化输入参数并创建GET/POST请求。它将这个请求发送到您的服务器,并选择一个 servlet 来处理它。您放入请求属性中的属性有利于该请求的生命周期,即。直到返回响应。它们在第二个请求中将不可用。

在您的问题中,您提交POST请求(例如通过单击按钮),请求被发送并doPost()执行您的 servlet 方法。这些线

request.setAttribute("cost", cost);
request.getRequestDispatcher("makepayment.jsp").forward(request, response); 

将属性添加cost到请求属性并转发到jsp资源。该资源将有权访问请求属性,例如。${cost},同时生成最终将返回给客户端的响应。

我的问题是,当我进入地址栏并按 Enter 时,${cost} 什么也没有打印。

如果您转到地址栏并按 Enter 键,则会发送一个新请求,因此,在没有看到您的情况下doGet(),上一个请求的请求属性将不存在。您需要以某种方式持久化它们,可能使用会话属性。

于 2013-09-09T13:37:37.567 回答