1. Penjelasan ServletConfig
1.1. Mengkonfigurasi Parameter Inisialisasi Servlet
Dalam file konfigurasi servlet Web.xml, Anda dapat menggunakan satu atau lebih tag <InT-Param> untuk mengonfigurasi beberapa parameter inisialisasi untuk servlet.
Misalnya:
<servlet> <servlet-name>ServletConfigDemo1</servlet-name> <servlet-class>gacl.servlet.study.ServletConfigDemo1</servlet-class> <!--Configure the initialization parameters of ServletConfigDemo1 --> <init-param> <param-name>name</param-name> <param-value> gacl </param-value> </init-param> <in-param> <param-name> kata sandi </param-name> <param-value> 123 </param-value> </init--param> <Ilin-param> <param-name> Charset </param-name> <maram-value> <in-param> <param-name> </param-name> <maram-value>
1.2. Dapatkan parameter inisialisasi dari servlet melalui servletconfig
Ketika servlet telah mengonfigurasi parameter inisialisasi, wadah web akan secara otomatis merangkum parameter inisialisasi ini ke dalam objek servletconfig saat membuat objek instance servlet, dan meneruskan objek servletconfig ke servlet saat memanggil metode init servlet. Selain itu, kami dapat memperoleh informasi parameter inisialisasi dari servlet saat ini melalui objek servletconfig.
Misalnya:
Paket gacl.servlet.study; impor java.io.ioException; impor java.util.enumeration; impor javax.servlet.servletconfig; import javax.servlet.servletException; impor javax.servlet.http.httpservlet; impor javax.servlet.http.httpservlet; impor javax. javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; kelas publik servletconfigDemo1 memperluas httpservlet { / *** Define ServletConfig Object untuk menerima parameter inisialisasi yang dikonfigurasi* / /** * Ketika servlet mengkonfigurasi parameter inisialisasi, ketika wadah web membuat objek instance servlet, * akan secara otomatis merangkum parameter inisialisasi ini ke dalam objek servletconfig, dan ketika metode init servlet dipanggil, * meneruskan objek servletconfig ke servlet. Selain itu, programmer dapat memperoleh informasi parameter inisialisasi dari servlet saat ini melalui objek servletconfig. */ @Override public void init (servletConfig config) melempar servletException {this.config = config; } public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {// Dapatkan parameter inisialisasi string paramval dikonfigurasi dalam web.xml = this.config.getInitparameter ("nama"); // Dapatkan Param Inisialisasi yang spesifik. response.getWriter (). print ("<hr/>"); // Dapatkan semua parameter inisialisasi enumerasi <string> e = config.getInitparameternames (); while (e.hasmoreElements ()) {string name = E.NextElement (); Nilai string = config.getInitparameter (name); response.getWriter (). print (name + "=" + value + "<br/>"); }} public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {this.doget (permintaan, respons); }}Hasil operasi adalah sebagai berikut:
2. Objek ServletContext
Ketika wadah web dimulai, ia membuat objek ServletContext yang sesuai untuk setiap aplikasi web, yang mewakili aplikasi web saat ini.
Objek ServletConfig mempertahankan referensi ke objek ServletContext. Saat menulis servlet, pengembang dapat memperoleh metode servletconfig.getSerVletContext melalui metode servletconfig.getSerVletContext.
Karena semua servlet dalam aplikasi web berbagi objek ServletContext yang sama, komunikasi antara objek servlet dapat dicapai melalui objek ServletContext. Objek ServletContext biasanya juga disebut objek domain konteks.
3. Aplikasi ServletContext
3.1. Beberapa servlets mewujudkan berbagi data melalui Objek ServletContext
Contoh: ServletContextDemo1 dan ServletContextDemo2 mewujudkan berbagi data melalui Objek ServletContext
Paket gacl.servlet.study; import java.io.ioException; import javax.servlet.servletcontext; import javax.servlet.servletException; import javax.servlet.http.htpservlet; impor javax.servlet.htp.htpservlet; impor javax.servlet.htp.htpservlet; javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletContextDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String data = "XDP_GACL"; /*** Objek ServletConfig mempertahankan referensi ke objek ServletContext. Ketika pengembang menulis servlets, * dapat memperoleh metode servletconfig.getSerVletContext melalui metode servletconfig.getSerVletContext. */ServletContext context = this.getSerVletConfig (). GetserVletContext (); // dapatkan servletContext objek context.setAttribute ("data", data); // Simpan data ke Objek ServletContext} public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {doGet (permintaan, respons); }} Paket gacl.servlet.study; import java.io.ioException; import javax.servlet.servletcontext; import javax.servlet.servletException; import javax.servlet.http.htpservlet; impor javax.servlet.htp.htpservlet; impor javax.servlet.htp.htpservlet; javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletContextDemo2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext konteks = this.getSerVletContext (); String data = (string) context.getAttribute ("data"); // Ambil data dari servletContext objek response.getWriter (). Print ("data ="+data); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {doGet (permintaan, respons); }}First Run ServletContextDemo1, simpan data data ke objek ServletContext, dan kemudian jalankan ServletContextDemo2 untuk mengekstrak data dari objek ServletContext, sehingga berbagi data direalisasikan, seperti yang ditunjukkan pada gambar di bawah ini:
3.2. Dapatkan parameter inisialisasi aplikasi web
Gunakan tag <context-param> di file web.xml untuk mengonfigurasi parameter inisialisasi aplikasi web sebagai berikut:
<? Xml Version = "1.0" encoding = "UTF-8"?> <Web-app Versi = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http:/www.w3.org/org/2001 =" http:/www.w3.org/org/p21 XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http:/--java.sun.com/xml/ns/javaee/we-play-nu-nonplay <-play-" Configure initialization parameters of WEB application --> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql://localhost:3306/test</param-value> </context-param> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
Dapatkan parameter inisialisasi aplikasi web, kode ini adalah sebagai berikut:
Paket gacl.servlet.study; import java.io.ioException; import javax.servlet.servletcontext; import javax.servlet.servletException; import javax.servlet.http.htpservlet; impor javax.servlet.htp.htpservlet; impor javax.servlet.htp.htpservlet; javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse; servletcontextDemo3 memperluas httpservlet {httpsceptextexceptextexceptext, httpsceptextexcepsExceptExsExceptExsExceptExsExceptExsExcepsExsEXTEx konteks = this.getSerVletContext (); // Dapatkan parameter inisialisasi dari seluruh string situs web ContextInitparam = context.getInitparameter ("url"); response.getWriter (). print (contextInitparam); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {doGet (permintaan, respons); }}Hasil Menjalankan:
3.3. Gunakan ServletContext untuk menerapkan penerusan permintaan
ServletContextDemo4
Paket gacl.servlet.study; impor java.io.ioException; impor java.io.printwriter; impor javax.servlet.requestdispatcher; import javax.servlet.servletcontext; impor javax.servlet.servlet.servletexception; impor javax.servlet javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservlet respons; HttpservletResponse respons) melempar servletException, ioException {string data = "<h1> <font color = 'red'> abcdefghjkl </font> </h1>"; response.getoutputStream (). write (data.getbytes ()); ServletContext Context = this.getSerVletContext (); // dapatkan servletContext objek requestDispatcher rd = context.getRequestDispatcher ("/servlet/publypatcher (permintaan publypatcher (request do. permintaan, respons httpservletResponse) melempar servletException, ioException {}} ServletContextDemo5
Paket gacl.servlet.study; import java.io.ioException; impor javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.htp.htpservletreest; impor javax.servlet ServletContextDemo5 memperluas httpservlet {public void doGet (httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.getoutputStream (). "ServletDemo5" .getBytes ()); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {this.doget (permintaan, respons); }}Hasil Menjalankan:
Aksesnya adalah ServletContextDemo4, tetapi browser menampilkan konten ServletContextDemo5. Ini adalah penggunaan ServletContext untuk menerapkan penerusan permintaan.
3.4. Gunakan Objek ServletContext untuk membaca file sumber daya
Struktur Direktori Proyek adalah sebagai berikut:
Contoh kode: Gunakan servletContext untuk membaca file sumber daya
Paket gacl.servlet.study; impor java.io.fileInputstream; impor java.io.filenotfoundException; impor java.io.ioexception; impor java.io.inutstream; impor java.text.messageformat; impor java.util.properties; javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; Import javax.servlet.http.httpservletRespons; void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException { /*** response.setContentType ("Teks /html; charset = UTF-8"); Tujuannya adalah untuk mengontrol browser untuk memecahkan kode menggunakan UTF-8; * Dengan cara ini, tidak akan ada kode kacau Cina */ response.setheader ("tipe konten", "teks/ html; charset = utf-8"); readsrcdirpropcfgfile (respons); // Baca respons file konfigurasi properti.getWriter (). println ("<hr/>"); ReadWebrootDirPropCfgFile (respons); // Baca respons file konfigurasi properti.getWriter (). println ("<hr/>"); ReadWebrootDirPropCfgFile (respons); // Baca respons file konfigurasi properti.getWriter (). println ("<hr/>"); readPropCfgFile (respons); // Baca file konfigurasi DB3.Properties dalam paket db.config dalam direktori src response.getWriter (). println ("<hr/>"); readPropCfgFile2 (respons); // Baca file konfigurasi db4.properties dalam paket gacl.servlet.study dalam direktori src}/** * Baca paket konfigurasi db4.proverties @param response * @param @throwscept * readPropCfgFile2 (httpservletResponse response) melempar ioException {inputStream in = this.getSerVletContext (). getResourceAsstream ("/web-inf/class/gacl/servlet/study/db4.properties"); Properti prop = properti baru (); prop.load (dalam); Driver string = prop.getProperty ("driver"); String url = prop.getProperty ("url"); String username = prop.getProperty ("nama pengguna"); String password = prop.getProperty ("password"); response.getWriter (). println ("Baca file konfigurasi DB4.Properties di paket GACL.Servlet.Study di direktori SRC:"); response.getWriter (). println (messageFormat.Format ("driver = {0}, url = {1}, username = {2}, kata sandi = {3}", driver, url, nama pengguna, kata sandi)); } /** * Baca file konfigurasi db3.properties dalam paket db.config di direktori src * @param response * @throws filenotfoundException * @throws ioException * /private readPropCfgFile (httpserverResponse response {httpserverResception) throwscepte {httpserverResconse respon) ServletContext string path = this.getSerVletContext (). GetRealPath ("/web-inf/class/db/config/db3.properties"); InputStream in = new FileInputStream (path); Properti prop = properti baru (); prop.load (dalam); Driver string = prop.getProperty ("driver"); String url = prop.getProperty ("url"); String username = prop.getProperty ("nama pengguna"); String password = prop.getProperty ("password"); response.getWriter (). println ("Baca file konfigurasi db3.properties dalam paket db.config di bawah direktori src:"); response.getWriter (). println (messageFormat.Format ("driver = {0}, url = {1}, username = {2}, kata sandi = {3}", driver, url, nama pengguna, kata sandi)); } /*** Baca file konfigurasi properti di direktori webroot melalui objek servletcontext* @param response* @throws ioException* /private void readwebrootdirpropcfgfile (httpservespons response loughlixy (httpserponse rune. direktori*/ inputStream in = this.getSerVletContext (). getResourceAsstream ("/ db2.properties"); Properti prop = properti baru (); prop.load (dalam); Driver string = prop.getProperty ("driver"); String url = prop.getProperty ("url"); String username = prop.getProperty ("nama pengguna"); String password = prop.getProperty ("password"); response.getWriter (). println ("Baca file konfigurasi db2.properties di direktori webroot:"); response.getWriter (). Print (MessageFormat.Format ("driver = {0}, url = {1}, nama pengguna = {2}, kata sandi = {3}", driver, url, nama pengguna, kata sandi)); } /*** Baca file konfigurasi properti di direktori src melalui objek servletcontext* @param response* @throws ioException* /private void readsrcdirpropcfgfile (httpservlexponse response inpropcory in loughcory { /*** baca db1.piesponse) InputStream in = this.getSerVletContext (). GetResourCeAsstream ("/web-inf/class/db1.properties"); Properti prop = properti baru (); prop.load (dalam); Driver string = prop.getProperty ("driver"); String url = prop.getProperty ("url"); String username = prop.getProperty ("nama pengguna"); String password = prop.getProperty ("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 dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {this.doget (permintaan, respons); }}Hasil operasi adalah sebagai berikut:
Contoh kode: Baca file sumber daya menggunakan class loader
Paket gacl.servlet.study; import java.io.fileoutputstream; import java.io.ioException; import java.io.inputStream; impor impor; impor javax. javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletRespons Overflow *** BACA FILE BESAR dengan class loader* Catatan pada file sumber daya membaca melalui class loader; @Author gacl * */kelas publik servletcontextDemo7 memperluas httpservlet {public void doGet (httpservletRequest, httpservletResponse response) melempar servletException, ioException {/**); MERPANT.SETCONTENTETETET ("TEKS/HTML, HTEXCEPTION {/**; Tujuannya adalah untuk mengontrol browser untuk memecahkan kode dengan UTF-8; * Ini tidak akan menyebabkan Cina kacau */ response.setHeader ("tipe konten", "teks/ html; charset = utf-8"); test1 (respons); response.getWriter (). println ("<hr/>"); test2 (respons); response.getWriter (). println ("<hr/>"); // test3 (); test4 (); } /** * Baca file sumber daya di bawah respons classpath * @param * @throws ioException * /private void test1 (httpservletResponse response) melempar ioException {// dapatkan class loader yang memuat classloader kelas saat ini = servletcontextDeMo7.class.geterer () saat ini; // Gunakan class loader untuk membaca file konfigurasi db1.properties di src direktori inputStream in = loader.getResourceAsstream ("db1.properties"); Properti prop = properti baru (); prop.load (dalam); Driver string = prop.getProperty ("driver"); String url = prop.getProperty ("url"); String username = prop.getProperty ("nama pengguna"); String password = prop.getProperty ("password"); response.getWriter (). println ("Gunakan class loader untuk membaca 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)); } /** * Baca file sumber daya di bawah jalur kelas dan paket * @param response * @throws IoException * /private void test2 (httpservletResponse response) melempar ioException {// dapatkan class loader yang memuat classloader classloader saat ini = servletcontextDemo7.class.getClasssclasser (classloaderer); servletcontextDemo7.class.getClasssclasser saat ini); // Gunakan loader kelas untuk membaca file konfigurasi DB4.Properties di paket GACL.Servlet.Study di SRC Directory InputStream in = loader.getResourceAsStream ("GACL/Servlet/Studies/DB4.Properties"); Properti prop = properti baru (); prop.load (dalam); Driver string = prop.getProperty ("driver"); String url = prop.getProperty ("url"); String username = prop.getProperty ("nama pengguna"); String password = prop.getProperty ("password"); response.getWriter (). println ("Gunakan class loader untuk membaca file konfigurasi db4.properties dalam paket gacl.servlet.study di direktori src:"); response.getWriter (). println (messageFormat.Format ("driver = {0}, url = {1}, username = {2}, kata sandi = {3}", driver, url, nama pengguna, kata sandi)); } / *** Catatan tentang file sumber daya membaca melalui class loader: Tidak cocok untuk memuat file besar, jika tidak, ia akan menyebabkan overflow memori JVM* / public void test3 () { / *** 01.avi adalah file dengan lebih dari 150 M. Ini akan menyebabkan overflow memori saat membaca file besar ini menggunakan class loader:* java.outofm.outofm.oUPM. ServletContextDemo7.class.getClassLoader (). GetResourceAsstream ("01.avi"); System.out.println (IN); } /** * Read 01.avi and copy to e:/root directory* 01.avi file is too large, you can only use servletContext to read* @throws IOException */ public void test4() throws IOException { // path=G:/Java learning video/JavaWeb learning video/JavaWeb/day05 video/01.avi // path=01.avi String path = this.getSerVletContext (). getRealPath ("/Web-inf/class/01.avi"); /** * path.LastIndexOf ("//") + 1 adalah cara yang sangat bagus untuk menulisnya */string filename = path.substring (path.LastIndexof ("//") + 1); // Dapatkan nama file inputStream in = this.getServletcext ().). GetResourceasStream ("" buffer byte [] = byte baru [1024]; int len = 0; OutputStream out = new fileoutputStream ("e: //" + fileName); while ((len = in.read (buffer))> 0) {out.write (buffer, 0, len); } out.close (); melampirkan(); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {this.doget (permintaan, respons); }}Hasil operasi adalah sebagai berikut:
4. Cache output servlet di sisi klien
Untuk data yang tidak sering berubah, nilai waktu cache yang masuk akal dapat diatur dalam servlet untuk menghindari permintaan pengiriman browser ke server dan sering meningkatkan kinerja server. Misalnya:
Paket gacl.servlet.study; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.htpservletrequest; impor javax.servlet.htp.htpservletreest; impor javax.servlet javax.servlet.http.httpservletResponse; kelas publik servletDemo5 memperluas httpservlet {public void doGet (httpservletRequest, httpservletResponse response) melempar servletException, ioException {string data = "abcdddddddddde (abcddfsception {string data =" abcdddddddddonponse) / *** Tetapkan nilai waktu cache data yang masuk akal untuk menghindari permintaan yang sering dari browser untuk meningkatkan kinerja server* di sini adalah untuk mengatur waktu cache data menjadi 1 hari*/ respons.setDateheader ("kedaluwarsa", system.currentTimeMillis () + 24* 3600* 1000); response.getoutputStream (). write (data.getbytes ()); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {this.doget (permintaan, respons); }}Di atas adalah semua tentang artikel ini, dan saya harap akan sangat membantu bagi semua orang untuk menguasai teknologi pengembangan Servlet Javaweb.