提交 HTML 表单时如何将数据从 JSP 传输到 servlet

How to transfer data from JSP to servlet when submitting HTML form

提问人:Saska 提问时间:2/12/2011 最后编辑:BalusCSaska 更新时间:12/20/2022 访问量:156626

问:

我有一个带有 HTML 表单的 JSP 页面:

<form action="SERVLET">
    <input type="text" name="name"/><br>        
    <input type="text" name="group"/>
    <input type="text" name="pass"/>
    <input type="submit" value="submit">            
</form>

如何在 servlet 中获取这些数据并将它们添加到数据库中?

JSP Servlet 表单

评论


答:

85赞 BalusC 2/12/2011 #1

创建一个扩展 HttpServlet 的类,并在其上放置@WebServlet注释,其中包含 servlet 应侦听的所需 URL。

@WebServlet("/yourServletURL")
public class YourServlet extends HttpServlet {}

只需指向此 URL。我还建议对非幂等请求使用 POST 方法。您应确保已指定 HTML 表单输入字段(、 和 )的属性。这表示 HTTP 请求参数名称。最后,您还需要确保感兴趣的输入字段包含在所需表单内,而不是外部。<form action>name<input><select><textarea><button>

以下是各种 HTML 表单输入字段的一些示例:

<form action="${pageContext.request.contextPath}/yourServletURL" method="post">
    <p>Normal text field.        
    <input type="text" name="name" /></p>

    <p>Secret text field.        
    <input type="password" name="pass" /></p>

    <p>Single-selection radiobuttons.        
    <input type="radio" name="title" value="Mr" /> Mr
    <input type="radio" name="title" value="Ms" /> Ms
    <input type="radio" name="title" value="Mx" /> Mx</p>

    <p>Single-selection checkbox.
    <input type="checkbox" name="agree" /> Agree?</p>

    <p>Multi-selection checkboxes.
    <input type="checkbox" name="role" value="USER" /> User
    <input type="checkbox" name="role" value="ADMIN" /> Admin</p>

    <p>Single-selection dropdown.
    <select name="countryCode">
        <option value="NL">Netherlands</option>
        <option value="US">United States</option>
    </select></p>

    <p>Multi-selection listbox.
    <select name="animalId" multiple="true" size="2">
        <option value="1">Cat</option>
        <option value="2">Dog</option>
    </select></p>

    <p>Text area.
    <textarea name="message"></textarea></p>

    <p>Submit button.
    <input type="submit" name="submit" value="Submit" /></p>

    <p>Cancel button.
    <input type="submit" name="cancel" value="Cancel" /></p>
</form>

在 servlet 中创建一个 doPost() 方法,该方法将提交的输入值作为请求参数获取,这些参数由输入字段的 (not !) 键控。您可以使用从单值字段获取提交值,以及从多值字段获取提交值。nameidrequest.getParameter()request.getParameterValues()

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String name = request.getParameter("name");
    String pass = request.getParameter("pass");
    String title = request.getParameter("title");
    boolean agree = request.getParameter("agree") != null;
    String[] roles = request.getParameterValues("role");
    String countryCode = request.getParameter("countryCode");
    String[] animalIds = request.getParameterValues("animalId");
    String message = request.getParameter("message");
    boolean submitButtonPressed = request.getParameter("submit") != null;
    boolean cancelButtonPressed = request.getParameter("cancel") != null;
    // ...
}

如有必要,请进行一些验证,最后以通常的 JDBC/DAO 方式将其持久化到数据库中。

User user = new User(name, pass, roles);
userDAO.save(user);

另请参阅:

评论

0赞 Somebody 12/28/2018
这是我一直在寻找的一段代码:在表单操作中${pageContext.request.contextPath}
0赞 staminna 3/4/2020
如何使用javac编译上述java代码?
0赞 POSIX_ME_HARDER 2/12/2011 #2

http://oreilly.com/catalog/javacook/chapter/ch18.html

寻找:

“问题

您希望在 servlet 中处理来自 HTML 表单的数据。"

3赞 Chris Thompson 2/12/2011 #3

嗯,网上有很多关于java的数据库教程(你要找的叫做JDBC)。但是,如果您使用普通 servlet,您将有一个扩展的类,并且在其中您将有两个如下所示的方法HttpServlet

public void doPost(HttpServletRequest req, HttpServletResponse resp){

}

public void doGet(HttpServletRequest req, HttpServletResponse resp){

}

其中一个用于处理操作,另一个用于处理操作。然后,您将使用该对象来获取作为表单的一部分传递的参数,如下所示:GETPOSTHttpServletRequest

String name = req.getParameter("name");

然后,一旦从表单中获取了数据,就可以相对容易地使用Web上广泛提供的JDBC教程将其添加到数据库中。我还建议搜索一个基本的 Java servlet 教程来帮助您入门。这非常简单,尽管有许多步骤需要正确配置。

-2赞 dnyaneshwar 2/8/2016 #4

首先创建您的JSP文件: 并写下您想要的
文本字段,例如:

之后,创建您的 servlet 类:

public class test{

protected void doGet(paramter , paramter){

String name  = request.getparameter("name");
 }

}

评论

0赞 BalusC 2/8/2016
在已经给出的答案之上,这究竟是如何贡献的?换句话说,你为什么要重复一个已经给出的答案?Stack Overflow 是一个问答网站,每个人都可以在其中发布答案并在达成一致后相互投票。Stack Overflow 不是一个老式的讨论论坛,每个人都在达成协议后互相重复,陷入难以消化的混乱之中。Stack Overflow 通过这种方式更容易找到好的答案。
0赞 zawarudo 4/18/2021
我们在之前被接受的答案中有这些信息。