HttpServletRequest获取到所有参数

£神魔★判官ぃ 2023-09-24 09:27 229阅读 0赞

  request.getMethod() ?获取请求提交方式,如POST、GET等

  request.getContentType() 获取请求类型,示例值:application/json ,multipart/form-data, application/xml等

  可能含有请求内容的字符集,如application/json;charset=UTF-8

  request.getRequestURL() ?获取请求URL

  ?

  ?

  request.getParameterNames(); 获取所有key

  request.getParameter(“test”); 根据key得到value

  String key, name;

  ? ? ?Enumeration enumeration=request.getParameterNames();

  ? ? ?while (enumeration.hasMoreElements()) {

  ? ? ? ?key=enumeration.nextElement();

  ? ? ? ?name=request.getParameter(key);

  ? ? ? ?System.out.println(key + “ :” + name);

  ? ? ?}

  ?

  ?

  有遇到过一个项目用该方法不能读取到参数,而用上面第二点可以,这点我现在还是很奇怪

  ?

  DiskFileItemFactory factory=new DiskFileItemFactory();

  ? ? ?ServletFileUpload upload=new ServletFileUpload(factory);

  ? ? ?upload.setHeaderEncoding(“UTF-8”);

  ? ? ?

  ? ? ?Map param=new HashMap ();

  ? ? ?try {

  ? ? ? ?List items=upload.parseRequest(request);

  ? ? ? ?for (FileItem fileItem : items) {

  ? ? ? ? ?if (fileItem.isFormField()) {

  ? ? ? ? ? ?param.put(fileItem.getFieldName(), fileItem.getString(“utf-8”));

  ? ? ? ? ?}

  ? ? ? ?}

  ? ? ?} catch (Exception e) {

  ? ? ? ?e.printStackTrace();

  ? ? ?}

  需增加jar包

  ? ?

   ? ? ? commons-fileupload

   ? ? ? commons-fileupload

   ? ? ? 1.3.3

   ?

   ?

   ?

   ? ? ? commons-io

   ? ? ? commons-io

   ? ? ? 2.6

   ?

  ?

  ?

  request.getQueryString() 只适用于GET方法,

  返回String,获取的参数形式:a=1&b=2&c=3

  比如客户端发送http://localhost/testServlet?a=b&c=d&e=f,通过request.getQueryString()得到的是a=b&c=d&e=f

  ?

  request.getParameterMap() 适用于GET、POST-表单

  返回Map,其中Map的key是参数的名称,value(数组)是参数的值

  如请求参数为a=1&b=2&c=3&c=4

  则key=a ?value=[1]

  ?key=c ?value=[3, 4]

  Map a=request.getParameterMap();

  Set keys=a.keySet();

  for(String key : keys){

  ? ? ?String[] b=a.get(key);

  }

  ?

  request.getReader()返回的是字符串

  request.getInputStream()返回的是字符节数组

  这两个方式适用于POST提交的所有类型,包括application/json(json字符串)、application/x-www-form-urlencoded表单(a=1&b=2&c=3)、multipart/form-data(含有一些杂七杂八的内容)、application/xml

  ? ? ? ? int len=request.getContentLength();

  ? ? ?ServletInputStream iii=request.getInputStream();

  ? ? ?byte[] buffer=new byte[len];

  ? ? ?iii.read(buffer, 0, len);

  ? ? ?System.out.println(new String(buffer));

  ? ? ?BufferedReader br=request.getReader();

  ? ? ?String str, wholeStr=””;

  ? ? ?while((str=br.readLine()) !=null){

  ? ? ? ?wholeStr +=str;

  ? ? ?}

  ? ? ?System.out.println(wholeStr);

  ?

  @RequestBody、 request.getInputStream()、request.getReader()这三种方法是有冲突的,因为流只能被读一次。

  比如:

  当form表单内容采用 enctype=application/x-www-form-urlencoded编码时,先通过调用request.getParameter()方法得到参数后,

  再调用request.getInputStream()或request.getReader()已经得不到流中的内容,

  因为在调用 request.getParameter()时系统可能对表单中提交的数据以流的形式读了一次,反之亦然。

  ?

  当form表单内容采用 enctype=multipart/form-data编码时,即使先调用request.getParameter()也得不到数据,

  所以这时调用request.getParameter()方法对 request.getInputStream()或request.getReader()没有冲突,

  即使已经调用了 request.getParameter()方法也可以通过调用request.getInputStream()或request.getReader()得到表单中的数据,

  特别要注意的是request.getInputStream()和request.getReader()在同一个响应中是不能混合使用的,如果混合使用就会抛异常

发表评论

表情:
评论列表 (有 0 条评论,229人围观)

还没有评论,来说两句吧...

相关阅读