هناك طريقتان لتنفيذ التحميل متعدد الأفران في springMVC. أحدهما هو تحميل الملفات في دفق البايت الذي نستخدمه غالبًا ، والآخر هو تحميلها باستخدام محلل ملفوف في springMVC. هاتان الطريقتان لهما فجوة كبيرة في كفاءة تحقيق التحميل متعدد المنافذ. دعنا نلقي نظرة على طرق التنفيذ لهاتين الطريقتين من خلال الأمثلة ، وقارن حجم الفجوة في الكفاءة.
1. قم بتنزيل حزمة الجرة ذات الصلة. بالإضافة إلى حزمة JAR من springmvc ، com.springsource.org.apache.commons.fileupload -1.2.0.jar و com.springsource.org.apache.commons.io-1.0.jar و com.springsource.org.apache.commons.commons.
2. تكوين ملف Springannotation-Servlet.xml (يمكن تخصيص اسم الملف ، طالما أنه هو نفسه الاسم الذي تم تقديمه في web.xml):
<؟ xmlns: p = "http://www.springframework.org/schema/p" xmlns: util = "http://www.springframework.org/schema/util" http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd حزمة مسح التعليقات التوضيحية-> <السياق: مكون-المسح القاعدة = "com.tgb.web.wontroller.annotation"> </context: component-scan> <!-استبدل الخطين التاليين من التعليمات البرمجية-> <mvc: endation-driven/> <! <mvc: الموارد الموقع = "/js/" mapping = "/js/**"/> <bean id = "viewResolver"> <property name = "prefix" value = "/">/propert <property name = "maxuploadsize" value = "10485760000"> </sprement> <property name = "maxinmemorysize" value = "40960"> </propert
3. تكوين ملف web.xml:
<؟ xmlns: web = "http://java.sun.com/xml/ns/javaee" XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5 <ishly-file> index.html </iship-file> </simple-file-lister> <Servlet> <Servlet-Name> springmvc </servlet-name> <!-springmvc distributor-> <Servlet-class> org.springframework.web.servlet.dispatcherserv <Param-name> contextConfigLocation </param-name> <Param-value> classpath*: config/springannotation-servlet.xml </param-value> </ith-param> <!-يشير إلى أن servlet تتم تهيئته عند بدء تشغيل tomcat-> <filter-name> encodingfilter </filter-name> <lipter-class> org.springframework.web.filter.characterencodingfilter </filter-class> <Ing-param> <parm-name> الترميز </param-name> <bar-value> utf-8 </ أنا أستخدم GB18030-> </IPT-PARAM> <IRING-PARAM> <PARAM-NAME> FORCEENCODING </param-name> <param-value> true </parm-value> </IPAR-PARAM> </filter> <filter-mapping> <filter-name> encodingfilter </filter-name> تريد تصفية وتكوينه وفقًا لاحتياجاتك-> </filter-mapping> <Servlet-mapping> <Sradlet-Name> springmvc </rectlet-name> <Url-pattern>/</url-pattern> </vervlet mapping> </ball-app>
4. رمز صفحة JSP:
<٪@ page language = "java" contentType = "text/html ؛ charset = utf-8" pageencoding = "utf-8" ٪> <! <html> <head> <script type = "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"). InnerHtml+= '<div id = "div _'+i+'"> <input name = "file" /> onClick = "del_1 ('+i+')"/> </div> '؛ /> type = "Button" Value = "Delete" OnClick = "Del_2 ('+j+')" دالة 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 = "إضافة سطر واحد"> <إدخال type = "إرسال" value = "upload"> </form> <br> <hr align = "left" color = "#ff0000" size = "3"> <br> <bring> springmvc class class file </h1> <form = "userform2" enctype = "multipart/form-data" method = "post" ""> <div id = "newupload2"> <input type = "file" name = "file"> </div> <input type = "button" id = "btn_add2" value = "add line line">5. جافا بين التي تنفذ وظيفة التحميل:
حزمة 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 ؛ استيراد 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 ؛ استيراد org.springframework.web.bind.annotation.requestparam ؛ استيراد org.springframework.web.multipart.multipartfile ؛ استيراد org.springframework.web.multipart.multiparthttpservletRequest ؛ استيراد org.springframework.web.multipart.commons.CommonSmultipartFile ؛ استيراد org.springframework.web.multipart.commons.CommonSmultiPartresolver ؛ استيراد org.springframework.web.servlet.modelandview ؛ استيراد com.tgb.web.controller.entity.user ؛ controller @requestmapping ("/file") الفئة العامة uploadController {REquestMapping ("/expload") السلسلة العامة adduser ( @requestparam ("file") commonsmultipartfile [] ، httpservletrequest request) {for ( system.out.println ("filename ----------->" + files [i] .getoriginalfilename ()) ؛ if (! files [i] .isempty ()) {int pre = (int) system.currentTimeMillis () ؛ جرب {// الحصول على دفق الإخراج وقم بإعادة تسمية FileOutPutStream OS = جديد fileOutputStream ("H:/" + New Date (). GetTime () + ملفات [i] .getoriginalfilename ()) ؛ // احصل على دفق الإدخال من ملف fileInputStream الذي تم تحميله في = (fileInputStream) [i] .getInputStream () ؛ // اكتب الملف int b = 0 ؛ بينما ((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 (استثناء e) {E.PrintStackTrace () ؛ system.out.println ("eploaderror") ؛ }}} العودة "/النجاح" ؛ } @requestmapping ("/expload2") expload 2 (httpservletrequest request ، httpservletresponse) يرمي غير aluvalstateException ، ioException {// إنشاء محللي متعدد الحلقات (request.getsent () // الدفاع عن ما إذا كان الطلب يحتوي على ملف ، أي إذا (multipartresolver.ismultipart (request)) {// تحويل إلى طلب multipart multiparthttpletRequest multirequest = (multiparthttpservletrequest) ؛ // احصل على جميع أسماء الملفات في request iterator <string> iter = multirequest.getFilenames () ؛ بينما (iter.hasnext ()) {// سجل الوقت في بداية عملية التحميل واستخدمها لحساب وقت التحميل int int = (int) system.currentTimeMillis () ؛ // احصل على ملف تحميل multipartfile = multirequest.getFile (iter.next ()) ؛ if (file! = null) {// احصل على اسم الملف لسلسلة الملفات التي تم تحميلها حاليًا myfilename = file.getoriginalfilename () ؛ // إذا لم يكن الاسم "" ، فهذا يعني وجود الملف ، وإلا فهذا يعني أن الملف غير موجود إذا (myfilename.trim ())! = "") {system.out.println (myfilename) ؛ . // تحديد مسار سلسلة التحميل = "H:/" + اسم الملف ؛ ملف localfile = ملف جديد (path) ؛ file.transferto (localfile) ؛ }} // سجل الوقت بعد تحميل الملف int finaltime = (int) system.currentTimeMillis () ؛ System.out.println (FinalTime - Pre) ؛ }} return "/success" ؛ } @requestmapping ("/toupload") السلسلة العامة toupload () {return "/upload" ؛ }} 6. أخيرًا ، انظر إلى بيانات طباعة الخلفية. تأتي البيانات من الوقت الذي يستغرقه تحميل الملفات المطبوعة في الخلفية. الصورة الأولى هي الوقت الذي يستغرقه تحميل كل ملف في ثلاثة ملفات باستخدام كتابة دفق البايت. الصورة الثانية هي الوقت الذي يستغرقه تحميل كل ملف في ثلاثة ملفات متطابقة باستخدام محلل ملفوف في springMVC:
يدرك Byte Stream كفاءة توصيل تحميل الملفات ، وتظهر النتائج أن الوقت اللازم لتمرير الملفات الثلاثة هو 534 مللي ثانية و 453 مللي ثانية و 387 مللي ثانية على التوالي.
وقت تحميل الملفات باستخدام SPRINGMVC Parser هو 2 مللي ثانية ، 1 مللي ثانية و 2 مللي ثانية على التوالي.
من خلال مقارنة هاتين الطريقتين ، يمكننا أن نجد أن استخدام springMVC لملفات متعددة من الواضح أنه أكثر كفاءة من كتابة الأحرف.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.