通过 java (servlet) 实现两个web工程间的文件传输
现有这么个需求:有web工程A,和web工程B,部署在两台不同的机器上。希望在工程A中有一个servlet,其功能是:在被调用的时候去一个固定目录下面去取一个固定文件名的...
现有这么个需求:
有web工程A,和web工程B,部署在两台不同的机器上。
希望在工程A中有一个servlet, 其功能是:在被调用的时候去一个固定目录下面去取一个固定文件名的文件(比如:web-inf/test.zip).将这个文件通过某种方式发送给B工程,并且保存在固定目录下(比如:web-inf/temp/)
最好不要直接出现socket API
懒得代码的,提供思路也可以
请大神们相助! 展开
有web工程A,和web工程B,部署在两台不同的机器上。
希望在工程A中有一个servlet, 其功能是:在被调用的时候去一个固定目录下面去取一个固定文件名的文件(比如:web-inf/test.zip).将这个文件通过某种方式发送给B工程,并且保存在固定目录下(比如:web-inf/temp/)
最好不要直接出现socket API
懒得代码的,提供思路也可以
请大神们相助! 展开
4个回答
展开全部
这个思路很简单,如下:
1、访问A的servlet,我们在这个Servlet里面取到这个文件,这个很容易是吧
2、在A的servlet将取到的文件(inputstrema格式),以post的形式,模拟表单提交给B的servlet
3、在B的servlet里面接收,就像接收普通的表单上传的一样
下面是一些上传和接收的核心代码,使用的httpclient
A里面的上传:
HttpClient httpclient = new DefaultHttpClient();
String url = “这里是B的servlet的访问的地址,全地址”;
HttpPost httppost = new HttpPost(url);
// 一个本地的文件
InputStreamBody fileis = new InputStreamBody(is, fileName);
// 多部分的实体
MultipartEntity reqEntity = new MultipartEntity();
// 增加
reqEntity.addPart("bin", fileis);
// 设置
httppost.setEntity(reqEntity);
HttpResponse responses = null;
try {
responses = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (Validator.isNotNull(responses)) {
int httpstatus = responses.getStatusLine().getStatusCode();
if(httpstatus!=200){
System.out.println(url+"访问错误,http状态"+httpstatus);
}
}
B里面接收文件的核心代码,使用的fileupload
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = new ArrayList();
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
FileItem file = null;
if (items.size()>0) {
file =(FileItem)items.get(0);
}
1、访问A的servlet,我们在这个Servlet里面取到这个文件,这个很容易是吧
2、在A的servlet将取到的文件(inputstrema格式),以post的形式,模拟表单提交给B的servlet
3、在B的servlet里面接收,就像接收普通的表单上传的一样
下面是一些上传和接收的核心代码,使用的httpclient
A里面的上传:
HttpClient httpclient = new DefaultHttpClient();
String url = “这里是B的servlet的访问的地址,全地址”;
HttpPost httppost = new HttpPost(url);
// 一个本地的文件
InputStreamBody fileis = new InputStreamBody(is, fileName);
// 多部分的实体
MultipartEntity reqEntity = new MultipartEntity();
// 增加
reqEntity.addPart("bin", fileis);
// 设置
httppost.setEntity(reqEntity);
HttpResponse responses = null;
try {
responses = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (Validator.isNotNull(responses)) {
int httpstatus = responses.getStatusLine().getStatusCode();
if(httpstatus!=200){
System.out.println(url+"访问错误,http状态"+httpstatus);
}
}
B里面接收文件的核心代码,使用的fileupload
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = new ArrayList();
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
FileItem file = null;
if (items.size()>0) {
file =(FileItem)items.get(0);
}
展开全部
因为A要读取本地文件发送给B,所以在B的servlet中写一个doPost方法,接收一个参数parm。
A读取到本地文件后,将该文件的物理路径改为A服务器的HTTP路径,将该路径作为parm的值传递给B。B获取到这个路径后,使用URLConnection类按字节读取就可以了。
但文件大的时候,这种方法可能会因为网络的不稳定出现丢数据的问题。最好的方法仍然是通过socket连接
A读取到本地文件后,将该文件的物理路径改为A服务器的HTTP路径,将该路径作为parm的值传递给B。B获取到这个路径后,使用URLConnection类按字节读取就可以了。
但文件大的时候,这种方法可能会因为网络的不稳定出现丢数据的问题。最好的方法仍然是通过socket连接
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个需求挺好的,我一直想做,还没来得及(我要做的是数据库异地备份)
其实就是文件上传功能
比较简单的方法:就是你在工程A的一个页面罗列出要备份的文件名称(配合file标签),后面加个按钮,按钮绑定工程B的上传路径.
要罗列的文件可根据你的需要做筛选(这个在工程A实现)
存放的路径也可自行定义(这个在工程B实现)
你本地测试可部署两个tomcat,分别发布工程A和工程B,注意两个端口不能一致.
可能有其他的好办法,如果有,请贴出,学习下
其实就是文件上传功能
比较简单的方法:就是你在工程A的一个页面罗列出要备份的文件名称(配合file标签),后面加个按钮,按钮绑定工程B的上传路径.
要罗列的文件可根据你的需要做筛选(这个在工程A实现)
存放的路径也可自行定义(这个在工程B实现)
你本地测试可部署两个tomcat,分别发布工程A和工程B,注意两个端口不能一致.
可能有其他的好办法,如果有,请贴出,学习下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-04-02 · 知道合伙人数码行家
关注
展开全部
如下:
<form action="home.jsp" method=post>
<form action="Sreach" method="post">
<input type="text" style="height: 24px;width: 200px" name="m">
<select name="n">
<option value="TitleName">标题</option>
<option value="Creator" >作者</option>
<option value="Type" >类别</option>
<option value="id" >ID</option>
<input type="submit" value="搜索">
</select>
<form action="home.jsp" method=post>
<form action="Sreach" method="post">
<input type="text" style="height: 24px;width: 200px" name="m">
<select name="n">
<option value="TitleName">标题</option>
<option value="Creator" >作者</option>
<option value="Type" >类别</option>
<option value="id" >ID</option>
<input type="submit" value="搜索">
</select>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询