天天看點

請求參數擷取

使用者通過浏覽器向伺服器發送請求,有get和post兩種方式,那麼我們怎麼獲得送出的參數呢?

方式一  getQueryStringh()和getInputStream():

1.get方式送出

System.out.println("get方式送出");
String value=req.getQueryString();
System.out.println(value);      

這種方式是通過getQueryString方法擷取get方式送出的參數,得到的結果類似于name=test&pwd=123這種形式

2.post方式送出

System.out.println("post方式送出");
InputStream in=req.getInputStream();
byte[] bytes=new byte[1024];
int len=0;
while ((len=in.read(bytes))!=-1){
    System.out.println(new String(bytes,0,len));
}      

這種方式是通過getInputStream方法擷取post方式送出的參數,得到的結果 類似于name=test&pwd=123這種形式

注意:第一種方式是get用getQueryString方法擷取參數,而post方式用getInputStream方法擷取參數,兩種方法不通用,即get方式送出參數不能用getInputStream方法擷取,同樣的,post方式送出參數不能用getQueryString方法擷取

方法二 getParameter()

使用getParameter方法擷取參數可以擷取post方式送出的參數,也可以擷取get方式送出的參數,是一種通用的方法,但是這樣方法隻能擷取單個參數的值,如果參數值有兩個或兩個以上,那麼隻能擷取第一個值(例如複選框)

1.getParameter("name"):name是參數名,該方法跟根據參數名擷取參數值

2.getParameterNames():擷取所有的參數名,結果是一個Enumeration類型的資料。

3.getParameterValues():擷取參數名對應的所有參數值

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    /**
     * getMethod():擷取請求方式(get或post)
     */
    System.out.println(req.getMethod()+"方式送出");
    /**
     * getParameter()這個方法是根據名字獲得值
     */
    String name=req.getParameter("name");
    String pwd=req.getParameter("pwd");
    System.out.println(name+"="+pwd);

    System.out.println("-------------------------");
    /**
     * getParameterNames():擷取所有的名字,結果是一個Enumeration
     */
    Enumeration<String> enums=req.getParameterNames();
    //上面的兩種方法隻能擷取單個的值,如果有複選框或者其他的多值,就不适合了
    while (enums.hasMoreElements()){
        String enumName=enums.nextElement();//擷取名字
        //可以拿到複選框的值
        if ("hobit".equals(enumName)){
            System.out.print(enumName+":");
            String[] hobits=req.getParameterValues("hobit");
            for (String hobit:hobits){
                System.out.print(hobit+" ");
            }
            System.out.println();
        }
        else {
            String enumValue=req.getParameter(enumName);//根據名字擷取值
            System.out.println(enumName+"="+enumValue);
        }
    }      

簡單的說一下,我這裡名字為hobit的是一個複選框,表示愛好,允許使用者選擇多個愛好,是以這裡就使用getParameterValues方法擷取該參數對應的所有參數值。

繼續閱讀