首页 > 编程语言 >[Java基础]-- servlet调用Url传输文件或者字符串

[Java基础]-- servlet调用Url传输文件或者字符串

时间:2022-11-03 14:32:21浏览次数:48  
标签:Java String -- import Url urlcon url new java


实例:A和B两台服务器之间传输log文件或者其他文件,

            如果成功就返回字符串"1";如果失败则返回"0"

1、发送log文件和字符串参数的servlet

mport java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.junit.Test;
/**
 *@类功能说明:      实现发送文件和字符串
 *@修改人员名:     yang
 *@修改日期:    2016-3-4 下午05:29:12
 *@创建时间:    2016-3-4 下午05:29:12
 * -------------------------------------------------------------------------------------------
 *  修改次数         修改人员    修改内容                       修改原因                     
 *                                                                                                                                   
 * @备注:
 * @版本: V1.0
 */
public class TestURL {
/**
* @方法功能说明:一、 测试将文件作为流参数传递给servlet
* @修改者名字:   yang 
* @修改日期:        2015-11-19 
* @修改次数:
* @参数: @throws Exception   
* @返回值 void
* @测试结果:
*/
@Test
public  void testParamStream() throws Exception{
//传递的文件名称,用于给server的接收参数取文件名称
String filename="paramStream";
//需要传递的文件
String path="D:/qq.log"; 
//访问的url路径
String severUrl = "http://localhost:8080/TestServer/testUrlServer";
//创建url连接
URL url = new URL(severUrl);     
HttpURLConnection h_urlcon = (HttpURLConnection) url.openConnection();  
   //在JDK 1.5以后可以这样来设置超时时间 (毫秒)
//设置连接主机超时时间30s
h_urlcon.setConnectTimeout(30000);
//设置读取数据超时时间30秒
h_urlcon.setReadTimeout(30000);  
//设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
//http正文中,设置为true,默认是false
h_urlcon.setDoOutput(true);
//设置是否从httpUrlConnection读取,默认为true
h_urlcon.setDoInput(true);
h_urlcon.setChunkedStreamingMode(1024*1024); 
//默认是get方法
h_urlcon.setRequestMethod("POST");
h_urlcon.setRequestProperty("connection", "Keep-Alive");
h_urlcon.setRequestProperty("charsert", "GBK");

//设定传送的内容类型是可序列化的java对象,如果不设置,可能在web服务器传送序列化对象时会抛出java.io.Exception异常
h_urlcon.setRequestProperty("content-Type","multipart/form-data;file="+filename);
//server接收时的参数名称为filename
h_urlcon.setRequestProperty("filename",filename);
//写到内存给url
OutputStream out = new DataOutputStream(h_urlcon.getOutputStream());
DataInputStream in = new DataInputStream(new FileInputStream(path));
int bytes = 0;
byte[] bufferOut = new byte[1024];
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
in.close();
out.flush();
out.close();
}

/**
* @方法功能备注: 二、 测试将String串作为参数传递给 server
* @创建人员:              yang
* @修改日期:        2016-3-4 下午05:47:04
* -----------------------------------------------------------------------------------------------------------
* @修改历史
*        序号                日期                         修改人             修改原因 
* -----------------------------------------------------------------------------------------------------------
* @备注::
* @测试结果:通过
*/
@Test
public void testParamString(){
String urlString="http://localhost:8080/TestServer/testUrlServer?param=123456";
BufferedReader br=null;
try{
//创建url请求
URL url=new URL(urlString);
//连接请求协议
HttpURLConnection _url=(HttpURLConnection)url.openConnection();
//设置请求方法
_url.setRequestMethod("POST");
//设置请求开启连接
_url.connect();
//写入请求参数,记得把字节流转换成字符流
   br=new BufferedReader(new InputStreamReader(_url.getInputStream()));//_url.getInputStream()是URL返回的流
//实现读入内存的操作
String content="";
StringBuffer ss=new StringBuffer();
while((content=br.readLine())!=null){
ss.append(content);
}

//ss是接收的内容

System.out.print("接收log文件或者param参数的结果:"+ss);
}catch(Exception e){
throw new RuntimeException(e);
}finally{
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}

2、接收log文件或者字符串参数的servlet

 

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 
 *@类功能说明:servlet,接收Url参数的测试(param和file)
 *@修改人员名: yang
 *@修改日期: 2016-03-04 下午02:13:18
 *@修改次数:
 *@创建时间: 2016-03-04 下午02:13:18
 *@版本:V1.0
 */
@SuppressWarnings("serial")
public class TestUrlServer extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// 接收String参数
String param = (String) request.getParameter("param");
if (param != null) {
System.out.println("字符参数是:" + param);
} else {
System.out.println("空字符参数!");
// 接收request文件流
InputStream in = request.getInputStream();  
//接收传递的文件名称filename
String name = request.getHeader("filename");
//写入文件到本地,如果不确定文件是什么类型,那么可以拼接或者采用其他方式处理
FileOutputStream fos = new FileOutputStream("D:/"+name+".log");
//写入文件流到文件中
byte[] buffer = new byte[1024];
        int bytes = 0; 
        while ((bytes = in.read(buffer)) != -1) {
        fos.write(buffer, 0, bytes);
        }
        in.close();
        fos.flush();
        fos.close();
}

   /**将接收成功的结果,返回给客户端*/
        InputStream inStream = new ByteArrayInputStream("1".toString().getBytes());
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment;filename=\""+    

new String ("str".getBytes("GBK"),"ISO8859-1")+"\"");
byte[] b = new byte[100];
int len;
while ((len = inStream.read(b)) > 0)
response.getOutputStream().write(b, 0, len);
inStream.close();
}
}
}

 

 

