Servlet实现代理文件下载
来源:互联网 发布:梦里花落知多少背影 编辑:程序博客网 时间:2024/05/22 09:59
用户向代理服务器发送请求,代理服务器从后端服务器上获取文件,并返回给用户
web.xml:
<servlet> <servlet-name>BigFile</servlet-name> <servlet-class>cn.ac.dsp.servlet.BigFile</servlet-class> </servlet> <servlet-mapping> <servlet-name>BigFile</servlet-name> <url-pattern>*.ts</url-pattern> </servlet-mapping>
servlet:
package cn.ac.dsp.servlet;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.io.StringWriter;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.CoreConnectionPNames;import org.apache.http.params.CoreProtocolPNames;import org.apache.log4j.Logger;import cn.ac.dsp.common.Constant;import cn.ac.dsp.common.SystemParameters;/** * 给静态大文件提供服务的servlet */public class BigFile extends HttpServlet {private static final long serialVersionUID = 1L;private static final Logger log = Logger.getLogger(BigFile.class); /** * @see HttpServlet#HttpServlet() */ public BigFile() { super(); // TODO Auto-generated constructor stub }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {log.info("request for bigfile");long startTime = System.nanoTime();String requestUrl = request.getRequestURI();//请求的文件名String filename = requestUrl.substring(requestUrl.lastIndexOf("/"));HttpClient httpClient = new DefaultHttpClient();httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, Constant.HttpConnTimeOut);httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, Constant.SoConnTimeOut);httpClient.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8");//后端服务器的IPString serverIP = "192.168.101.190";//后端服务器的文件地址StringBuilder backUrl = new StringBuilder();backUrl.append("http://");backUrl.append(serverIP);backUrl.append("/LBA/bigfile/");backUrl.append(filename);HttpGet httpGet = new HttpGet(backUrl.toString());httpGet.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8");log.info("distribute bigfile to " + backUrl.toString());HttpResponse backResponse;try {backResponse = httpClient.execute(httpGet);//log.info(backResponse.getParams().getParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET));HttpEntity httpEntity = backResponse.getEntity();InputStream in = httpEntity.getContent();//BufferedReader br = new BufferedReader(new InputStreamReader(httpEntity.getContent(), "UTF-8"));byte[] buf = new byte[4096];int readLength;response.setCharacterEncoding("UTF-8");ServletOutputStream out = response.getOutputStream();while((readLength = in.read(buf)) != -1){out.write(buf, 0, readLength);}in.close();out.flush();out.close();} catch (ClientProtocolException e) {StringWriter sw = new StringWriter();e.printStackTrace(new PrintWriter(sw));log.error("ClientProtocolException when redirect bigfile. " + sw.toString());} catch (IOException e) {StringWriter sw = new StringWriter();e.printStackTrace(new PrintWriter(sw));log.error("IOException when redirect bigfile. " + sw.toString());}long endTime = System.nanoTime();System.out.println("Response time: " + (endTime-startTime) + " ns");}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub}}
参考:一个文件下载的Servlet
- Servlet实现代理文件下载
- [Servlet] 实现文件下载
- Servlet实现文件下载
- servlet实现文件下载
- Servlet实现文件下载
- Servlet实现文件下载
- servlet实现文件下载
- Servlet实现文件下载
- servlet 实现文件下载
- Servlet实现文件下载
- Servlet实现文件下载
- Servlet实现文件下载
- servlet 实现下载文件
- servlet实现文件下载
- servlet实现下载文件
- 文件下载 Servlet实现
- servlet实现文件下载
- servlet 实现下载文件
- HTML Encode 和URL Encode的区别
- Niblack算法的快速实现技巧
- 2013年4月8日 19:22:34
- WPF(初识DataTemplate)
- SVN初级入门
- Servlet实现代理文件下载
- Android4.0 输出分辨率改为1280*720后,出现Out of Memory
- poj3461——Oulipo(KMP)
- 第一章、为什么要学习
- servlet中使用service()方法出现错误:HTTP method POST is not supported by this URL
- Dinic算法求最大流
- 正交匹配追踪算法
- android 开发者最爱的50个免费代码
- opencv-视频PSNR SSIM对比