ユーザーはプロキシサーバーにリクエストを送信し、プロキシサーバーはバックエンドサーバーからファイルを取得し、ユーザーに返します
web.xml:
<Servlet> <Servlet-Name> BigFile </servlet-name> <servlet-class> cn.ac.dsp.servlet.bigfile </servlet-class> </servlet> <servlet-name> bigfile </servet-name> <url-pattern>*
サーブレット:
パッケージcn.ac.dsp.servlet; java.io.ioexceptionをインポートします。 java.io.inputStreamをインポートします。 java.io.printwriterをインポートします。 java.io.StringWriterをインポートします。 javax.servlet.servletexceptionをインポートします。 javax.servlet.servletoutputStreamをインポートします。 javax.servlet.http.httpservletをインポートします。 javax.servlet.http.httpservletrequestをインポートします。 javax.servlet.http.httpservletResponseをインポートします。 org.apache.http.httpentityをインポートします。 org.apache.http.httpresponseをインポートします。 org.apache.http.client.clientprotocolexceptionをインポートします。 import org.apache.http.client.httpclient; org.apache.http.client.methods.httpgetをインポートします。 import org.apache.http.impl.client.defaulthttpclient; org.apache.http.params.coreconnectionpnamesをインポートします。 org.apache.http.params.coreprotocolpnamesをインポートします。 org.apache.log4j.loggerをインポートします。 cn.ac.dsp.common.constantをインポートします。 cn.ac.dsp.common.systemparametersをインポートします。 / ** *静的な大きなファイルにサービスを提供するサーブレット */ public class bigfileは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応答) long starttime = system.nanotime(); string requesturl = request.getRequesturi(); //要求されたファイル名文字列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; 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 = respons.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( "bigfileをリダイレクトするときのclientProtoColexception。" + sw.toString()); } catch(ioException e){stringwriter sw = new StringWriter(); e.printstacktrace(new Printwriter(SW)); log.error( "bigfileをリダイレクトするときのioexception" + sw.tostring()); } long endtime = system.nanotime(); system.out.println( "応答時間:" +(endtime-starttime) + "ns"); } / ** * @see httpservlet#dopost(httpservletrequest request、httpservletresponse応答)参照:ファイルダウンロードサーブレット
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。