首页 > 开发 > Java > 正文

Servlet实现代理文件下载功能

2024-07-13 10:14:50
字体:
来源:转载
供稿:网友

用户向代理服务器发送请求,代理服务器从后端服务器上获取文件,并返回给用户
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");   //后端服务器的IP   String 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  }  } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表