Servlet ReqeustDispatcher转发给调用者或以前的servlet

时间:2014-08-09 13:36:17

标签: java jsp servlets model-view-controller requestdispatcher

我有一个转发到表单的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架构中处理表单。(没有框架)

2 个答案:

答案 0 :(得分:0)

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

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

<强> form.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 =&#34; sb&#34;

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代表Controller。它是你的servlet。表单中提交的所有数据均由servlet收集。此处也没有处理,只收集所有数据。然后创建一个普通Java类的对象,它实际上是你的M ie模型类,它将处理数据并返回结果。在您的情况下,您应该将数据库部分作为Model类进行,特别是使用DAO设计模式
     - servlet将获取结果并将其传递给JSP或HTML页面以显示它。

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

答案 1 :(得分:0)

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

这就是我的方式:

  • 使用servlet(方法doGet)预处理请求,从数据库获取值等,将值放在请求属性中并转发到servlet以显示HTML - 好吧,它是servlet A + form.jsp < / LI>
  • 使用帖子处理提交的表单;这样,您可以使用相同的servlet但doPost方法,并且form给予:<form method="POST">没有任何操作 - 使用相同的网址主要是意见问题...
  • 在doPost结束时,重定向到servletA或其他URL(response.senRedirect(...))。这样,即使用户重新加载其页面或按下其浏览器的后退按钮,它也不会再次发布,而只是重新获取重定向的URL。