标签:Java,String,--,import,Url,urlcon,url,new,java
From: https://blog.51cto.com/u_13966077/5819860

相关文章

  • [Java web]-- jquery设置元素成为disabled
    对元素应用disabled和readonly属性的方法,如下:  1.readonly属性举例  $('input').attr("readonly","readonly");     //将input元素设置为readonly ......
  • [Spark streaming举例]-- 实时统计并且存储到mysql数据库中
    举例packagecom.scala.myimportorg.apache.spark.SparkConfimportorg.apache.spark.streaming.Durationsimportorg.apache.spark.streaming.StreamingContext/****@......
  • [scala基础]--拆分List操作
    运行环境:Jdk1.7、scala-2.10.4packagestudy/***Document:本类作用---->拆分List*User:yangjf*Date:2016/8/148:57*/objectTestArrays{defmain(args:A......
  • [ElasticSearch基础]-- elasticsearch安装
    基本架构#h15  kibala +marvel+elasticsearch#h16  elasticsearch+marvel#h17  elasticsearch+marvel 1. 准备文件:elasticsearch-2.2.0.tar.gz、kibana-4.4.1-linu......
  • app直播源代码,Extjs Grid自动换行
    app直播源代码,ExtjsGrid自动换行定义列的时候加个renderer,例 Js代码      {      header:'序号',      dataIndex:'ind',    ......
  • 496 下一个更大的元素 |
    题目496下一个更大的元素|nums1中数字x的下一个更大元素是指x在nums2中对应位置右侧的第一个比x大的元素。给你两个没有重复元素的数组nums1和nu......
  • 并发编程之ThreadLocal
    并发编程之ThreadLocal前言当多线程访问共享可变数据时,涉及到线程间同步的问题,并不是所有时候,都要用到共享数据,所以就需要线程封闭出场了。数据都被封闭在各自的线程之......
  • 452.minimum-number-of-arrows-to-burst-balloons 用最少数量的箭引爆气球
    问题描述452.用最少数量的箭引爆气球解题思路首先,按照\(x_start\)从小到大的顺序排序,然后开始分析需要的弓箭数。if(points[i][0]>points[i-1]),说明两个气球不存......
  • Segmentation 2 -- usage
    ThesegmentationmechanismsupportedbytheIA-32architecturecanbeusedtoimplementawidevarietyof systemdesigns.Thesedesignsrangefromflatmodel......
  • RockyLinux9 源码安装LNMP
    本文参考来自https://www.ziruchu.com/art/401在基础上修改了部分路径和版本,感谢原作者的分享。准备工作安装软件dnfinstall-ywgetvimlrzsz关闭防火墙#关闭防......