التعامل مع مراجع مسار السياق عند ترحيل موقع "/" إلى حزمة Java EE

StackOverflow https://stackoverflow.com/questions/142965

  •  02-07-2019
  •  | 
  •  

سؤال

تم تصميم موقع Java الموجود ليعمل ضمن "/" على Tomcat وهناك العديد من المراجع المحددة للمسارات المطلقة الثابتة مثل "/dir/dir/page".

هل ترغب في ترحيل هذا إلى حزمة Java EE، حيث سيحتاج الموقع إلى التشغيل ضمن جذر السياق، على سبيل المثال."/dir/dir/page" يصبح "/my-context-root/dir/dir/page"

الآن، يمكن الحصول على جذر السياق بسهولة باستخدام ServletRequest.getContextPath()، ولكن هذا لا يزال يعني الكثير من التغييرات في التعليمات البرمجية لترحيل قاعدة تعليمات برمجية كبيرة.معظم هذه المراجع موجودة بتنسيق HTML الحرفي.

لقد قمت بتجربة استخدام مرشحات servlet لإجراء عمليات إعادة الكتابة على HTML الصادر، ويبدو أن هذا يعمل بشكل جيد.لكنه يفرض بعض النفقات العامة، ولا أرى أنه حل دائم.(يرى EnforceContextRootFilter-1.0-src.zip لنهج مرشح servlet).

هل هناك طرق أفضل لحل هذه المشكلة؟أي شيء واضح أنا في عداد المفقودين؟جميع التعليقات موضع تقدير!

هل كانت مفيدة؟

المحلول

تحقق من ذات الصلة سؤال

يعتبر ايضا URLRewriteFilter

شيء آخر (أواصل تحرير هذا المنشور الرتق).إذا كنت تستخدم JSP (مقابل HTML الثابت أو أي شيء آخر)، فيمكنك أيضًا إنشاء ملف علامات لاستبدال علامات html الشائعة بروابط (أبرزها نموذج، img).لذلك يمكن أن يصبح <a href="/root/path">رابط</a> <t:a href="/root/path">رابطًا</t:a>.ثم يمكن للعلامة أن تقوم بالترجمة نيابةً عنك.

يمكن إجراء هذا التغيير بسهولة "بشكل جماعي"، باستخدام شيء مثل sed.

sed -e 's/<a/<t:a/g' -e 's/<\/a>/<\/t:a>/g' old/x.jsp > new/x.jsp

قد تكون إجراءات النموذج أكثر تعقيدًا بعض الشيء من sed، لكنك حصلت على الفكرة.

نصائح أخرى

استخدم عالم أباتشي عمليات إعادة التوجيه (mod_rewrite) لفعل الشيء نفسه.

بدأ عالم Servlet باستخدام المرشحات

يقوم عالم الياقوت (أو RoR) بالمزيد من نفس الأشياء ويطلقون عليه اسم التوجيه.

لذا، لا يوجد حل حول هذا الأمر (إلا إذا كنت ترغب في استخدام التعبير العادي الذكي بالكامل - والذي تمت تجربته ويعمل بشكل جيد).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top