Metode 1: Gunakan servletContext untuk dibaca
Dapatkan realpath dari file konfigurasi, dan kemudian baca melalui aliran file atau gunakan metode getreaasurceAsstream ().
Karena jalur file dibaca menggunakan ServletContext, file konfigurasi dapat ditempatkan di direktori kelas Web-INF, atau di tingkat aplikasi dan direktori Web-INF. Kinerja spesifik lokasi penyimpanan file dalam proyek Eclipse adalah: dapat ditempatkan di bawah SRC, atau di bawah Web-INF dan Web-Root, dll. Karena jalur dibacakan dan aliran file digunakan untuk membaca, file konfigurasi apa pun dapat dibaca, termasuk XML dan properti. Kerugian: Tidak dapat membaca informasi konfigurasi di luar servlet.
1. Pertama -tama buat proyek Javaweb yang dinamis, direktori proyek adalah sebagai berikut:
2. Buat servlet (filereader.java)
paket com.xia.filereader; impor java.io.fileInputStream; impor java.io.ioException; impor java.io.inputstream; impor java.io.inputStreamReader; impor java.text.messageFormat; impor java.util.properties; impor javax.servlet.servletException; impor javax.servlet.http.httpservlet; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; filereader kelas publik memperluas httpservlet {private static final long serialversionuid = 1l; DoGet void yang dilindungi (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException { /*** response.setContentType ("Teks /html; charset = UTF-8"); Tujuannya adalah untuk mengontrol browser untuk mendekode UTF-8; * Dengan cara ini, tidak akan ada Tiongkok yang kacau*/ response.setHeader ("tipe konten", "teks/ html; charset = utf-8"); readsrcdirpropcfgfile (respons); // Baca db1.properties configuration file response.getWriter (). println ("<hr />"); readWebrootDirpropCfgFile (respons); // Baca db2.properties configuration file response.getWriter (). println ("<hr />"); readWebrootDirpropCfgFile (respons); // Baca db2.properties configuration file response.getWriter (). println ("<hr />"); readsrcsourcepackpropcfgfile (respons); // Baca file konfigurasi db3.properties di direktori konfigurasi di bawah direktori src response.getWriter (). println ("<hr />"); ReadWebinFpropCfgFile (respons); // Baca file konfigurasi db4.properties dalam direktori jdbc di bawah direktori web-inf} public void readsrcdirpropcfgfile (httpservletResponse response) throws IoException {string path = "/httpservletResponse) Throws IoException {string path =" /web --inf/-inf/-INF/-INF/-INF/-INF/-INF/PLASSB1. InputStream in = this.getSerVletContext (). GetResourceAsstream (path); Properti props = properti baru (); props.load (dalam); String driver = props.getProperty ("jdbc.driver"); String url = props.getProperty ("jdbc.url"); String username = props.getProperty ("jdbc.username"); String password = props.getProperty ("jdbc.password"); response.getWriter (). println ("Baca file konfigurasi db1.properties di direktori src"); response.getWriter (). println (messageFormat.Format ("driver = {0}, url = {1}, username = {2}, kata sandi = {3}", driver, url, nama pengguna, kata sandi)); } public void readWebrootDirPropCfgFile (respons httpservletResponse) melempar ioException {string path = "/db2.properties"; InputStream in = this.getSerVletContext (). GetResourceAsstream (path); Properti props = properti baru (); props.load (dalam); String driver = props.getProperty ("jdbc.driver"); String url = props.getProperty ("jdbc.url"); String username = props.getProperty ("jdbc.username"); String password = props.getProperty ("jdbc.password"); response.getWriter (). println ("Baca file konfigurasi db2.properties di direktori webroot"); response.getWriter (). println (messageFormat.Format ("driver = {0}, url = {1}, username = {2}, kata sandi = {3}", driver, url, nama pengguna, kata sandi)); } public void readsrcsourcepackPropCfgFile (httpservletResponse response) melempar ioException {string path = "/web-inf/classes/config/db3.properties"; String realPath = this.getSerVletContext (). GetRealPath (path); InputStreamReader reader = inputStreamReader baru (FileInputStream baru (RealPath), "UTF-8"); Properti props = properti baru (); props.load (pembaca); String driver = props.getProperty ("jdbc.driver"); String url = props.getProperty ("jdbc.url"); String username = props.getProperty ("jdbc.username"); String password = props.getProperty ("jdbc.password"); response.getWriter (). println ("Baca file konfigurasi db3.properties di direktori konfigurasi di bawah direktori src"); response.getWriter (). println (messageFormat.Format ("driver = {0}, url = {1}, username = {2}, kata sandi = {3}", driver, url, nama pengguna, kata sandi)); } public void readWebinFpropCfgFile (httpservletResponse response) melempar ioException {string path = "/web-inf/jdbc/db4.properties"; String realPath = this.getSerVletContext (). GetRealPath (path); System.out.println ("RealPath:"+RealPath); System.out.println ("ContextPath:"+this.getSerVletContext (). GetContextPath ()); InputStreamReader reader = inputStreamReader baru (FileInputStream baru (RealPath), "UTF-8"); Properti props = properti baru (); props.load (pembaca); String driver = props.getProperty ("jdbc.driver"); String url = props.getProperty ("jdbc.url"); String username = props.getProperty ("jdbc.username"); String password = props.getProperty ("jdbc.password"); response.getWriter (). println ("Baca file konfigurasi DB4.Properties di direktori JDBC di bawah direktori web-INF"); response.getWriter (). println (messageFormat.Format ("driver = {0}, url = {1}, username = {2}, kata sandi = {3}", driver, url, nama pengguna, kata sandi)); } Protected void dopost (permintaan httpservletrequest, respons httpservletresponse) melempar servletException, ioException {}}3. Konfigurasikan Servlet (Web.xml)
<? Xml Version = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xmlns =" http://java.com/xmlns = "http://java.com/xmlns = XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/we-pappe." "" "" "" "" "" "" "" "" "" <play-name> javareaderfile </play-name> <creendak-file-file> <creendak-file> index.html </celcome-file> <creendak-file> index.htm </welcome-filtml> <creendak-file> </Welcome-file> <creend-file> Default.html </Welcome-File> </Welcome-File> <creend-file> Default.html </Welcome-file </Welcome-File> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>FileReader</servlet-name> <servlet-class>com.xia.fileReader.FileReader</servlet-class> </servlet> <servlet-mapping> <servlet-name>FileReader</servlet-name> <RURL-PATERS>/filereader </RURL-Pattern> </servlet-Mapping> </web-app>
4. Tes
Metode 2: Gunakan kelas ResourceBundle untuk membaca informasi konfigurasi
Keuntungannya adalah: sumber daya dapat dimuat dalam nama kelas yang sepenuhnya memenuhi syarat dan membacanya secara langsung, dan file sumber daya dapat dibaca dalam aplikasi non-WEB.
Kerugian: Hanya file sumber daya di bawah kelas SRC yang dapat dimuat dan hanya. File Properties yang dapat dibaca.
/** * Dapatkan semua data dalam file konfigurasi yang ditentukan * @param PropertieName * Metode panggilan: * 1. Tempatkan file konfigurasi di bawah paket sumber sumber daya tanpa menambahkan sufiks * propertiesutil.getAllMessage ("pesan"); * 2. Tempatkan di paket * propertiesutil.getallmessage ("com.test.message"); * @Return */ Daftar statis public <string> getAllMessage (string propertieName) {// Dapatkan sumber daya sumber daya sumber daya rb = resourceBundle.getBundle (propertieName.trim ()); // Dapatkan semua enumerasi kunci <string> allkey = rb.getKeys (); // lintasi tombol dan dapatkan daftar nilai <string> vallist = new ArrayList <string> (); while (allkey.hasmoreElements ()) {string key = allkey.nextElement (); String value = (string) rb.getString (key); vallist.add (nilai); } return vallist; }Metode 3: Gunakan ClassLoader untuk membaca informasi konfigurasi
Keuntungannya adalah: Informasi sumber daya konfigurasi dapat dibaca dalam aplikasi non-WEB, dan informasi file sumber daya apa pun dapat dibaca.
Kerugian: Hanya file sumber daya di bawah kelas SRC yang dimuat, dan tidak cocok untuk memuat file besar, jika tidak, itu akan menyebabkan overflow memori JVM
paket com.xia.filereader; impor java.io.bufferedReader; impor java.io.ioException; impor java.io.inputstream; impor java.io.inputStreamReader; impor java.util.properties; kelas publik readbyclassloader {public static void main (string [] args) melempar ioException {readPropFileByClassLoad (); } public static void readPropFileByClassLoad () melempar ioException {// Baca file konfigurasi db3.properties inputStream in = readbyclassLoader.class.getClassLoader (). getResourCeasStream ("config/db3.properties"); BufferedReader BR = BufferedReader baru (InputStreamReader baru (IN)); Properti props = properti baru (); props.load (br); untuk (objek s: props.keyset ()) {System.out.println (s+":"+props.getProperty (s.toString ())); }}}Metode 4: Kelas Alat PropertiesLoaderutils
/ *** PropertiesLoadUrutils yang disediakan oleh Spring memungkinkan Anda memuat sumber daya properti secara langsung melalui alamat file berdasarkan ClassPath* Keuntungan terbesar adalah: memuat file konfigurasi secara real time, dan itu berlaku segera setelah modifikasi, tanpa memulai kembali*/ void springutil private static () {properti Properties = New Properties (); while (true) {try {props = propertiesLoaderutils.LoadAllProperties ("message.properties"); untuk (kunci objek: props.keyset ()) {System.out.print (key+":"); System.out.println (props.get (key)); }} catch (ioException e) {System.out.println (e.getMessage ()); } coba {thread.sleep (5000);} catch (InterruptedException e) {E.PrintStackTrace ();}}}Ubah Properti
/** * Lewati peta pasangan nilai-kunci, perbarui file properti * * @param fileName * nama file (ditempatkan di direktori paket sumber sumber daya), dan memerlukan akhiran * @param keyvalueMap * peta peta-value public) evoid public. informasi jalur. Ketika ada Cina dan spasi di jalan, itu akan mengonversi karakter ini. Dengan cara ini, hasilnya seringkali bukan jalan nyata yang kita inginkan. Di sini, metode Urldecoder Decode dipanggil untuk mendekodenya untuk mendapatkan jalur Cina dan ruang yang asli. String filePath = propertiesutil.class.getClassLoader (). GetResource (fileName) .getFile (); Properties Properties = NULL; BufferedWriter BW = NULL; coba {filepath = urldecoder.decode (filepath, "UTF-8"); log.debug ("UpdateProperties PropertiesPath:" + FilePath); Props = PropertiesLoaderutils.LoadProperties (ClassPathResource baru (nama file)); log.debug ("UpdateProperties PropertiesPath:" + FilePath); Props = PropertiesLoaderutils.LoadProperties (ClassPathResource baru (nama file)); log.debug ("updateProperties lama:"+props); // tulis file properti bw = bufferedwriter baru (outputStreamWriter baru (fileoutputStream baru (filepath))); props.clear (); // hapus file lama untuk (tombol string: keyvalueMap.keyset ()) props.setProperty (key, keyvalueMap.get (key)); log.debug ("UpdateProperties baru:"+props); Props.Store (BW, ""); } catch (ioException e) {log.error (e.getMessage ()); } akhirnya {coba {bw.close (); } catch (ioException e) {e.printstacktrace (); }}}Meringkaskan
Di atas adalah empat metode membaca file konfigurasi oleh Javaweb yang diperkenalkan oleh editor kepada Anda. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!