تلخص الأمثلة الواردة في هذه المقالة طرق المعالجة الشائعة للملفات الثابتة في Javaweb، والتي لها قيمة عملية كبيرة في تطوير برنامج Javaweb. ويتم تلخيص الطرق المحددة على النحو التالي:
الطريقة الأولى: تنشيط خدمة Tomcat الافتراضية لمعالجة الملفات الثابتة
أضف في web.xml:
<servlet-mapping> <servlet-name>افتراضي</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>افتراضي</ اسم servlet> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>افتراضي</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping>
ملاحظة: يجب كتابته أمام DispatcherServlet، والسماح لـ defaultServlet باعتراض الطلب أولاً، حتى لا يدخل الطلب إلى Spring، وأعتقد أن الأداء هو الأفضل.
اسم Servlet الافتراضي الذي يأتي مع Tomcat وJetty وJBoss وGlassFish - "افتراضي"
اسم Servlet الافتراضي الذي يأتي مع Google App Engine - "_ah_default"
اسم Servlet الافتراضي الذي يأتي مع الراتنج - "ملف الراتنج"
اسم Servlet الافتراضي الذي يأتي مع WebLogic - "FileServlet"
اسم Servlet الافتراضي الذي يأتي مع WebSphere - "SimpleFileServlet"
الطريقة الثانية: يتم توفير mvc:resources في Spring 3.0.4 والإصدارات الأحدث.
<!-- الوصول إلى ملفات الموارد الثابتة--> <mvc:resources mapping="/images/**" location="/images/" />
الوصف: /images/** تم تعيينه إلى ResourceHttpRequestHandler للمعالجة، ويحدد الموقع موقع المورد الثابت، ويمكن أن يكون ضمن الدليل الجذر لتطبيق الويب أو داخل حزمة jar، بحيث يمكن ضغط الموارد الثابتة فيها حزمة الجرة. يمكن لفترة التخزين المؤقت تمكين تخزين الموارد الثابتة مؤقتًا على الويب
الطريقة الثالثة، استخدم <mvc:default-servlet-handler/>
<mvc:default-servlet-handler/>
سيتم تسجيل عنوان URL "/**" في urlMap الخاص بـ SimpleUrlHandlerMapping، وسيتم نقل الوصول إلى الموارد الثابتة من HandlerMapping إلى org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler للمعالجة والإرجاع.
يستخدم DefaultServletHttpRequestHandler Servlet الافتراضي لكل حاوية Servlet.
ملاحظة تكميلية: مشكلات تتعلق بترتيب تنفيذ HandlerMappings المتعددة:
قيمة سمة الطلب لـ DefaultAnnotationHandlerMapping هي: 0
<mvc:resources/>قيمة سمة الطلب لـ SimpleUrlHandlerMapping المسجلة تلقائيًا هي: 2147483646
<mvc:default-servlet-handler/>قيمة سمة الطلب لـ SimpleUrlHandlerMapping المسجلة تلقائيًا هي: 2147483647
سيقوم Spring بتنفيذ الأمر بقيمة أصغر أولاً. عند الوصول إلى ملف صورة بتنسيق a.jpg، ابحث أولاً عن المعالج من خلال DefaultAnnotationHandlerMapping، ويجب ألا يتم العثور عليه لأنه ليس لدينا إجراء يسمى a.jpg. ثم ابحث بترتيب تصاعدي لقيمة الطلب نظرًا لأن آخر SimpleUrlHandlerMapping يتطابق مع "/**"، فسوف يتطابق بالتأكيد ويمكنك الرد على الصورة.
للوصول إلى الصورة، عليك المرور عبر طبقات المطابقة. لست متأكدا كيف هو الأداء؟
أخيرًا، اسمحوا لي أن أوضح أنه عند الوصول إلى الموارد الثابتة في المخطط 2 والمخطط 3، إذا كان هناك اعتراض إجمالي مطابق (تقريبي)، فسيتم استخدام المعترض. إذا قمت بتنفيذ التحقق من الإذن في الاعتراض، فكن حذرًا لتصفية هذه الطلبات للملفات الثابتة.
إذا قام DispatcherServlet باعتراض لاحقات URL مثل *.do، فلن تكون المشاكل المذكورة أعلاه موجودة. لا يزال من المناسب الحصول على لاحقة.