Java得到GET和POST请求URL和参数列表
一 获取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()在同一个响应中是不能混合使用的,如果混合使用就会抛异常。
/** * 获取HTTP POST数据 * * @param request * @throws IOException */ public static String getPostParam(HttpServletRequest request) { String sret = null; String ContentType = ""; ContentType = request.getHeader("Content-Type"); if(ContentType.equalsIgnoreCase("application/x-www-form-urlencoded")) { Map<String, String[]> params = request.getParameterMap(); String queryString = ""; for (String key : params.keySet()) { String[] values = params.get(key); for (int i = 0; i < values.length; i++) { String value = values[i]; queryString += key + "=" + value + "&"; } } if (queryString.length() > 1) { // 去掉最后一个空格 queryString = queryString.substring(0, queryString.length() - 1); } sret = queryString; }else if(ContentType.equalsIgnoreCase("multipart/form-data")) { try { StringBuffer info = new StringBuffer(); ServletInputStream in = request.getInputStream(); BufferedInputStream buf = new BufferedInputStream(in); byte[] buffer = new byte[1024]; int iRead; while ((iRead = buf.read(buffer)) != -1) { info.append(new String(buffer, 0, iRead, "UTF-8")); sret = info.toString(); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else { } return sret; } public static String getGetParam(HttpServletRequest request) { String sret = null; String queryString = null; queryString = request.getQueryString(); sret = queryString; return sret; }