사용자는 요청을 프록시 서버로 보내고 프록시 서버는 백엔드 서버에서 파일을 얻고 사용자에게 반환합니다.
web.xml :
<Servlet> <servlet-name> bigfile </servlet-name> <servlet-class> cn.ac.dsp.servlet.bigfile </servlet-class> <servlet-mapping> <servlet-name> bigfile </servlet-name> <url-pattern>*
서블릿 :
패키지 cn.ac.dsp.servlet; import java.io.ioexception; import java.io.inputstream; import java.io.printwriter; import java.io.stringwriter; 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; cn.ac.dsp.common.constant import; cn.ac.dsp.common.systemparameters import; / ** * 정적 큰 파일에 서비스를 제공하는 서블릿 */ 공개 클래스 BigFile 확장 httpservlet {private static final long serialversionuid = 1L; 개인 정적 최종 로거 로그 = logger.getLogger (bigfile.class); / ** * @httpservlet#httpservlet () */ public bigfile () {super (); // TODO 자동 생성 생성자 Stub}/ ** * @ @httpservlet#doget (httpservletrequest request, httpservletreponse responsk) */ protected void doget (httpservletrequest 요청, httpservletreponse 응답) serve servletexception, ioxception ( "foreftecection ("); long starttime = system.nanoTime (); 문자열 requestUrl = request.getRequesturi (); // 요청 된 filename 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 ( "bigfile 배포" + backurl.tostring ()); httpresponse backresponse; {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")); 바이트 [] buf = 새로운 바이트 [4096]; int readlength; 응답 .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 (새 인쇄기 (SW)); log.error ( "bigfile을 리디렉션 할 때 ClientProtoColexception." + sw.toString ()); } catch (ioException e) {stringWriter sw = new StringWriter (); E.printstacktrace (새 인쇄기 (SW)); log.error ( "bigfile을 리디렉션 할 때 ioexception." + sw.toString ()); } long endtime = system.nanoTime (); System.out.println ( "응답 시간 :" + (endtime-starttime) + "ns"); } / ** * @ @httpservlet#dopost (httpservletrequest request, httpservletresponse response) * / protected void dopost (httpservletrequest 요청, httpservletrepsonse 응답) servletexception, ioexception {// auto-genated method}}}}참조 : 파일 다운로드 서블릿
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.