0

我有一个 SERVLET_A 转发到一个表单(form.jsp 页面)。表单提交给 SERVLET_B。SERVLET_B 将值插入数据库后,我必须在表单上显示消息“值插入成功”或错误消息。现在问题出在此处。

我试图让 requestdispatcher 从 SERVLET_B 转发到 SERVLET_A。但它不起作用,也不会给我一个错误。

SERVLET_A -----------> FORM.jsp ----------->SERVLET_B----------------->SERVLET_A

我的问题不是如何完成这项工作。因为如果我使用 sendRedirect 而不是 requestDispatcher 它会起作用。我的问题如下

  1. 我的理解是正确的,servlet 不能转发回首先调用它的 servlet。?

  2. 我通过在会话中设置我的消息并使用 sendredirect 来实现这一点。这种方法正确吗?

  3. 有人告诉我,从 servlet 显示表单总是更好。(隐藏 url 并始终使用控制器)这就是为什么我有一个 servlet_A 转发到 form.jsp。我可以直接访问 form.jsp,但想通过 servlet 进行访问,这就是创建 SERVLET_A 的原因。来自 php 背景,这一切似乎都无法处理表单。任何人都可以让我知道在jsp MVC架构中通常如何处理表单。(没有框架)

4

2 回答 2

0

你的代码有问题。如果您发布代码会更好。我会一一回答你的问题。
1. 是的 ServletB 可以再次将请求转发回 servletA 我在
ServletA GET 方法urlpattern="sa"下面发布示例代码

RequestDispatcher view=request.getRequestDispatcher("form.jsp");
view.forward(request, response);

表单.jsp

<body>
   <form action="./sb">
      <input type="text" name="fn" />
      <input type="submit"  value="Submit" />
    </form>
    <%= "fn : "+(String)session.getAttribute("fn") %>
</body>

ServletB GET 方法urlpattern="sb"

String fn = request.getParameter("fn");
request.getSession().setAttribute("fn",fn);
RequestDispatcher view=request.getRequestDispatcher("sa");
view.forward(request, response);

2.如何在没有框架的情况下使用MVC处理表单
-这里V代表视图。它的 jsp 或 html 页面。你在那里展示一切。此处不应进行任何处理。
- C 代表控制器。它是你的 servlet。以表单形式提交的所有数据均由 servlet 收集。这里也没有处理,只收集所有数据。然后创建一个对象,一个普通的 Java 类,它实际上是您的 M ie 模型类,它将处理数据并返回结果。在您的情况下,您应该专门使用 DAO 设计模式将数据库部分作为模型类执行
- servlet 将获取结果并将其传递给 JSP 或 HTML 页面以显示它。

你应该做什么
正如我从您的方法中了解到的那样,这是一个错误的方法。您应该使用 Servlet 3.0 使用 Ajax 或异步处理请求。我的意思是,您不应该在处理完成后将请求转发回 ServletA 即 jsp。相反,您应该向 ServletB 生成异步请求以提交数据。现在,当生成结果时,ServletB 将响应作为 JSON 字符串发送,该字符串由 javascript 在您的 form.jsp 页面上显示

于 2014-08-09T14:44:31.703 回答
0

是否使用框架并没有太大区别。

这就是我的做法:

  • 使用 servlet(方法 doGet)预处理请求,从数据库中获取值等,将值放入请求属性中并转发到 servlet 以显示 HTML - 好的,它是 servlet A + form.jsp
  • 使用 post 处理提交的表单;这样,您可以使用相同的 servlet 但 doPost 方法和您的formgive :<form method="POST">无需任何操作 - 使用相同的 url 在很大程度上是见仁见智...
  • 在 doPost 结束时,重定向到 servletA 或另一个 url ( response.senRedirect(...))。这样,即使用户重新加载其页面或按下其浏览器的返回按钮,它也不会再次发布,而只是再次获得重定向的 URL。
于 2014-08-09T15:07:55.373 回答