Servlet實現(xiàn)代理文件下載功能

用戶向代理服務(wù)器發(fā)送請求,代理服務(wù)器從后端服務(wù)器上獲取文件,并返回給用戶
web.xml:

成都創(chuàng)新互聯(lián)是網(wǎng)站建設(shè)技術(shù)企業(yè),為成都企業(yè)提供專業(yè)的網(wǎng)站制作、做網(wǎng)站,網(wǎng)站設(shè)計,網(wǎng)站制作,網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制適合企業(yè)的網(wǎng)站。十年品質(zhì),值得信賴!

<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; 
 
/** 
 * 給靜態(tài)大文件提供服務(wù)的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"); 
  //后端服務(wù)器的IP 
  String serverIP = "192.168.101.190"; 
  //后端服務(wù)器的文件地址 
  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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

網(wǎng)站題目:Servlet實現(xiàn)代理文件下載功能
文章地址:http://bm7419.com/article18/jjehgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、全網(wǎng)營銷推廣、域名注冊、標(biāo)簽優(yōu)化用戶體驗、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)