【问题标题】:Storing and Retrieving Values In Request Scope在请求范围内存储和检索值
【发布时间】:2013-12-21 17:17:38
【问题描述】:

我做了一个jsp页面,用于注册会员,注册时如果忘记填写表格中的任何字段,会在另一个页面显示错误消息。

为了实现这一点,我使用了 3 个 servlet,第一个 servlet 从 jsp 页面获取值并传递给第二个 servlet,该 servlet 检查是否有任何字段为空,如果是,则返回一条消息给第一个servlet ,然后将消息传递给第三个 servlet 以向用户显示错误消息。

我的问题是消息没有从第一个 servlet 传递到第三个 servlet。它只是返回 null。

这是我所做的:

第一个 Servlet 代码:

        String firstName=request.getParameter("firstName");
        String lastName=request.getParameter("lastName");

        String userName=request.getParameter("userName");
        String password=request.getParameter("password");

   Message message=Authenticator.registerUser(firstName, lastName, userName,"Student", password);
   HttpSession mySession=request.getSession();
   RequestDispatcher failMessageDispatcher=                   request.getRequestDispatcher("/ErrorController");

   String message1=message.getMessage(); //gets the message to a variable
   request.setAttribute("message", message1);  // puts the variable in to the request scope 

   out.println(message1);
   if(message.getStatus().equals("0"))
   {

       failMessageDispatcher.forward(request, response); //forwards to the third servlet for displaying

   }

第三个 Servlet 代码:

       String message= request.getParameter("message"); //get the message from the request scope
       out.println(message); //display the message

我知道它在请求范围内有问题,因为如果将其放入会话范围,它可以工作,但问题是我想将请求范围用于这项工作。我怎样才能做到这一点?

感谢您的宝贵时间。

【问题讨论】:

  • 为什么要使用请求范围?这不是它的本意。
  • 只是我不想创建会话只是为了显示错误消息。
  • 好吧,我犯了一个错误。现在我确实注意到了,我在第三个 servlet 中使用了 request.getParameter 而不是 request.getAttribute(),这就是它返回 null 的原因。

标签: java jsp servlets request


【解决方案1】:

由于在这种情况下,默认值已进入请求范围,因此您获得了 null 值。

在请求范围的情况下,当响应发回时它不存在。

每当您单击任何链接时,都会创建新的请求和响应对象

一旦响应发回,那么请求和响应就不再有效或者被销毁

即使点击相同的链接。

请求范围的持续时间最短。

当转发相同的请求并包含请求范围时才有意义,否则它会被销毁

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2017-06-12
    相关资源
    最近更新 更多