我有一个转发到表单的SERVLET_A(form.jsp页面)。表单提交给SERVLET_B。在通过SERVLET_B将值插入数据库之后,我必须在表单上显示消息“值已成功插入”或错误消息。现在问题就在这里。
我尝试让requestdispatcher从SERVLET_B转发到SERVLET_A。但它不起作用也不会给我一个错误。
SERVLET_A -----------> FORM.jsp -----------> SERVLET_B -----------------> SERVLET_A
我的问题不是如何完成这项工作。因为如果我使用sendRedirect而不是requestDispatcher,它就可以工作。我的问题在下面
我的理解是否正确,servlet无法转发回调用它的servlet。?
我通过在会话中设置我的消息并使用sendredirect来实现此目的。这种方法是否正确?
有人告诉我,从servlet显示表单总是更好。 (隐藏url并始终使用控制器)这就是为什么我有一个servlet_A转发到form.jsp。我可以直接访问form.jsp但是想通过servlet来实现它,这就是创建SERVLET_A的原因。 来自php背景这对于处理表单来说似乎都很多。任何人都可以告诉我如何在jsp MVC架构中处理表单。(没有框架)
答案 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)
使用框架与否并没有太大区别。
这就是我的方式:
form
给予:<form method="POST">
没有任何操作 - 使用相同的网址主要是意见问题... response.senRedirect(...)
)。这样,即使用户重新加载其页面或按下其浏览器的后退按钮,它也不会再次发布,而只是重新获取重定向的URL。