الطريقة 1: استخدم ServletContext للقراءة
احصل على RealPath من ملف التكوين ، ثم اقرأه من خلال دفق الملف أو استخدم Method GetReaAasurceasStream ().
نظرًا لأن مسار الملف يتم قراءة باستخدام ServletContext ، يمكن وضع ملف التكوين في دليل الفئات الخاص بـ Web-Inf ، أو في مستوى التطبيق ودليل الويب. الأداء المحدد لموقع تخزين الملفات في مشروع Eclipse هو: يمكن وضعه ضمن SRC ، أو ضمن Web-INF و Web-Root ، وما إلى ذلك. لأنه يتم قراءة المسار ويتم استخدام دفق الملف للقراءة ، يمكن قراءة أي ملفات تكوين ، بما في ذلك XML والخصائص. العيوب: لا يمكن قراءة معلومات التكوين خارج Servlet.
1. أولاً إنشاء مشروع Javaweb ديناميكي ، دليل المشروع كما يلي:
2. إنشاء servlet (fileReader.java)
حزمة com.xia.filereader ؛ استيراد java.io.fileInputStream ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.io.inputstreamreader ؛ استيراد java.text.messageformat ؛ استيراد java.util.properties ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservlet ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ يمتد فئة FileReader العامة httpservlet {private Static Final Long SerialVersionuid = 1L ؛ DOGED VOID DOGED (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servletexception ، ioException { /** response.setContentType ("text /html ؛ charset = utf-8") ؛ والغرض من ذلك هو التحكم في المتصفح لفك تشفير UTF-8 ؛ * وبهذه الطريقة ، لن يكون هناك صينية مشوهة*/ response.setheader ("نوع المحتوى" ، "text/ html ؛ charset = utf-8") ؛ readsrcdirpropcfgfile (استجابة) ؛ // اقرأ db1.properties configuration file response.getWriter (). println ("<hr/>") ؛ readWebRootDirPropCfgfile (استجابة) ؛ // اقرأ db2.properties configuration file response.getWriter (). println ("<hr/>") ؛ readWebRootDirPropCfgfile (استجابة) ؛ // اقرأ db2.properties configuration file response.getWriter (). println ("<hr/>") ؛ readsrcsourcepackpropcfgfile (استجابة) ؛ // اقرأ ملف تكوين DB3.Properties في دليل التكوين ضمن استجابة دليل SRC.GetWriter (). println ("<hr/>") ؛ ReadWebinFpropCfgfile (استجابة) ؛ // اقرأ ملف تكوين DB4.Properties في دليل JDBC ضمن دليل الويب الخاص بـ Web-Inf} ReadSrcDirPropcfile (httpservletResponse Response) يلقي iOexception {string path = "/web-inf/classes/db1.propister" ؛ inputStream in = this.getServletContext (). getResourCeasStream (path) ؛ خصائص الدعائم = خصائص جديدة () ؛ props.load (in) ؛ String Driver = props.getProperty ("jdbc.driver") ؛ url url = props.getProperty ("jdbc.url") ؛ سلسلة username = props.getProperty ("jdbc.userName") ؛ سلسلة كلمة مرور = props.getProperty ("jdbc.password") ؛ Response.getWriter (). println ("اقرأ ملف تكوين db1.properties في دليل SRC") ؛ desponse.getWriter (). println (messageformat.format ("driver = {0} ، url = {1} ، username = {2} ، password = {3}" ، برنامج التشغيل ، url ، اسم المستخدم ، كلمة المرور)) ؛ } public void readwebrootdirpropcfgfile (httpservletresponse response) يلقي iOexception {string path = "/db2.properties" ؛ inputStream in = this.getServletContext (). getResourCeasStream (path) ؛ خصائص الدعائم = خصائص جديدة () ؛ props.load (in) ؛ String Driver = props.getProperty ("jdbc.driver") ؛ url url = props.getProperty ("jdbc.url") ؛ سلسلة username = props.getProperty ("jdbc.userName") ؛ سلسلة كلمة مرور = props.getProperty ("jdbc.password") ؛ Response.getWriter (). println ("اقرأ ملف تكوين DB2.Properties في دليل WebRoot") ؛ desponse.getWriter (). println (messageformat.format ("driver = {0} ، url = {1} ، username = {2} ، password = {3}" ، برنامج التشغيل ، url ، اسم المستخدم ، كلمة المرور)) ؛ } void public readsrcsourceptackpropcffile (httpservletresponse respress) يلقي iOexception {string path = "/web-inf/classes/config/db3.properties" ؛ String allPath = this.getServletContext (). getRealPath (path) ؛ inputStreamReader reader = جديد inputStreamReader (FileInputStream جديد (RealPath) ، "UTF-8") ؛ خصائص الدعائم = خصائص جديدة () ؛ props.load (reader) ؛ String Driver = props.getProperty ("jdbc.driver") ؛ url url = props.getProperty ("jdbc.url") ؛ سلسلة username = props.getProperty ("jdbc.userName") ؛ سلسلة كلمة مرور = props.getProperty ("jdbc.password") ؛ Response.getWriter (). println ("اقرأ ملف تكوين DB3.Properties في دليل التكوين ضمن دليل SRC") ؛ desponse.getWriter (). println (messageformat.format ("driver = {0} ، url = {1} ، username = {2} ، password = {3}" ، برنامج التشغيل ، url ، اسم المستخدم ، كلمة المرور)) ؛ } public void readwebinfpropcfgfile (استجابة httpservletresponse) يلقي ioException {string path = "/web-inf/jdbc/db4.properties" ؛ String allPath = this.getServletContext (). getRealPath (path) ؛ System.out.println ("RealPath:"+RealPath) ؛ System.out.println ("ContextPath:"+this.getServletContext (). getContextPath ()) ؛ inputStreamReader reader = جديد inputStreamReader (FileInputStream جديد (RealPath) ، "UTF-8") ؛ خصائص الدعائم = خصائص جديدة () ؛ props.load (reader) ؛ String Driver = props.getProperty ("jdbc.driver") ؛ url url = props.getProperty ("jdbc.url") ؛ سلسلة username = props.getProperty ("jdbc.userName") ؛ سلسلة كلمة مرور = props.getProperty ("jdbc.password") ؛ Response.getWriter (). println ("اقرأ ملف تكوين DB4.Properties في دليل JDBC ضمن دليل الويب") ؛ desponse.getWriter (). println (messageformat.format ("driver = {0} ، url = {1} ، username = {2} ، password = {3}" ، برنامج التشغيل ، url ، اسم المستخدم ، كلمة المرور)) ؛ } dopost void void (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servletexception ، ioException {}}3. تكوين servlet (web.xml)
<؟ XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xd <Sefray-name> javareaderfile </simplay-name> <-list-file-lister> <lisp-file> index.html </ishiffile-file> <lispile-file> index.htm </ish welsedfile> <ishly-file> default.jsp </iship-file> </sil-file-lister> <vishlet> <Sradlet-Name> fileReader </servlet-name> <Servlet-class> com.xia.filereader.filereader </revlet-class> </iserled-mapping> <Url-pattern>/fileReader </url-pattern> </rectlet-mapping> </bil-app>
4. اختبار
الطريقة 2: استخدم فئة ResourceBundle لقراءة معلومات التكوين
المزايا هي: يمكن تحميل المورد باسم فئة مؤهلة بالكامل وقراءته مباشرة ، ويمكن قراءة ملف المورد في التطبيقات غير وايب.
العيوب: يمكن تحميل ملفات الموارد فقط تحت فئة SRC ويمكن قراءة ملفات .properties فقط.
/** * احصل على جميع البيانات في ملف التكوين المحدد * param propertyName * طريقة الاتصال: * 1. * 2. ضع في الحزمة * propertiesUtil.getAllMessage ("com.test.message") ؛ * regurn */ قائمة ثابتة عامة <string> getAllMessage (String PropertyName) {// الحصول على حزمة الموارد ResourceBundle RB = ResourceBundle.getBundle (propertyName.trim ()) ؛ // احصل على كل تعداد المفاتيح <string> allkey = rb.getkeys () ؛ // Traverse المفتاح واحصل على قائمة القيمة <string> vallist = new ArrayList <String> () ؛ بينما (allkey.hasmoreElements ()) {string key = allkey.nextElement () ؛ قيمة السلسلة = (سلسلة) rb.getString (المفتاح) ؛ vallist.add (القيمة) ؛ } إرجاع Vallist ؛ }الطريقة 3: استخدم classloader لقراءة معلومات التكوين
المزايا هي: يمكن قراءة معلومات مورد التكوين في تطبيقات غير ويدلة ، ويمكن قراءة أي معلومات ملف مورد.
العيوب: يتم تحميل ملفات الموارد فقط تحت فئة SRC ، وليست مناسبة لتحميل الملفات الكبيرة ، وإلا فإنها ستؤدي إلى تفوق ذاكرة JVM
حزمة com.xia.filereader ؛ استيراد java.io.bufferedreader ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.io.inputstreamreader ؛ استيراد java.util.properties ؛ الفئة العامة readByClassLoader {public static void main (string [] args) remrows ioException {readPropFileByClasslad () ؛ } public static void readPropFileByClasslass () يلقي iOexception {// قراءة ملف التكوين db3.properties inputStream في = readByClassloader.class.getClassloader (). getResourCeasStream ("config/db3.properties") ؛ BufferedReader BR = جديد BufferedReader (New InputStreamReader (In)) ؛ خصائص الدعائم = خصائص جديدة () ؛ props.load (br) ؛ لـ (Object s: props.keyset ()) {system.out.println (s+":"+props.getProperty (S.ToString ())) ؛ }}}الطريقة 4: PropertiesLoaderUtils Class
/ *** يتيح لك PropertiesLoaderUtils الذي توفره SPRING موارد الخصائص مباشرة من خلال عنوان الملف استنادًا إلى classpath* أكبر ميزة هي: تحميل ملف التكوين في الوقت الفعلي ، ويستحق المفعول فور التعديل ، دون إعادة تشغيل*/ private static void springutil () {properties props = جديدة () ؛) ؛ بينما (صحيح) {try {props = propertiesloaderUtils.loadAllProperties ("message.properties") ؛ لـ (مفتاح الكائن: props.keyset ()) {system.out.print (key+":") ؛ system.out.println (props.get (key)) ؛ }} catch (ioException e) {system.out.println (e.getMessage ()) ؛ } جرب {thread.sleep (5000) ؛} catch (InterruptedException e) {e.printstacktrace () ؛}}}تعديل الخصائص
/**. معلومات المسار. عندما يكون هناك صينية ومسافات في المسار ، فإنها ستحول هذه الأحرف. وبهذه الطريقة ، فإن النتيجة ليست في كثير من الأحيان المسار الحقيقي الذي نريده. هنا ، يتم استدعاء طريقة فك تشفير UrlDecoder لفك تشفيرها للحصول على مسارات الصينية والفضائية الأصلية. String filePath = propertiesutil.class.getClassLoader (). getResource (filename) .getFile () ؛ خصائص الدعائم = فارغة ؛ BufferedWriter BW = NULL ؛ حاول {filePath = urldecoder.decode (filepath ، "utf-8") ؛ log.debug ("updateProperties propertiesPath:" + FilePath) ؛ props = propertiesloaderUtils.loadProperties (classPathResource جديد (اسم الملف)) ؛ log.debug ("updateProperties propertiesPath:" + FilePath) ؛ props = propertiesloaderUtils.loadProperties (classPathResource جديد (اسم الملف)) ؛ log.debug ("updateProperties Old:"+Props) ؛ // كتابة ملف خاصية BW = جديد BufferedWriter (New OutputStreamWriter (FileOutputStream (FilePath))) ؛ props.clear () ؛ // قم بمسح الملف القديم لـ (مفتاح السلسلة: keyvaluemap.keyset ()) props.setProperty (Key ، keyValueMap.get (key)) ؛ log.debug ("updateProperties جديد:"+الدعائم) ؛ Props.store (BW ، "") ؛ } catch (ioException e) {log.error (e.getMessage ()) ؛ } أخيرًا {try {bw.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}}لخص
ما ورد أعلاه هي الطرق الأربع لقراءة ملفات التكوين بواسطة Javaweb التي يقدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!