1. 程式人生 > >Servlet的5種方式實現表單提交(註冊小功能),後臺獲取表單資料

Servlet的5種方式實現表單提交(註冊小功能),後臺獲取表單資料

用servlet實現一個註冊的小功能 ,後臺獲取資料。

註冊頁面:

  

註冊頁面程式碼 :

複製程式碼
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="/RequestDemo/RequestDemo3" method="post">
        使用者名稱:<input type="text" name
="userName"><br/> 密碼:<input type="text" name="pwd"><br/> 性別:<input type="radio" name="sex" value="男" checked="checked"><input type="radio" name="sex" value="女"><br/> 愛好:<input type="checkbox" name="hobby" value="足球">足球
<input type="checkbox" name="hobby" value="籃球">籃球 <input type="checkbox" name="hobby" value="排球">排球 <input type="checkbox" name="hobby" value="羽毛球">羽毛球<br/> 所在城市:<select name="city"> <option>---請選擇---</option> <
option value="bj">北京</option> <option value="sh">上海</option> <option value="sy">瀋陽</option> </select> <br/> <input type="submit" value="點選註冊"> </form> </body> </html>
複製程式碼

人員實體類: 注意:人員實體類要與表單中的name一致,約定要優於編碼

複製程式碼
package com.chensi.bean;

//實體類中的欄位要與表單中的欄位一致,約定優於編碼
public class User {

    private String userName;
    private String pwd;
    private String sex;
    private String[] hobby;
    private String city;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String[] getHobby() {
        return hobby;
    }
    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    
}
複製程式碼

接收方法一:         Servlet頁面(後臺接收資料方法一)

複製程式碼
package com.chensi;

import java.io.IOException;
import java.util.Iterator;

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

/**
 * Servlet 獲得填寫的表單資料
 */
@WebServlet("/RequestDemo3")
public class RequestDemo3 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        //獲取傳過來的表單資料,根據表單中的name獲取所填寫的值
        String userName = request.getParameter("userName");
        String pwd = request.getParameter("pwd");
        String sex = request.getParameter("sex");
        String[] hobbys = request.getParameterValues("hobby");
        
        System.out.println(userName);
        System.out.println(pwd);
        System.out.println(sex);
        for (int i = 0; hobbys!=null&&i < hobbys.length; i++) {
            System.out.println(hobbys[i]+"\t");
        }
    }

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

}
複製程式碼

得到的資料:

    

接收方法二:

複製程式碼
package com.chensi;

import java.io.IOException;
import java.util.Enumeration;
import java.util.Iterator;

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

/**
 * Servlet 獲得填寫的表單資料
 */
@WebServlet("/RequestDemo3")
public class RequestDemo3 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        //獲取傳過來的表單資料,根據表單中的name獲取所填寫的值
        Enumeration<String> names = request.getParameterNames();
        while (names.hasMoreElements()) {
            String strings = (String) names.nextElement();
            String[] parameterValues = request.getParameterValues(strings);
            for (int i = 0;parameterValues!=null&&i < parameterValues.length; i++) {
                System.out.println(strings+":"+parameterValues[i]+"\t");
            }
        }
    }

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

}
複製程式碼

得到的資料:

    

接收方法三: 利用反射賦值給User

複製程式碼
package com.chensi;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;

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 com.chensi.bean.User;

/**
 * Servlet 獲得填寫的表單資料
 */
@WebServlet("/RequestDemo3")
public class RequestDemo3 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        //獲取傳過來的表單資料,根據表單中的name獲取所填寫的值
        
            
            try {
                User u = new User();
                System.out.println("資料封裝之前: "+u);
                //獲取到表單資料
                Map<String, String[]> map = request.getParameterMap();
                for(Map.Entry<String,String[]> m:map.entrySet()){
                    String name = m.getKey();
                    String[] value = m.getValue();
                    //建立一個屬性描述器
                    PropertyDescriptor pd = new PropertyDescriptor(name, User.class);
                    //得到setter屬性
                    Method setter = pd.getWriteMethod();
                    if(value.length==1){
                        setter.invoke(u, value[0]);
                    }else{
                        setter.invoke(u, (Object)value);
                    }
                }
                System.out.println("封裝資料之後: "+u);
            } catch (IntrospectionException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                e.printStackTrace();
            }
            
        }
        
    

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

}
複製程式碼

得到的結果:

  

接收方法四:使用apache 的 BeanUtils 工具來進行封裝資料(ps:這個Benautils工具,Struts框架就是使用這個來獲取表單資料的哦!)

複製程式碼
package com.chensi;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;

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 org.apache.commons.beanutils.BeanUtils;

import com.chensi.bean.User;

/**
 * Servlet 獲得填寫的表單資料
 */
@WebServlet("/RequestDemo3")
public class RequestDemo3 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        //獲取傳過來的表單資料,根據表單中的name獲取所填寫的值
    
        //方法四:使用beanUtil來封裝User類
        User u = new User();
        System.out.println("沒有使用BeanUtil封裝之前:  "+u);
        try {
            BeanUtils.populate(u, request.getParameterMap());
            System.out.println("使用BeanUtils封裝之後:  "+u);
        } catch (IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
            
        }
        
    

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
    
    
}
複製程式碼

得到的結果:

   

接收方法 方式五: 使用inputStream流來進行接收(一般字串啥的不用這個方法,一般是檔案上傳下載時候才會使用這種方法)因為接收到的字串各種亂碼,編碼問題解決不好

複製程式碼
package com.chensi;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;

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

import org.apache.commons.beanutils.BeanUtils;

import com.chensi.bean.User;

/**
 * Servlet 獲得填寫的表單資料
 */
@WebServlet("/RequestDemo3")
public class RequestDemo3 extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        //獲取傳過來的表單資料,根據表單中的name獲取所填寫的值
        response.setContentType("text/html;charset=UTF-8");
        //獲取表單資料
        ServletInputStream sis = request.getInputStream();
        int len = 0;
        byte[] b = new byte[1024];
        while((len=sis.read(b))!=-1){
            System.out.println(new String(b, 0, len, "UTF-8"));
        }
        
        sis.close();
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
複製程式碼

得到的結果:(各種亂碼 。。。。)