Servlet URL重定向

时间:2013-09-09 12:08:10

标签: jsp servlets

在我的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()方法,但我该如何解决这个问题呢?

1 个答案:

答案 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()的情况下,上一个请求中的请求属性将不存在。您需要以某种方式持久化它们,可能使用会话属性。