SpringMVCにマルチファイルアップロードを実装するには、2つの方法があります。 1つは、よく使用するバイトストリームにファイルをアップロードすることであり、もう1つはSpringMVCにラップされたパーサーを使用してアップロードすることです。これらの2つの方法は、マルチファイルアップロードを達成する効率に大きなギャップがあります。例を使用して、これら2つの方法の実装方法を見て、効率のギャップがどれだけ大きく存在するかを比較しましょう。
1.関連するJARパッケージをダウンロードします。 springmvcのjarパッケージに加えて、com.springsource.org.org.apache.commons.fileupload-1.2.0.jarおよびcom.springsource.org.org.org.org.org.omons.io-1.4.0.jarおよびcom.springsource.org.apache.commons.io-1.4.0.0.0.0.0.0.
2。springannotation-servlet.xmlファイルを構成します(ファイル名は、web.xmlで導入された名前と同じである限り、カスタマイズできます):
<?xml version = "1.0" encoding = "utf-8"?> <! - bean header - > <beans xmlns = "http://www.springframework.org/schema/beans xmlns:p = "http://www.springframework.org/schema/p" xmlns:mvc = "http://www.springframework.org/schema/mvc" xmlns:context = "http://www.springframework xmlns:util = "http://www.springframework.org/schema/util" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/spring/spring/ http://www.springframework.org/schema/context http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xcsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd "> <! - 注釈SCANパッケージ - > <コンテキスト:<コンポーネント - base-package = "com.tgb.web.controller.Annotation"> </context:component-scan> <! - 次の2行のコードを置き換えます - > <mvc:annotation-driven/> <! - 静的リソースアクセス - > <mvc:リソース場所= "/img/"マッピング= "/img/**"/> <mvc mapping = "/js/**"/> <bean id = "ViedResolver"> <Property name = "preix" value = "/"> </property> <property name = "suffix" value = "。jsp"> </jean> <bean id = "multipartresolver"> <property = "defautencoding" utf-8 "> < name = "maxuploadsize" value = "10485760000"> </property> <Property name = "maxinmemorysize" value = "40960"> </property> </bean> </beans>
3。web.xmlファイルを構成します:
<?xml version = "1.0" encoding = "utf-8"?> <web-app xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/nns/javaee xmlns:web = "http://java.sun.com/xml/ns/javaee" xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id = "webapp_id"バージョン= "2.5" <welcome-file> index.html </welcome-file> </welcome-file-list> <servlet> <servlet-name> springmvc </servlet-name> <! - springmvcディストリビューター - > <サーブレットクラス> org.springframework.web.servlet.dispatchersermet <param-value> classpath*:config/springannotation-servlet.xml </param-value> </init-param> <! - トムキャットが開始されたときにサーブレットが初期化されていることを示します - > <load-on-startup> </servet> <filter> <filter> <filter-name> encodingfilter </filter-name> <filter-class> org.springframework.web.filter.characterencodingfilter </filter-class> <init-param> <param-name>エンコード</param-name> <param-value> utf-8 </param-value> <! - 使用したいキャラクターセットを設定します。私はGB18030--> </init-param> <init-param> <param-name> forceConding </param-name> <param-value> true </param-value> </init-param> </filter> <filter-name> encodingfilter </filter-name> <url-pertern> <urlpertern>ニーズに応じて構成 - > </filter-mapping> <servlet-mapping> <servlet-name> springmvc </servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
4。JSPページコード:
<%@ page Language = "Java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <! <html> <head> <スクリプトタイプ= "text/javascript" src = "../ js/jquery-1.7.2.js"> </script> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"> <タイトル>タイトル< j = 1; $(document).ready(function(){$( "#btn_add1")。クリック(function(){document.getelementbyid( "newupload1")。 onclick = "del_1( '+i+')"/> </div> '; /> <入力= "button" delete "onclick =" del_2( '+j+') " function del_1(o){document.getElementById( "newupload1")。RemoveChild(document.getElementById( "div _"+o)); } function del_2(o){document.getElementById( "newupload2")。removechild(document.getElementById( "div _"+o)); } </script> </head> <body> <h1> springmvcバイトストリーム入力アップロードファイル</h1> <form name = "userform1" action = "/springmvc7/file/upload" enctype = "multipart/form-data" method = "post"> <div id = "newupload1"> <入力タイプ= "ファイル"> < id = "btn_add1" value = "add one line"> <input type = "" balue = "upload"> </form> <br> <hr align = "left" color = "#ff0000" size = "3"> <br> <h1> springmvcラッパークラスアップロードファイル</h1> <form = "userform2"/springmvc7/"/springmvc7 enctype = "multipart/form-data" method = "post" ""> <div id = "newupload2"> <input type = "file" name = "file"> </div> <入力タイプ= "ボタン" id "id =" btn_add2 "value =" one line "> <inputタイプ="5。アップロード関数を実装するJava Bean:
パッケージcom.tgb.web.controller.annotation.upload; java.io.fileをインポートします。 java.io.fileinputStreamをインポートします。 java.io.fileoutputStreamをインポートします。 java.io.ioexceptionをインポートします。 java.io.printwriterをインポートします。 java.io.unsupportedencodingexceptionをインポートします。 java.net.urldeCoderをインポートします。 Import Java.util.date; java.util.iteratorをインポートします。 javax.servlet.http.httpservletrequestをインポートします。 javax.servlet.http.httpservletResponseをインポートします。 javax.swing.filechooser.filenameextensionfilterをインポートします。 org.springframework.stereotype.controllerをインポートします。 org.springframework.web.bind.annotation.requestmappingをインポートします。 org.springframework.web.bind.annotation.RequestMethodをインポートします。 Import org.springframework.web.bind.annotation.RequestParam; Import org.springframework.web.multipart.multipartfile; Import org.springframework.web.multipart.multiparthttpservletrequest; Import org.springframework.web.multipart.commons.commonsmultipartfile; Import org.springframework.web.multipart.commons.commonsmultipartresolver; Import org.springframework.web.servlet.modelandview; com.tgb.web.controller.entity.userをインポートします。 @Controller @RequestMapping( "/file")public class uploadController {@RequestMapping( "/upload")public string adduser(@requestparam( "file")commonsmultipartfile [] files、httpservletrequest request){for(int i = 0; i <fileng; i ++){ system.out.println( "filename ---------->" + files [i] .getoriginalfilename()); if(!files [i] .isempty()){int pre =(int)system.currenttimemillis(); {//出力ストリームを取得し、アップロードされたfileoutputStream os = new fileoutputStream( "h:/" + new date()。gettime() + files [i] .getoriginalfilename()); //アップロードされたfileinputStream in =(fileInputStream)files [i] .getInputStream();の入力ストリームを取得します。 //ファイルを書き込みますint b = 0; while((b = in.read())!= -1){os.write(b); } os.flush(); os.close(); in.close(); int final time =(int)system.currenttimemillis(); System.out.println(finaltime -pre); } catch(Exception e){e.printstacktrace(); system.out.println( "uploaderror"); }}} return "/success"; } @RequestMapping( "/upload2")public string upload2(httpservletrequest request、httpservletResponse応答)ILEEXCEPTION、IOEXCEPTION、IOEXCEPTION {//一般的なマルチパートResolver CommonsMultiPartResolver MultiPartreSolver = new Commonsoltertessions()GetSsossion()。 //リクエストにファイルアップロードがあるかどうか、つまり(MultiPartresolver.ismultipart(request)){// MultiParttttpservletRequest MultireQuest =(MultiParthttpservletRequest)リクエストに変換する場合。 //リクエストですべてのファイル名を取得しますiterator <string> iter = multirequest.getFileNames(); while(iter.hasnext()){//アップロードプロセスの開始時に時間を記録し、それを使用してアップロード時間int pre =(int)system.currenttimemillis()を計算します。 //アップロードファイルMultiPartFileファイルを取得= MultireQuest.getFile(iter.next()); if(file!= null){//現在アップロードされているファイル文字列myfileName = file.getoriginalFileName();のファイル名を取得します。 //名前が「」でない場合、ファイルが存在することを意味します。そうしないと、ファイルが存在しないことを意味します(myfilename.trim()!= ""){system.out.println(myfilename); //アップロードされたファイル名文字列filename = "demoupload" + file.getoriginalFileName(); //アップロードパス文字列パス= "h:/" + filenameを定義します。ファイルlocalfile = new file(path); file.transferto(localfile); }} //ファイルをアップロードした後の時間を記録int finaltime =(int)system.currenttimemillis(); System.out.println(finaltime -pre); }} return "/success"; } @RequestMapping( "/toupload")public string toupload(){return "/upload"; }} 6.最後に、バックグラウンド印刷データを見てください。データは、バックグラウンドに印刷されたファイルをアップロードするのにかかる時間から来ます。最初の写真は、BYTEストリームの書き込みを使用して、各ファイルを3つのファイルにアップロードするのにかかる時間です。 2番目の画像は、SpringMVCにラップされたパーサーを使用して、3つの同一ファイルに各ファイルをアップロードするのにかかる時間です。
バイトストリームは、ファイルアップロードの配信効率を実現し、結果は、3つのファイルを渡すのに必要な時間がそれぞれ534ms、453ms、387msであることを示しています。
SpringMVCパーサーを使用してファイルをアップロードする時間は、それぞれ2ms、1ms、および2msです。
これら2つの方法を比較することで、複数のファイルにSpringMVCを使用することは、文字を書くよりもはるかに効率的であることがわかります。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。