← 返回首页
Servlet基础教程(十七)
发表时间:2020-04-08 17:34:29
讲解Servlet接收表单数据(同步)

1.编写实体类用来储存表单数据

package com.entity;

import java.util.Arrays;
import java.util.Date;

public class Users {

    private String username;
    private String password;
    private String email;
    private double salary;
    private String gender;
    private int education;
    private String province;
    private Date birthday;
    private String[] favorites;
    private String introduce;
    private boolean accept;

    public Users() {
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getEducation() {
        return education;
    }

    public void setEducation(int education) {
        this.education = education;
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String[] getFavorites() {
        return favorites;
    }

    public void setFavorites(String[] favorites) {
        this.favorites = favorites;
    }

    public String getIntroduce() {
        return introduce;
    }

    public void setIntroduce(String introduce) {
        this.introduce = introduce;
    }

    public boolean getAccept() {
        return accept;
    }

    public void setAccept(boolean accept) {
        this.accept = accept;
    }

    @Override
    public String toString() {
        return "Users{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", salary=" + salary +
                ", gender='" + gender + '\'' +
                ", education=" + education +
                ", province='" + province + '\'' +
                ", birthday=" + birthday +
                ", favorites=" + Arrays.toString(favorites) +
                ", introduce='" + introduce + '\'' +
                ", accept='" + accept + '\'' +
                '}';
    }
}

2.根据实体类设计一个用户注册表单

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
</head>
<body>
<h1>用户注册</h1>
<hr>
<div>
    <!--注意这里action属性的内容是处理表单的servlet映射地址,也即servlet中@WebServlet的value相同-->
    <form name="regForm" action="reg" method="post">
        <table>
            <tr>
                <td class="title">用户名:</td>
                <td><input type="text" name="username"/></td>
            </tr>
            <tr>
                <td class="title">密码:</td>
                <td><input type="password" name="password"/></td>
            </tr>
            <tr>
                <td class="title">确认密码:</td>
                <td><input type="password" name="confirmpass"/></td>
            </tr>
            <tr>
                <td class="title">电子邮箱:</td>
                <td><input type="text" name="email" value=""/></td>
            </tr>
            <tr>
                <td class="title">薪水:</td>
                <td><input type="text" name="salary" value="10000" hidden/></td>
            </tr>
            <tr>
                <td class="title">性别:</td>
                <td><input type="radio" value="M" name="gender" checked/>男<input type="radio" value="F" name="gender"/>女
                </td>
            </tr>
            <tr>
                <td class="title">学历:</td>
                <td>
                    <select name="education">
                        <option value="-1" selected>-----请选择-----</option>
                        <option value="0">文盲</option>
                        <option value="1">小学</option>
                        <option value="2">初中</option>
                        <option value="3">高中</option>
                        <option value="4">大专</option>
                        <option value="5">本科</option>
                        <option value="6">硕士</option>
                        <option value="7">博士</option>
                        <option value="8">博士后</option>
                        <option value="9">圣斗士</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td class="title">籍贯:</td>
                <td>
                    <input list="province" name="province" value=""/>
                    <datalist id="province">
                        <option value="河北">
                        <option value="河南">
                        <option value="山东">
                        <option value="山西">
                        <option value="陕西">
                    </datalist>
                </td>
            </tr>
            <tr>
                <td class="title">出生日期:</td>
                <td><input type="date" name="birthday" value=""/></td>
            </tr>
            <tr>
                <td class="title">爱好:</td>
                <td>
                    <!--复选框name名字必须一样-->
                    <input type="checkbox" name="favorites" value="read"/>读书
                    <input type="checkbox" name="favorites" value="music"/>音乐
                    <input type="checkbox" name="favorites" value="internet"/>上网
                    <input type="checkbox" name="favorites" value="nba"/>NBA
                </td>
            </tr>
            <tr>
                <td class="title">自我介绍:</td>
                <td><textarea rows="10" cols="25" name="introduce"></textarea></td>
            </tr>
            <tr>
                <td class="title">上传照片:</td>
                <td><input type="file" name="pic"/></td>
            </tr>
            <tr>
                <td class="title">是否接受条款:</td>
                <td><input type="checkbox" name="accept" value="true"/>我无条件接受霸王条款</td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit" value="注册"/><input type="reset" value="重置"/></td>
            </tr>
        </table>
    </form>
</div>

</body>
</html>

3.编写RegServlet

package com.servlet;

import com.entity.Users;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;

@WebServlet(name = "RegServlet",value="/reg",loadOnStartup = 1)
public class RegServlet extends HttpServlet {


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Users regUser = new Users();
            regUser.setUsername(request.getParameter("username"));
            regUser.setPassword(request.getParameter("password"));
            regUser.setEmail(request.getParameter("email"));
            regUser.setGender(request.getParameter("gender"));
            regUser.setSalary(Double.parseDouble(request.getParameter("salary")));
            regUser.setEducation(Integer.parseInt(request.getParameter("education")));
            regUser.setProvince(request.getParameter("province"));
            regUser.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("birthday")));
            //注意:字符串数组属性使用getParameterValues方法接收。
            regUser.setFavorites(request.getParameterValues("favorites"));
            regUser.setIntroduce(request.getParameter("introduce"));
            regUser.setAccept(Boolean.parseBoolean(request.getParameter("accept")));

            System.out.println("********注册用户资料*********");
            System.out.println(regUser);
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }

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

4.测试

启动tomcat,填写用户注册表单后,点击注册提交按钮。

控制台输出效果:

********注册用户资料*********
Users{username='zhangsan', password='123456', email='zhangsan@126.com', salary=10000.0, gender='F', education=6, province='?±±???', birthday=Wed Mar 15 00:00:00 CST 1995, favorites=[internet, nba], introduce='?¨???????', accept='true'}

可以看出,Servlet可以正常接收表单提交的所有用户数据,但是存在中文乱码问题。