Java JSP/Servlet验证-转发与重定向

Java JSP/Servlet验证-转发与重定向,java,validation,servlets,redirect,forward,Java,Validation,Servlets,Redirect,Forward,我想完成以下几点: 我有一个用JSP表示的表单,我们称之为input.JSP。此表单提交给一个servlet,该servlet将在数据库中创建对象–让我们调用此CreateServlet。成功提交表单后,servlet应引导用户返回到input.jsp,并显示一条成功消息。当验证失败时,它应该重定向回input.jsp,显示错误消息,保留输入值 我可以想出几个选择: 验证失败时,我可以使用RequestDispatcher执行转发到input.jsp。这将允许我轻松显示表单中的验证错误和输入参数

我想完成以下几点:

我有一个用JSP表示的表单,我们称之为
input.JSP
。此表单提交给一个servlet,该servlet将在数据库中创建对象–让我们调用此
CreateServlet
。成功提交表单后,servlet应引导用户返回到
input.jsp
,并显示一条成功消息。当验证失败时,它应该重定向回
input.jsp
,显示错误消息,保留输入值

我可以想出几个选择:

  • 验证失败时,我可以使用
    RequestDispatcher
    执行转发到
    input.jsp
    。这将允许我轻松显示表单中的验证错误和输入参数。然而,我知道,当请求成功时,我不应该做转发,而应该做重定向。重定向的问题是,除非在URL中传递属性,否则无法轻松设置属性,例如
    input.jsp?success=true

  • 我可以在会话中存储验证消息、成功消息和输入值,并始终执行重定向。JSP显示页面后,可以从会话中删除这些属性


  • 我使用的是普通的servlet和JSP,而不是任何类似Struts的框架。在这种情况下,推荐的做法是什么?

    如果我是你,我会选择第二个选项。我的理由:

    • 将其作为一个对象来封装该表单中的所有输入。会的 如果需要向表单添加属性,则更易于维护
    • 它更安全,因为您的url将从属性中清除

    如果您使用像struts这样的框架,这将非常容易。一切都将由他们来处理。

    我在Web应用程序(使用MVC框架)中遇到了同样的问题,并使用了第二种方法(MVC框架通过提供对
    HttpSession
    的访问来简化,但最终就像调用
    HttpServletRequest#getSession
    )。即使用户在同一浏览器的不同选项卡中打开同一页面,也没有问题。请使用页面级cookie而不是会话来存储消息