zoukankan      html  css  js  c++  java
  • 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()在同一个响应中是不能混合使用的,如果混合使用就会抛异常。

     
    分类: Java
    /**
    	 * 获取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;
    	}
    

      

  • 相关阅读:
    cocos2dx-lua捕获用户touch事件的几种方式
    Java并发编程之闭锁CountDownLatch简单介绍
    opencv视频播放
    完全备份、差异备份以及增量备份的区别
    如何实现文件增量同步——算法
    Oracle提示“资源正忙,需指定nowait”的解决方案
    oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT
    一次oracle大量数据删除经历
    rownum的使用-分页
    sql语句分页多种方式ROW_NUMBER()OVER
  • 原文地址:https://www.cnblogs.com/jiftle/p/8109259.html
Copyright © 2011-2022 走看看