حل مشاكل المسار في شبكة جافا:
تنقسم المسارات المستخدمة في Java إلى نوعين: المسارات المطلقة والمسارات النسبية. في نهاية المطاف ، يمكن لـ Java استخدام المسارات المطلقة فقط للعثور على الموارد. جميع طرق إيجاد الموارد على المسارات النسبية هي مجرد بعض الطرق المريحة. لكن واجهة برمجة التطبيقات هي التي تساعدنا على بناء مسار مطلق في الأسفل للعثور على الموارد!
عند تطوير تطبيقات الويب ، فغالبًا ما تحتاج إلى الحصول على المسار الفعلي لجاذبية الويب الحالية في الخادم.
إذا كان Servlet أو Action أو Controller أو Filter أو المستمع والاعتراض وغيرها من الفئات ذات الصلة ، فنحن بحاجة فقط إلى الحصول على ServletContext ، ثم نستخدم ServletContext.getRealPath ("/") للحصول على العنوان الفعلي للتطبيق الحالي على الخادم.
إذا لم يكن من الممكن استرداد ServletContext في الفصل ، فهناك طريقتان للقيام بذلك:
1. استخدم آلية تحميل فئة Java للاتصال بـ xxx.class.getClassLoader (). getResource ("") ؛ طريقة للحصول على classpath ، ثم المعالجة للحصول على دليل WebRoot. لا يمكن أن تصدر هذه الطريقة إلا ضمن فئات Webroot/Web-Inf. إذا تم تعبئة الفصل في ملف جرة ، فستكون الطريقة غير صالحة. في هذا الوقت ، يجب استخدام الطريقة التالية.
2. فكرة إطار الربيع. في web-inf/web.xml ، قم بإنشاء param من webapprootkey ، وحدد قيمة (الافتراضي هو webapp.root) كقيمة مفتاح ، ثم تنفيذ string webapprootkey = getServletContext (). getRealPath ("/") ؛ من خلال المستمع ، أو تصفية ، أو servlet. ثم اكتب webapp.root المقابلة لـ WebApprootkey كمفتاح وقيمة في خصائص نظام خصائص النظام. بعد ذلك ، يتم الحصول على المسار الفعلي لـ Webroot من خلال System.getProperty ("WebApp.root") في البرنامج.
وفقا للفكرة الثانية ، يمكننا توسيعها أكثر. ومع ذلك ، بالنسبة للتطبيقات التي يتم نشرها في خادم ، إذا لم تكن احتياجاتك ، فيرجى قراءتها لأسفل.
فيما يلي بعض الطرق للحصول على classpath والمسار المطلق للطبقة الحالية. يمكنك استخدام بعض هذه الطرق للحصول على المسار المطلق للموارد التي تحتاجها:
1.
debitnoteaction.class.getResource ("")ما تحصل عليه هو دليل URI لملف Filetest.class الحالي. لا تشمل نفسك!
يحب:
ملف:/d:/eclipse/springtest/webroot/web-inf/classes/
atcarnet/src/com/evi/modules/atacarnet/action/
2.
debitnoteaction.class.getResource ("/")ما تحصل عليه هو مسار URI المطلق لل classpath الحالي.
يحب:
ملف:/d:/eclipse/springtest/webroot/web-inf/classes/
3.
thread.currentThread (). getContextClassloader (). getResource ("")ما تحصل عليه هو أيضًا مسار URI المطلق لـ ClassPath الحالي
يحب:
ملف:/d:/eclipse/springtest/webroot/web-inf/classes/
4.
debitnoteaction.class.getClassloader (). getResource ("")أو
classloader.getSystemResource ("")ما تحصل عليه هو أيضًا مسار URI المطلق لـ ClassPath الحالي.
يحب:
ملف:/d:/eclipse/springtest/webroot/web-inf/classes/
5. الحصول على المسار النسبي الخادم
System.getProperty ("user.dir")على سبيل المثال: E: /apache-tomcat-5.5.16/apache-tomcat-5.5.16/bin
أوصي باستخدام thread.currentTherD (). getContextClassloader ().
6. الحصول على المسار المطلق في المشروع
تستخدم عموما
request.getRealPath ("/")أو
request.getRealPath ("/config/")ولكن لا ينصح باستخدام request.getRealPath ("/"). يمكنك تجربة طريقة ServletContext.getRealPath ("/") للحصول على المسار المطلق إلى الدليل الجذر لتطبيق الويب
من السهل جدًا الحصول على ملف SRC ، لأن SRC هو الدليل النسبي الافتراضي. على سبيل المثال ، إذا قلت أنك تريد الحصول على ملف test.java في دليل com بموجب SRC ، فأنت بحاجة فقط إلى أن يكون ذلك كافيًا.
ملف f = ملف جديد (com/test.java) ؛
ولكن إذا كنت أرغب في الحصول على ملفات غير موجودة في دليل SRC أو دليل Webroot ، فأنا بحاجة إلى الحصول عليها من نفس المستوى من SRC أو Webroot ، على سبيل المثال ، Doc
يتم تنفيذ طريقتي الصعبة مثل هذا:
string path = this.getServletContext (). getRealPath ("/") ؛ الخصائص p = خصائص جديدة () ؛ p.load (ملف جديد fileInputStream (ملف جديد (path.substring (0 ، (path.lastindexof ("// webroot") + 1)) + "doc/db.properties"))) ؛ system.out.println (p.getProperty ("drivername")) ؛شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!