Servlet实现代理文件下载功能
用户向代理服务器发送请求,代理服务器从后端服务器上获取文件,并返回给用户
web.xml:
BigFile cn.ac.dsp.servlet.BigFile BigFile *.ts
servlet:
packagecn.ac.dsp.servlet;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.PrintWriter;
importjava.io.StringWriter;
importjavax.servlet.ServletException;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.http.HttpEntity;
importorg.apache.http.HttpResponse;
importorg.apache.http.client.ClientProtocolException;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.impl.client.DefaultHttpClient;
importorg.apache.http.params.CoreConnectionPNames;
importorg.apache.http.params.CoreProtocolPNames;
importorg.apache.log4j.Logger;
importcn.ac.dsp.common.Constant;
importcn.ac.dsp.common.SystemParameters;
/**
*给静态大文件提供服务的servlet
*/
publicclassBigFileextendsHttpServlet{
privatestaticfinallongserialVersionUID=1L;
privatestaticfinalLoggerlog=Logger.getLogger(BigFile.class);
/**
*@seeHttpServlet#HttpServlet()
*/
publicBigFile(){
super();
//TODOAuto-generatedconstructorstub
}
/**
*@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse)
*/
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
log.info("requestforbigfile");
longstartTime=System.nanoTime();
StringrequestUrl=request.getRequestURI();
//请求的文件名
Stringfilename=requestUrl.substring(requestUrl.lastIndexOf("/"));
HttpClienthttpClient=newDefaultHttpClient();
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
StringserverIP="192.168.101.190";
//后端服务器的文件地址
StringBuilderbackUrl=newStringBuilder();
backUrl.append("http://");
backUrl.append(serverIP);
backUrl.append("/LBA/bigfile/");
backUrl.append(filename);
HttpGethttpGet=newHttpGet(backUrl.toString());
httpGet.getParams().setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET,"UTF-8");
log.info("distributebigfileto"+backUrl.toString());
HttpResponsebackResponse;
try{
backResponse=httpClient.execute(httpGet);
//log.info(backResponse.getParams().getParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET));
HttpEntityhttpEntity=backResponse.getEntity();
InputStreamin=httpEntity.getContent();
//BufferedReaderbr=newBufferedReader(newInputStreamReader(httpEntity.getContent(),"UTF-8"));
byte[]buf=newbyte[4096];
intreadLength;
response.setCharacterEncoding("UTF-8");
ServletOutputStreamout=response.getOutputStream();
while((readLength=in.read(buf))!=-1){
out.write(buf,0,readLength);
}
in.close();
out.flush();
out.close();
}catch(ClientProtocolExceptione){
StringWritersw=newStringWriter();
e.printStackTrace(newPrintWriter(sw));
log.error("ClientProtocolExceptionwhenredirectbigfile."+sw.toString());
}catch(IOExceptione){
StringWritersw=newStringWriter();
e.printStackTrace(newPrintWriter(sw));
log.error("IOExceptionwhenredirectbigfile."+sw.toString());
}
longendTime=System.nanoTime();
System.out.println("Responsetime:"+(endTime-startTime)+"ns");
}
/**
*@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse)
*/
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//TODOAuto-generatedmethodstub
}
}
参考:一个文件下载的Servlet
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。