用户通过浏览器向服务器发送请求,有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方法获取该参数对应的所有参数值。