JSP验证和重定向:如何验证表单输入并将错误转发回原始页面?

Kir*_*ril 7 java validation jsp

我正在上JSP,我有一个任务...我们必须编写一个JSP页面,它接受用户输入,验证输入,然后将其转发到不同的网站.更确切地说,我们被要求实施Amtrak网站的FareFinder功能的基本版本.

这个任务有两个主要目的:
(a)编写作为中间件执行的JSP;
(b)编写验证表格数据的JSP.

关于进行验证的原则,我有一个普遍的问题.目前我有一个JSP,它有一个表单和一个提交按钮.当用户单击提交按钮时,我将它们转发到Validate.jsp.然后Validate.jsp将验证数据,如果输入正常,它将自动将请求重定向到Amtrak网站,并填写所有参数.

FareFinder.jsp - > Validate.jsp - > Amtrak
(点击文件名查看我在牧场中的所有代码)

简而言之,我正在做FareFinder.jsp的主要事情:

<FORM METHOD=POST ACTION="Validate.jsp">
    <!-- all the input fields are up here -->
    <P><INPUT TYPE=SUBMIT></P>
</FORM>
Run Code Online (Sandbox Code Playgroud)

我在Validate.jsp中做的主要事情:

<%@ page import="java.util.*" import="java.io.*"%>
<%
    // retreive all the parameters
    String origin = request.getParameter("_origin");
    String depmonthyear = request.getParameter("_depmonthyear");
    String depday = request.getParameter("_depday");
    String dephourmin = request.getParameter("_dephourmin");
    String destination = request.getParameter("_destination");
    String retmonthyear = request.getParameter("_retmonthyear");
    String retday = request.getParameter("_retday");
    String rethourmin = request.getParameter("_rethourmin");
    String adults = request.getParameter("_adults");
    String children = request.getParameter("_children");
    String infants = request.getParameter("_infants");
    String searchBy = request.getParameter("_searchBy");

    // validate the data

    // redirect to Amtrak or back to FareFinder.jsp
%>
Run Code Online (Sandbox Code Playgroud)

我有几个问题:
如何从Validate.jsp返回FareFinder.jsp并反映验证页面中发现的错误?
一旦发现错误,我是否会将响应重定向回FareFinder.jsp?
我怎么能将错误传回FareFinder.jsp?

一般的答案也可以,但我以我的代码为例.

注意:验证必须在服务器端执行,我不能使用javascript.

Bal*_*usC 9

好的,根据评论,Servlet也会被覆盖.现在,创建一个并实现doPost()如下(半伪):

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Map<String, String> errors = new HashMap<String, String>();

    String origin = request.getParameter("origin");
    if (origin does not validate) {
       errors.put("origin", "Put error message here.");
    }

    // Repeat for all parameters.

    if (errors.isEmpty()) {
        // No errors, redirect to Amtrak.
        response.sendRedirect("http://amtrak.com");
    } else {
        // Put errors in request scope and forward back to JSP.
        request.setAttribute("errors", errors);
        request.getRequestDispatcher("FareFinder.jsp").forward(request, response);
    }
}
Run Code Online (Sandbox Code Playgroud)

将此servlet映射web.xml到其中url-pattern,/validateFare以便您可以通过它来调用它http://example.com/context/validateFare.

现在在JSP中执行以下操作:

<form action="validateFare" method="post">
    <label for="origin">Origin</label>
    <input id="origin" name="origin" value="${param.origin}">
    <span class="error">${errors.origin}</span>

    <!-- Repeat other fields here. -->
</form>
Run Code Online (Sandbox Code Playgroud)

您看到表单action已指向servlet.该${param.origin}输入值将做保留提交的值request.getParameter("origin")的罩下.在${errors.origin}将大致做显示任何关联的错误消息pageContext.findAttribute("errors").get("origin").

这必须让你开始:)祝你好运.