`
canofy
  • 浏览: 831037 次
  • 性别: Icon_minigender_1
  • 来自: 北京、四川
社区版块
存档分类
最新评论

获取POST数据的值

    博客分类:
  • j2EE
阅读更多
     当method为POST,Content-Type为multipart/form-data时,一般应用场景是上传文件,当在该form下还有其它的input时,用request.getParameter("name")则获取不到它的值,需要换一种方式来获取input的值。
例子如下:
1、下面这个类是模拟请求的类,发送一个文件,以及其它的一些参数
package com.demo;

import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;


public class RequestPostTest {

	public static void main(String[] args) throws Exception{
		//发起post请求
		String urlString="http://localhost:8080/login";
		String filePath="D:\\company\\voice\\十渡.wav";
		URL connectURL = new URL(urlString);
		HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection();
		conn.setReadTimeout(100000);
        conn.setConnectTimeout(100000);
		conn.setDoInput(true);
		conn.setDoOutput(true);
		conn.setUseCaches(false);
		conn.setRequestMethod("POST");
		conn.setRequestProperty("Connection", "Keep-Alive");

		conn.setRequestProperty("Content-Type", "multipart/form-data;");
		DataOutputStream dos = new DataOutputStream( conn.getOutputStream() );
		StringBuffer sb=new StringBuffer("Content-Disposition: form-data;");
		sb.append("&loginName=test&pwd=test1");
		dos.writeBytes(sb.toString());

		FileInputStream fileInputStream=new FileInputStream(filePath);
		int bytesAvailable = fileInputStream.available();
		int maxBufferSize = 1024;
		int bufferSize = Math.min(bytesAvailable, maxBufferSize);
		byte[] buffer = new byte[bufferSize];

//read file and write it into form...
		int bytesRead = fileInputStream.read(buffer, 0, bufferSize);

		while (bytesRead > 0)
		{
			dos.write(buffer, 0, bufferSize);
			bytesAvailable = fileInputStream.available();
			bufferSize = Math.min(bytesAvailable, maxBufferSize);
			bytesRead = fileInputStream.read(buffer, 0, bufferSize);
		}

		dos.flush();
		dos.close();

		//接收发起请求后由服务端返回的结果
		int read;
		StringBuffer inputb = new StringBuffer();
		InputStream is = conn.getInputStream();
		InputStreamReader inputStreamReader = new InputStreamReader(is, "UTF-8");
		 while ((read=inputStreamReader.read())>=0) {
             inputb.append( (char) read);
         }
		 System.out.println(inputb.toString());
	}
}

2、获取前台发起的post请求,并获取相应的参数(并未实现)
package com.demo;

import java.io.IOException;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServlet;

public class Login extends HttpServlet{
	/**
	 *
	 */
	private static final long serialVersionUID = -5376047309978396611L;

	public void doGet(HttpServletRequest request,HttpServletResponse response){
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request,HttpServletResponse response){
		//测试
		 try {
			ServletInputStream in = request.getInputStream();
			System.out.println("-------"+readLine(in));//这里是前台发起的所有参数的值,包括二进制形式的文件和其它形式的文件
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return ;
	}


	 /**
     * Read the next line of input.
     *
     * @return a String containing the next line of input from the stream, or
     *         null to indicate the end of the stream.
     * @exception IOException
     *                if an input or output exception has occurred.
     */
    private String readLine(ServletInputStream in) throws IOException{
    	byte[] buf = new byte[8 * 1024];
        StringBuffer sbuf = new StringBuffer();
        int result;
        // String line;

        do {
            result = in.readLine(buf, 0, buf.length); // does +=
            if(result != -1) {
                sbuf.append(new String(buf, 0, result, "UTF-8"));
            }
        }
        while(result == buf.length); // loop only if the buffer was filled

        if(sbuf.length() == 0) {
            return null; // nothing read, must be at the end of stream
        }

        // Cut off the trailing \n or \r\n
        // It should always be \r\n but IE5 sometimes does just \n
        int len = sbuf.length();
        if(sbuf.charAt(len - 2) == '\r') {
            sbuf.setLength(len - 2); // cut \r\n
        }
        else {
            sbuf.setLength(len - 1); // cut \n
        }
        return sbuf.toString();
    }
}


分享到:
评论
3 楼 xmh8023 2015-02-09  
2 楼 xmh8023 2015-02-09  
我访问别的服务器怎么办?急求
1 楼 xmh8023 2015-02-09  
String urlString="http://localhost:8080/login"; 
地址只能是本地吗

相关推荐

    laravel 解决后端无法获取到前端Post过来的值问题

    引入就问题解决了 当然 前提是路由要配置正确 路由配置成Post或者any的时候才能获取到Post的值 附上我的路由图 希望对大家有帮助 以上这篇laravel 解决后端无法获取到前端Post过来的值问题就是小编分享给大家的全部...

    C# 使用Get和Post请求获取数据

    POST请求用于向服务器发送大量数据,如表单数据或二进制数据,这些数据不会显示在URL中。POST请求的安全性相对更高,因为它不会将数据暴露在浏览器历史记录中。在C#中,你可以使用`HttpClient`的`PostAsync`方法来...

    获取POST数据的值.doc

    为了在服务器端获取这些POST数据,我们可以使用以下方法: 1. **使用`Part`接口**:Java Servlet 3.0及以上版本提供了处理`multipart/form-data`的API。你可以通过`HttpServletRequest`的`getParts()`方法获取所有...

    cgi 接收post的数据

    # 获取POST数据的长度 my $content_length = $ENV{'CONTENT_LENGTH'}; # 读取POST数据 my $buffer = ''; read(STDIN, $buffer, $content_length); ``` 这里的`$ENV{'CONTENT_LENGTH'}`变量包含了POST数据的长度,这...

    PHP获取POST数据的几种方法汇总

    由于这个变量依赖于Content-Type的设置,所以它并不是获取POST数据的首选方法,仅在特定情况下使用。 除了以上三种方法,文章中还提到了如何处理特定的数据格式,例如XML格式的数据。在某些应用场景下,如开发微信...

    c# Winform 问财数据获取源码(包括v值获取)

    通过获取并使用这个V值,我们可以向服务器发送GET或POST请求,进而获取相关的财经数据。 本项目的核心在于如何获取和处理这些数据。以下为具体步骤: 1. **V值获取**:在C#中,我们可以利用HttpClient类来发起网络...

    k3cloud的python插件,获取单据的数据及值更新等

    - 当“数量”字段发生变化时,获取当前行的“单据编号”和“数量”字段的值,然后将二者拼接起来作为新的值赋给文本字段`F_ASDQ_TEXT`。 4. **测试脚本效果:** - 完成脚本编写后保存并确定,可以在实际业务场景...

    android采用post方式获取服务器数据

    本文将深入探讨如何通过POST方式在Android中获取服务器数据。 首先,我们需要了解HTTP POST请求的基本概念。HTTP POST请求用于向服务器提交数据,常用于表单提交。与GET方法不同,POST方法会将数据包含在HTTP请求...

    django中使用POST方法获取POST数据

    1. 获取POST中表单键值数据 当客户端(如浏览器)通过POST方式提交表单时,数据通常是以`application/x-www-form-urlencoded`格式发送的。在Django的视图函数(views.py)中,可以使用`request.POST`来获取这些键值...

    ajax post 数据过长导致后台属性驱动接受不到值的处理

    例如,在使用Spring MVC时,可以通过配置`org.springframework.web.multipart.MaxUploadSizeExceededError`异常来提高上传文件或POST数据的大小限制。 2. **分块传输**:如果数据量确实非常大,可以考虑将数据分块...

    实例03获取JSON数据,显示计步器的个人信息.rar

    在这个例子中,可能是发送一个POST请求到服务器,携带必要的数据,例如用户ID或令牌,以获取计步器的个人信息。 2. **POST请求**: POST请求常用于向服务器提交数据,比如注册、登录或更新信息。在Android中,使用...

    vue获取form表单的值示例

    这里,`this.phone`和`this.password`直接获取了Vue实例中定义的同名数据属性的值。这对于在用户交互如表单提交时执行某些操作是很有用的。 ### 使用axios发送HTTP请求 在示例中,使用了axios库来发送HTTP请求,...

    数据抽取-Kettl动态参数调用HTTP、POST接口

    这在调用HTTP接口时特别有用,我们可以根据数据的值动态设置POST请求的URL、Header或Body。 四、创建HTTP POST调用 1. 打开Kettle,新建一个转换或作业。 2. 添加"HTTP"组件到设计画布。 3. 配置HTTP组件: - 设置...

    C# 以Post方式提交数据

    4. **准备POST数据**:接下来,构造要发送的数据。这通常是一个键值对的字符串,其中每个键和值之间用等号连接,键值对之间用`&`分隔。 ```csharp string strId = "guest"; string strPassword = "123456"; ...

    echarts 动态获取数据

    为了适应ECharts,你可以将这些数据结构转换为更方便处理的形式,例如两个数组(如:一个存放x轴数据,一个存放y轴数据),或者构建一个键值对的Map,键对应x轴值,值对应y轴值。这样,数据组织更加清晰,易于映射到...

    C#POST请求WCF服务

    // 发送POST请求并获取响应 HttpResponseMessage response = await client.PostAsync("Service.svc/YourOperationContract", content); if (response.IsSuccessStatusCode) { // 处理返回的JSON响应 string ...

    Django 接收Post请求数据,并保存到数据库的实现方法

    主要内容:通过for循环拿到post表单中的值并保存到一个dict中,然后通过**dict保存到数据库中。 1.用户提交了一个表单,表单内容包含csrf。 2.服务端除了表单中的csrf要过滤掉,其它的都要保存到数据库中。 3.具体看...

    Qt post请求发送和解析json数据完整示例,有完整的设置框架,可以发送和解析多个post请求

    然而,假设你可能需要将从POST请求中获取的JSON数据存储到SQL数据库中,你可以使用Qt的`QSqlDatabase`和`QSqlQuery`等类来实现。首先,确保正确配置数据库连接,然后构建SQL语句,使用`QJsonDocument`中的数据填充...

    C++实现http的post发送接收数据以及xml解析

    最后,通过`HttpSendRequest()`发送POST数据,并使用`InternetReadFile()`接收服务器的响应。 在POST请求中,数据通常被封装在HTTP请求头的`Content-Type`字段内,常见的类型是`application/x-www-form-urlencoded`...

    LABVIEW 获取网页数据_labview访问网页下载文章

    标题 "LABVIEW 获取网页数据_labview访问网页下载文章" 描述了一个使用LabVIEW(Laboratory Virtual Instrument Engineering Workbench)编程来获取和下载网页数据的过程。LabVIEW是美国国家仪器公司(NI)开发的一...

Global site tag (gtag.js) - Google Analytics