【问题标题】:Java Servlet that Validates an HTML Form验证 HTML 表单的 Java Servlet
【发布时间】:2014-03-27 13:29:49
【问题描述】:

我是 Java 和 servlet 的新手,这只是我坚持的练习。我有一个简单的 HTML 表单,其中包含两个文本字段用于名字和姓氏,以及两个用于性别的单选按钮,以及一个提交按钮。当用户正确填写表单时,servlet 会返回一个页面,上面写着“欢迎光临我的商店,先生或女士(取决于性别按钮)以及他们的名字和姓氏。我所有的工作都正常。我不能得到什么to work 是一个 try-catch 块,如果他们错过了一个名称字段或没有检查性别单选按钮,它将提醒用户。在这种情况下,try-catch 是要走的路还是我应该使用if 循环?我已经在不同的位置插入了 try-catch,但它似乎没有做任何事情。所以我的底线问题是让表单验证工作的最佳方法是什么?

HTML 表单:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"       "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Project 7</title>
</head>
<body  bgcolor="#FFFFD1">
<p align="left">
<h1>Please Enter Your Name</h1>
<form action="http://localhost:8080/Project/Main">
  First Name:&nbsp;<input type="text" name="firstName" ><br>
  Last Name:&nbsp;<input type="text" name="lastName" ><br><br><br>

  Gender &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   Male<input type="radio" name="rd" value = "0">&nbsp;&nbsp;
    Female<input type="radio" name="rd" value = "1"><br><br><br>

  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="Submit Query">

</form>

</body>
</html>

Servlet 代码:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Main")
public class Main extends javax.servlet.http.HttpServlet implements
    javax.servlet.Servlet {
static final long serialVersionUID = 1L;

public Main() {
    super();
}

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "Welcome to My Store";
    int radio = -1;

    String gender = "";

    radio = Integer.parseInt(request.getParameter("rd"));

    switch (radio) {
    case 0:
        gender = "Mr";
        break;
    case 1:
        gender = "Ms";
        break;
    default:
        gender = "";
        break;
    }

    out.println("<html>\n" + "<head><title>" + title + "</title></head>\n"
            + "<body bgcolor=\"#ffffd1\">\n" + "<h1 align=\"right\">"
            + title + "</h1>\n" + "<ul>\n" + "</ul>\n" + "" + "Thank you "
            + gender + " " + request.getParameter("firstName") + " "
            + request.getParameter("lastName") + "</body></html>");

}
}

【问题讨论】:

  • 使用 javascript 验证 HTML 中的表单
  • try-catch 用于异常处理,但不会得到任何异常。
  • 那么 if-else 循环会起作用吗?例如如果 firstName == null out.println“必须输入名字”等等?我只是想弄清楚如何提醒用户填写所有空白。而且我真的处于学习模式,所以完成它的最简单方法是最好的。
  • if-else 结构是条件而不是循环。我发布了一个答案。

标签: java html forms servlets


【解决方案1】:

我会将表单数据POST 发送到servlet。你必须换行

<form action="http://localhost:8080/Project/Main">

<form action="http://localhost:8080/Project/Main" method="post">

那么您将不得不重写 servlet doPost() 方法。在此方法中,您可以验证参数,如果它们是错误的,您只需重新发送原始 HTML + 有关错误字段的一些信息。如果发送的数据没问题,您可以发送新的 HTML。

例如:

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    String title = "Welcome to My Store";

    String firstName = request.getParameter("firstName");
    String lastName = request.getParameter("lastName");
    String gender = request.getParameter("rd");
    List<String> errors = new ArrayList<String>();

    response.setContentType("text/html");

    if (firstName.equals("") || null == firstName) {
        errors.add("First Name can't be empty.");
    }

    // Check the other fields the same way.

    if (!errors.isEmpty()) {
        // There are errors. Send the old HTML and for example add
        // a list with the error messages.
        String errorList = "<ul>";

        for (String error : errors) {
            errorList += "<li>" + error + "</li>";
        }

        errorList += "</ul>";

        // Insert errorList to the other HTML.
    } else {
        // No errors! Send the new HTML.
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2014-08-10
    • 1970-01-01
    相关资源
    最近更新 更多