Java应用程序模拟向Servlet发送POST请求

本文演示了如何使用Java应用程序模拟向Servlet发送POST请求,包括上传文件。首先展示了简单的POST请求实现,然后详细解释了如何处理复杂的表单数据,特别是文件上传。文章提供了Servlet和Java应用程序的代码示例,包括文件上传的处理和服务器响应的接收。最后,文章讨论了上传大文件时可能出现的临时文件处理情况。
摘要由CSDN通过智能技术生成
在某些情况下,需要用Java applicatioin来模拟form,向服务器(本文以servlet为例)发送http post请求,包括提交表单域中的数据以及上传文件。如果仅仅是传递form中的数据,而不包含上传文件,那是很简单的,比如Java application可以这么写:

package com.pat.postrequestemulator;

importjava.io.BufferedReader;

importjava.io.InputStream;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

importjava.net.HttpURLConnection;

importjava.net.URL;

 

public class PostRequestEmulator

{

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

         {

                   // 服务地址

                   URL url = newURL("http://127.0.0.1:8080/test/upload");

 

                   // 设定连接的相关参数

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

                   connection.setDoOutput(true);

                   connection.setRequestMethod("POST");

                   OutputStreamWriter out = newOutputStreamWriter(connection.getOutputStream(), "UTF-8");

                  

                   // 向服务端发送key = value对

                   out.write("username=kevin&password=pass");

                   out.flush();

                   out.close();

                  

                   // 获取服务端的反馈

                   String strLine="";

                   String strResponse ="";

                   InputStream in =connection.getInputStream();

                   BufferedReader reader = newBufferedReader(new InputStreamReader(in));

                   while((strLine =reader.readLine()) != null)

                   {

                            strResponse +=strLine +"\n";

                   }

                   System.out.print(strResponse);

         }

}

 

服务端的servlet可以这么写:

packagecom.pat.handlinghttprequestservlet;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

 

public class HandlingHttpRequestServlet extends HttpServlet

{

         private static final longserialVersionUID = 1L;

 

         @Override

         protected void doGet(HttpServletRequestreq, HttpServletResponse resp)

         throws ServletException, IOException

         {

                   super.doGet(req, resp);

         }

 

         @Override

         protected void doPost(HttpServletRequest req, HttpServletResponse resp)

         throwsServletException, IOException

         {

                   String username =req.getParameter("username");          //获取username所对应的value

                   String password =req.getParameter("password");           //获取password所对应的value

                   System.out.println("Thereceived username and password is: " + username + "/" +password);

                  

                   // 向请求端发回反馈信息

                   PrintWriter out =resp.getWriter();

                   out.print("OK");

                   out.flush();

                   out.close();

                  

                   super.doPost(req, resp);

         }

}

 

一切看起来都不复杂。但是如果要模拟的表单,除了要向服务器传递如上面的“key = value”这样的普通信息,同时还要上传文件,事情就复杂得多。下面详解如下:

 

1. 准备

玄机逸士很久没有开发web方面的应用了,所以机器上没有现成的环境,为此先要进行这方面的准备。

a)  到http://tomcat.apache.org 上下载tomcat压缩包apache-tomcat-6.0.33.zip,将其解压到指定目录即可,

     如:D:\Tomcat6

b)  到http://commons.apache.org上下载用于文件上传的两个包:commons-fileupload-1.2.2-bin.zip

     和commons-io-2.1-bin.zip, commons-fileupload依赖于commons-io,但在编程的过程中,

     不会直接用到commons-io

c)  检查Tomcat的安装是否成功。双击D:\Tomcat6\bin目录中的startup.bat文件,就可以启动tomcat。

     打开浏览器,访问http://localhost:8080/,如果出现tomcat相关的页面,则说明tomcat安装成功。

d)  在D:\Tomcat6\webapps目录下创建一个test子目录,我们等会开发的servlet就将部署在这里。在

     test目录下再建立两个目录WEB-INF(必须大写)和upload,在WEB-INF下面 创建两个目录classes和lib,

     同时新建一个web.xml文件;在upload目录下,创建一个temp子目录,这些工作做完以后,test目录

     下面的目录文件结构如下图所示。


其中的classes目录,用来存放将要开发的servlet,lib用来存放commons-fileupload和commons-i

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值