java获取GET和POST请求参数
来源:互联网 发布:网络流行组合字 编辑:程序博客网 时间:2024/05/20 17:08
URL和参数列表
一 获取请求方式
request.getMethod(); get和post都可用,
二 获取请求类型
request.getContentType(); get和post都可用,示例值:application/json ,multipart/form-data, application/xml等
三 获取所有参数key
request.getParameterNames(); get和post都可用,注:不适用contentType为multipart/form-data
四 获取参数值value
request.getParameter("test"); get和post都可用,注:不适用contentType为multipart/form-data
五 获取取参数请求集合
request.getParameterMap(); get和post都可用,注: 不适用contentType为multipart/form-data
六 获取文本流
request.getInputStream() 适用于如:application/json,xml,multipart/form-data文本流或者大文件形式提交的请求或者xml等形式的报文
七 获取URL
getRequestURL()
八 获取参数列表:
1.getQueryString()
只适用于GET,比如客户端发送http://localhost/testServlet?a=b&c=d&e=f,通过request.getQueryString()得到的是a=b&c=d&e=f.
2.getParameter()
GET和POST都可以使用
但如果是POST请求要根据<form>表单提交数据的编码方式来确定能否使用.
当编码方式是(application/x- www-form-urlencoded)时才能使用.
这种编码方式(application/x-www-form-urlencoded)虽然简单,但对于传输大块的二进制数据显得力不从心.
对于传输大块的二进制数这类数据,浏览器采用了另一种编码方式("multipart/form-data"),这时就需要使用下面的两种方法.
3.getInputStream()
4.getReader()
上面两种方法获取的是Http请求包的包体,因为GET方式请求一般不包含包体.所以上面两种方法一般用于POST请求获取参数.
需要注意的是:
request.getParameter()、 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()在同一个响应中是不能混合使用的,如果混合使用就会抛异常。
九:下面附上解析multipart/form-data格式的报文方法,
示例报文如下:
解析:(利用upload方式解析的可以忽略)
/** * 解析multipart/form-data * @param res 这是通过request.getInputStream()都出来的报文 * @param contentType multipart/form-data * @return 解析multipart/form-data格式提交过来的的流,转成json,这里忽略了报文中的“文件”部分,只解析“文本”字段 */ private static String getData(String res, String contentType) { BufferedReader reqbuf = null; JSONObject jsonObject = new JSONObject(); try { final int NONE = 0; // 状态码,表示没有特殊操作 final int DATAHEADER = 1; // 表示下一行要读到报头信息 final int FIELDDATA = 2; // 表示下面要读到表单域的文本值 String fieldname = ""; // 表单域的名称 String fieldvalue = ""; // 表单域的值 String boundary = ""; // 分界符字符串 String lastboundary = ""; // 结束分界符字符串 int pos = contentType.indexOf("boundary="); if (pos != -1) { pos += "boundary=".length(); boundary = "--" + contentType.substring(pos); // 解析出分界符 lastboundary = boundary + "--"; // 得到结束分界符 } // 起始状态为NONE int state = NONE; // 从字符串中得到输出缓冲流 reqbuf = new BufferedReader(new StringReader(res)); while (true) { //读一行 String s = reqbuf.readLine(); //如果读到结束标志 if (s == lastboundary || s == null) { break; } switch (state) { case NONE: if ((s.startsWith(boundary))) { // 如果读到分界符,则表示下一行一个头信息 state = DATAHEADER; } break; case DATAHEADER: pos = s.indexOf("name="); if(pos != -1){ pos += "name=".length() + 1; // 1表示后面的"的占位(引号的占位) s = s.substring(pos, s.length() - 1); fieldname = s; // 表单域的名称放入fieldname state = FIELDDATA; // 设置状态码,准备读取表单域的值 } break; case FIELDDATA: // 读取表单域的值,再次读取,因为中间有空行 s = reqbuf.readLine(); fieldvalue = s; // 存入fieldvalue jsonObject.put(fieldname, fieldvalue); state = NONE; break; } } } catch (IOException e) { log.error("解析异常", e); } finally { try { reqbuf.close(); } catch (IOException e) { log.error("关闭异常", e); } } return jsonObject.toJSONString(); }
- java获取GET和POST请求参数
- java获取GET和POST请求的URL和参数列表
- asp.net自定义获取Get和Post请求的参数
- request请求获取参数(post和get两种方式)
- asp.net自定义获取Get和Post请求的参数
- request请求获取参数(post和get两种方式)
- Java获得GET和POST请求URL和参数列表
- java获取get,post参数
- GET请求和POST请求的参数
- 【http】get/post 获取请求参数
- http get或者post请求获取参数
- #nodejs post或get 请求获取参数
- JAVA POST和Get请求
- HttpClient post 和get 带参数请求
- CI框架获取post和get参数
- ngx.req和get/post参数获取
- node中,GET请求和POST请求的参数
- flask 获取 get post 请求提交的参数
- 打印出二叉树中结点值的和为输入整数的所有路径
- zookeeper的安装与部署-集群
- Java中的char类型以及不建议使用的原因
- 欢迎使用CSDN-markdown编辑器
- 个人复习指南——针对自我
- java获取GET和POST请求参数
- 从MyEclipse到IntelliJ IDEA
- Android Service学习笔记--前台服务
- 双飞翼布局
- c程序的执行过程
- 一款比较好的java和scala开发工具,界面和eclipse一样
- 七 mysql连接池
- 【IntelliJ IDEA java-web 初学之容易遇到的问题及解决办法】
- 线性回归