java请求servlet_使用java程序发送post请求给servlet

我们需要完成的工作其实很简单,就是将一个文件流以post的方式发送到服务器或者也可以是客户端。

java发送请求是通过HttpURLConnection来实现的:

import java.io.BufferedReader;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileReader;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

public class SendPostRequest {

static String sessionId = "";

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

URL url = new URL("http://localhost:8080/GetRequest/");

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setDoOutput(true);

// Read from the connection. Default is true.

connection.setDoInput(true);

// Set the post method. Default is GET

connection.setRequestMethod("POST");

// Post cannot use caches

// Post 请求不能使用缓存

connection.setUseCaches(false);

// This method takes effects to

// every instances of this class.

// URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。

// connection.setFollowRedirects(true);

// This methods only

// takes effacts to this

// instance.

// URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数

connection.setInstanceFollowRedirects(false);

// Set the content type to urlencoded,

// because we will write

// some URL-encoded content to the

// connection. Settings above must be set before connect!

// 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的

// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode

// 进行编码

connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

// 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,

// 要注意的是connection.getOutputStream会隐含的进行connect。

connection.connect();

Long sendTime = System.currentTimeMillis();

DataOutputStream out = new DataOutputStream(connection.getOutputStream());

// 要传的参数

String content = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode("XXX", "UTF-8");

content += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode("XXXX", "UTF-8");

content += "&" + URLEncoder.encode("sendTime", "UTF-8") + "=" + URLEncoder.encode(sendTime.toString(), "UTF-8");

//读海量文件

StringBuilder postStrBuf = new StringBuilder();

for (int i = 0; i < 1; i++) {

File file = new File("E:/toodou_work/yuliang.csv");

BufferedReader reader = null;

String postStr = null;

reader = new BufferedReader(new FileReader(file));

while ((postStr = reader.readLine()) != null) {

postStrBuf.append(postStr);

}

}

content = content + "&" + URLEncoder.encode("file", "UTF-8") + "=" + URLEncoder.encode(postStrBuf.toString(), "UTF-8");

// DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面

out.writeBytes(content);

out.flush();

out.close(); // flush and close

//Get Session ID

String key = "";

if (connection != null) {

for (int i = 1; (key = connection.getHeaderFieldKey(i)) != null; i++) {

if (key.equalsIgnoreCase("set-cookie")) {

sessionId = connection.getHeaderField(key);

sessionId = sessionId.substring(0, sessionId.indexOf(";"));

}

}

}

connection.disconnect();

}

}

接受post请求的一端,为了便于大家理解,就作为服务器吧,上面的代码则作为客户端好了。服务器这边我们需要写一个servlet,这个servlet是服务器启动,就立即启动的,这个是在web.xml文件里配置,我想大家是会的。服务器端的代码如下所示:

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* Servlet implementation class GetRequestServlet

*/

public class GetRequestServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

//private static final Logger log = Logger.getLogger(GetRequestServlet.class);

/**

* @see HttpServlet#HttpServlet()

*/

public GetRequestServlet() {

super();

// TODO Auto-generated constructor stub

}

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String file = request.getParameter("file");

String sendTimeStr = request.getParameter("sendTime");

long sendTime = Long.valueOf(sendTimeStr);

response.setContentType("text/html;charset=utf-8");

System.out.println(file);

System.out.println("当前从发送到接受所用时间为:" + (System.currentTimeMillis() - sendTime));

//PrintWriter out = response.getWriter();

//out.println("hello world!" + file);

}

/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}    大家运行会发现,如果读取的文件不大,是可以将读取的文件流输送到服务器的,但是一旦文件变大,就会出错。这一方面可能是post后缀的内容大小是被限定的吧,我是这么想的,如果有错误请纠正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值