当前位置: 首页 > 知识库问答 >
问题:

在请求范围内存储和检索值

祝锐
2023-03-14

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

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

我的问题是消息没有从第一个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

我知道这是请求范围中的一个问题,因为如果将其放在会话范围中,它就会工作,但问题是我想使用请求范围来完成这项工作。我怎样才能做到这一点?

谢谢你的时间。

共有1个答案

夏祯
2023-03-14

您得到的是空值,因为在本例中,默认值来自请求范围。

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

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

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

即使点击同一个链接。

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

当同一个请求被转发并包含时,那么请求范围就有意义了,否则它将被销毁

 类似资料:
  • 我想在我的web应用程序中使用Spring事件与我的bean“说话”。 例如,fired事件的bean如下所示: 所以,我的问题是: 事件侦听器是作用域请求是否可能?而如何做到这一点呢? 谢谢

  • 无论 Struts2 还是 Spring,都提供了一种控制器: 每次请求,创建实例,使用后即抛弃。 这样的控制器的好处就是可以放心的吧 request 和 response 对象放心的存成它的私有 属性,反正使用一次后就丢掉了。 在 Nutz.Mvc,所谓控制器,实际上就是 Module,默认的,所有的模块都是整个应用程序唯一的, 除非你在 Ioc 配置文件里另有说明。 那么 Nutz 可以做到每

  • 问题内容: 我有很多不同提供商的IP范围。例如 我将此IP转换为int32: 我的任务: 通过用户IP地址查找提供者名称(例如192.168.2.20(3232236052)) 在MySQL中很简单: Redis怎么做? 问题答案: 这取决于您是否认为您的IP范围可以重叠。如果不是,则解决方案非常简单: 使用哈希的集合来存储提供者数据 使用zset索引范围的最大值 检索最大值大于IP的(唯一)范围

  • 问题内容: java中是否有一种优雅的方法来检查int是否等于或大于或小于1。 例如,如果我检查周围。我想在上返回true ,因为4和6距5仅1。 有内置功能可以做到这一点吗?还是我最好这样写? 当然,以上代码很难看懂。那有更好的方法吗? 问题答案: 找到它们之间的绝对差异 基于@GregS关于溢出的评论,如果您给出的差值不能适合整数,您将获得一个溢出值 通过将其中一个参数强制转换为long 将返

  • 我有一个基于LazyDataModel的Primeface DataTable。我成功地在表中加载了数据,但我无法使用setProperty tyActionListener在对话框中显示选定的项目,也无法编辑行。我正在使用请求范围,我注意到这个问题似乎在会话范围内得到解决,但我宁愿使用前者(视图范围甚至不会在表中加载数据)。我已经尝试覆盖getRowData和getRowKey方法,但它们甚至没

  • 尝试从云服务Web角色中运行的Azure存储帐户读取 我找到的所有关于这个主题的文章都表明,问题在于存储连接字符串或blob容器名称中的大写字母。 以下是代码: 异常被抛出blobContainer。设置权限。 当使用相同的代码和相同的凭证从计算仿真器(而不是从实时Web角色)访问相同的容器时,一切正常。我从Neudesic的Azure存储资源管理器中读取blob容器没有问题。 可能相关:我的本地