دعنا نتحدث أولاً عن مبادئ تحميل وتنزيل تنفيذ مثيل Struts2:
يتم تحميل STRUTS 2 من خلال ملف Commons FileUpload.
يستخدم Commons FileUpload اعتراض FileUpload لربط الملف بمثيل الإجراء عن طريق حفظ بيانات HTTP في مجلد مؤقت ، ثم تستخدم Struts اعتراض fileUpload. وبالتالي ، يمكننا تشغيل الملفات التي تم تحميلها بواسطة المتصفح بطريقة ملف محلي.
تطبيق محدد :
1. إنشاء صفحة index.jsp
<Body> <s: form action = "upload" method = "post" theme = "simple" enctype = "multipart/form-data"> <table align = "center"> <td> حدد ملف التحميل </td> <td id = "more"> <s: file name = "/s file> </tr> <tr> <td> <s: إرسال type = "button" value = "submit" onClick = "return checkf ()"/> </td> <td> <s: reset value = "reset"> </s: reset> </td> </td> </t tab href = "<s: url value = 'download.action'> <s: param name = 'filename'> test.txt </s: param> </s: url>"> تنزيل </a> </td> </tr> </table> </s: form> </body>
إنشاء صفحة result.jsp
<Body> <s: form> <div style = "border: 1px sold black"> تم تحميل ملف بنجاح: <br> <ul style = "type-style-type: decimal"> <s: iterator value = "#request.filename" id = "file" status = "status"> <li> <s: propert
بالطبع ، لا تنس إضافة مرجع علامة struts2 في كل صفحة <٪@taglib prefix = "s" uri = "/struts-tags" ٪>
2. إنشاء ملف updown.js والرجوع إليه في index.jsp
دالة checkf () {var files = document.getElementSbyName ("file") ؛ if (files [0] .value.length! = 0) {return true ؛ } آخر {Alert ("الرجاء تحديد ملف") ؛ العودة كاذبة }} function addmore () {var td = document.getElementById ("more") ؛ var br = document.createElement ("br") ؛ var input = document.createElement ("input") ؛ var button = document.createElement ("input") ؛ input.type = "file" ؛ input.name = "file" ؛ button.type = "button" ؛ button.value = "إزالة" ؛ button.onclick = function () {td.removechild (br) ؛ td.removechild (إدخال) ؛ td.removechild (زر) ؛ } td.appendchild (br) ؛ td.appendchild (المدخلات) ؛ td.appendchild (زر) ؛ } 3. إنشاء updownloadAction.java
package com.action ؛ import java.io.file ؛ import java.io.fileInputStream ؛ import java.io.filenotfoundException ؛ import java.io.fileOutputStream ؛ import java.io.inputstream ؛ import java.io.outputstream ؛ import java.io.unsupported javax.servlet.http.httpservletrequest ؛ استيراد com.opensymphony.xwork2.Actionsupport ؛ استيراد org.apache.struts2 قائمة خاصة <ible> ملف ؛ // المقابلة لعلامات الملف في القائمة الخاصة JSP <Tring> fileFiLename ؛ // قائمة خاصة <Tring> fileContentType ؛ // private string filename ؛ ServleTactionContext.getServletContext (). InputStream inputStream ؛ ملف destfile. OutputStream OS ؛ لـ (int i = 0 ؛ i <file.size () ؛ i ++) {inputStream = new FileInputStream (file.get (i)) ؛ destFile = ملف جديد (الجذر ، this.getFileFilename (). get (i)) ؛ OS = FileOutputStream جديد (DestFile) ؛ Byte [] Buffer = New Byte [400] ؛ طول int = 0 ؛ بينما ((طول = inputStream.Read (Buffer))> 0) {os.write (Buffer ، 0 ، length) ؛ } inputStream.close () ؛ OS.Close () ؛ } httpservletrequest request = servleTactionContext.getRequest () ؛ request.setattribute ("filename" ، fileFilename) ؛ العودة النجاح }. // إذا كان اسم ملف التنزيل صينيًا ، فعليك إجراء تشفير الأحرف servletactionContext.getResponse (). setheader ("محتوى disposition" ، "المرفق ؛ fileName =" + java.net.urlencoder.encode (filename ، "utf-8")) ؛ inputStream inputStream = جديد fileInputStream ("f:/" // استخدم المسار المطلق لتنزيل ملف "test.txt" من هذا المسار + this.getFilename ()) ؛ system.out.println (inputStream) ؛ إرجاع إدخال } // تنزيل السلسلة العامة downloadFile () يلقي استثناء {return success ؛ } السلسلة العامة getFilename () يلقي UnsupportedEncodingException {return filename ؛ } public void setFilename (اسم ملف السلسلة) يلقي UnsupportedEncodingException {this.filename = new string (filename.getBytes ("ISO8859-1") ، "UTF-8") ؛ }}ملاحظة: تم حذف أساليب الحصول على السمة.
رابعًا ، أخيرًا ملف التكوين
1. التكوين web.xml
<Ivilter> <ilter-name> struts2 </filter-name> <ilter-class> org.apache.struts2
2. تكوين struts.xml
<struts> <name constant = "struts.i18n.encoding" value = "utf-8"> </stantess> <name constant = "struts.multipart.savedir" value = "f:/"> </statent> <package name = "struts2" extends = "struts-default"> name = "success">/jsp/result.jsp </sults> <interceptor-ref name = "fileupload"> <!-الحد الأقصى (اختياري)-الحد الأقصى للملف الذي تم تحميله على الإجراء المسموح به بواسطة هذا الاعتراض (في وحدات البايت). لاحظ أن هذه المعلمة لا علاقة لها بالخصائص المحددة في webwork.properties. الافتراضي هو 2MB-> <param name = "MaximumSize"> 409600 </param> <!-Thertypes (اختياري)-قائمة مفصولة من أنواع المحتوى (مثل النص/HTML). هذه القوائم هي أنواع المحتوى المسموح بها من قبل هذا الاعتراض لانتقاله إلى الإجراء. إذا لم يتم تحديده ، يُسمح بأي نوع من التحميلات .--> <param name = "texttypes"> text/plain </param> </stilection-ref> <interceptor-ref name = "defaultStack"> </interceptor-ref> </sovemal> <action name = "تنزيل" method = "تنزيل" <النجاح ". أنواع -> <param name = "contentType"> التطبيق/txt ؛ </param> <!-حدد اسم الملف الذي تم تنزيله وطريقة العرض ، ولكن انتبه إلى الكود المشهور للأسماء الصينية. الحل هو: ترميز المعالجة-> <!-ContentDisposition هو طريقة المعالجة لتنزيل الملف ، بما في ذلك المضمنة والمرفق. الافتراضي مضمّن. عند استخدام المرفقات ، يتم تكوينه على النحو التالي: المرفق ؛ اسم الملف = "اسم الملف". -> <param name = "contentDisposition"> المرفق ؛ filename = "$ {filename}" </param> <!-احصل على inputStream من طريقة getDownloadFile () </creatt> </sults>يتم تنفيذ تحميل متعدد الأرفف STRUTS2 وتنزيل ملف واحد .
ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون مفيدًا لتعلم الجميع.