使用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后缀的内容大小是被限定的吧,我是这么想的,如果有错误请纠正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值