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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。