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

46

我有一个带有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中获取这些数据并将它们添加到数据库中?
4个回答

85
创建一个继承HttpServlet的类,并在其上放置包含所需URL的@WebServlet注释,以便该servlet监听它。
@WebServlet("/yourServletURL")
public class YourServlet extends HttpServlet {}

请将以下内容翻译为中文:

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

以下是各种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()方法,该方法将以请求参数为键的形式获取提交的输入值,键名为输入字段的name(而不是id)。您可以使用request.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);

参见:


这是我正在寻找的代码片段:${pageContext.request.contextPath} 在表单操作中。 - Somebody
你如何使用javac编译上述Java代码? - staminna

3

好的,有很多关于Java数据库教程的在线资源(你所需要的是JDBC)。但是如果你正在使用普通的servlet,你将拥有一个扩展了HttpServlet类的类,并且在其中你将有两个看起来像这样的方法:

public void doPost(HttpServletRequest req, HttpServletResponse resp){

}

并且

public void doGet(HttpServletRequest req, HttpServletResponse resp){

}

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

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

一旦您获取了表单数据,使用广泛可用于网络的JDBC教程将其添加到数据库中就相对容易了。我还建议搜索基本的Java servlet教程以帮助您入门。虽然需要正确配置多个步骤,但这很容易。


0

-2

首先在创建JSP文件时: 编写您所需的文本字段
例如:

然后创建你的Servlet类:

public class test{

protected void doGet(paramter , paramter){

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

}

这句话的意思是什么?换句话说,为什么你要重复已经给出的答案?Stack Overflow 是一个问答网站,每个人都可以发布答案并根据同意进行投票。Stack Overflow 不是一个老式的讨论论坛,在那里每个人都会在同意的情况下互相重复,形成难以消化的混乱。通过这种方式,Stack Overflow 使得寻找好的答案变得更加容易。 - BalusC
我们在之前被接受的答案中提供了这些信息。 - zawarudo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接