使用者通過浏覽器向伺服器發送請求,有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方法擷取該參數對應的所有參數值。