CodeGym/Kursus Java/Modul 3/Persediaan Servlet

Persediaan Servlet

Tahap, pelajaran
Tersedia

kaedah init().

Dan beberapa perkara kecil lain yang berguna. Sudah tentu, saya bercakap tentang inisialisasi servlet. Seperti yang anda sedia maklum, selepas pelayan web mencipta objek servlet dan meletakkannya di dalam bekas, ia memanggil kaedah init() servlet . Anda boleh mengatasi kaedah ini dan memulakan apa sahaja yang anda perlukan di dalamnya.

Mengapa tidak menggunakan pembina?

Kerana proses membuat servlet berjalan seperti ini:

  • Kami mencipta objek yang diwarisiHttpServlet
  • Buat objekServletContext, tambah pembolehubah servletnya
  • Buat objekServletConfig, tambah pembolehubah servletnya
  • Pelayan web melampirkan servlet ke bekas
  • Memanggil kaedah init().

Dalam pembina servlet anda, banyak pembolehubah dalamannya masih tidak dimulakan. Bekas tidak tahu apa-apa tentang servlet anda, servlet anda tidak tahu apa-apa tentang konteksnya. Saya rasa semuanya jelas di sini.

Mari tulis servlet yang, apabila dimulakan, mencari fail sifat dengan tetapan:

public class PropertiesServlet extends HttpServlet {
    public init() {
         try (InputStream input = new FileInputStream("c:/path/to/config.properties")) {

             Properties prop = new Properties();
             prop.load(input);

             String databaseURL = prop.getProperty("db.url");
             String databaseUser = prop.getProperty("db.user ");
             String databasePassword = prop.getProperty("db.password");
	 }
  }
}

Di sini kita mencipta objekHartanahdan muatkan data daripada fail config.properties ke dalamnya . Nah, pada masa akan datang anda boleh keluar dari objek ituHartanahpelbagai pilihan seperti data untuk mengakses pangkalan data, cth.

Bagaimana untuk memuatkan fail sifat dengan betul

Dengan cara ini, bagaimana jika servlet anda tidak berjalan pada komputer anda?

Katakan mereka menulisnya di sini, dan ia dijalankan pada pelayan di suatu tempat di bahagian lain dunia. Atau berbilang pelayan. Bagaimana untuk memuatkan fail sifat dengan betul dalam kes ini?

Soalan yang baik. Biasanya, apabila berjalan, servlet hanya mengetahui laluan relatif fail sifatnya, bukan laluan mutlaknya, kerana fail perang servlet boleh disimpan di mana-mana sahaja.

Jadi, kita perlu mengetahui laluan di mana servlet kita disimpan (servlet sudah dimulakan) dan menambah laluan relatif kepadanya :)

Ia kelihatan seperti ini:

String path = absoluteServletParh + "relative path";

Dan, seperti biasa, tugas asas seperti itu sering mempunyai "tetapi" kecilnya sendiri. Servlet anda dan fail sifatnya disimpan di dalam arkib :) Tidak semestinya, sudah tentu, tetapi ia berlaku. Fail properties selalunya disimpan di dalam jar atau fail perang.

Iaitu, fail anda mungkin tidak mempunyai laluan fizikal pada cakera. Tetapi kerana bekas itu dapat memuatkan servlet anda, kemungkinan besar ia akan dapat memuatkan fail sifat anda juga.

Untuk melakukan ini, anda perlu mendapatkan objek pemuat kelas (ClassLoader) dan minta dia memuat naik fail anda. Begini rupanya:

ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream("/config.properties");

Properties prop = new Properties();
prop.load(stream);

Kaedah getConfig().

Dengan cara ini, tidak semua parameter boleh dihantar ke servlet dalam fail sifat. Sebagai contoh, servlet anda berkomunikasi dengan servlet lain dalam aplikasi web yang diedarkan.

Kemudian anda perlu memastikan bahawa bekas itu menghantar semua maklumat yang diperlukan kepada servlet anda apabila ia memanggil kaedah init() . Lebih-lebih lagi, dia melakukan perkara itu.

Servlet anda (ingat bahawa ia diwarisi daripada kelas HttpServlet ) mempunyai kaedah getServletConfig() . yang mengembalikan objekServletConfig, dibuat dan dimulakan oleh bekas. Objek ini mempunyai kaedah berikut:

getInitParameterNames() Mengembalikan senarai nama parameter servlet
getInitParameter(Nama rentetan) Mengembalikan parameter servlet dengan namanya
getServletName() Mengembalikan nama servlet sendiri
getServletContext() Mengembalikan objekServletContext

Mari tulis servlet yang mengembalikan senarai parameternya daripadaServletConfig'A. Meletakkannya di sana akan melalui fail web.xml:

	<web-app> 
 	
        <servlet> 
            <servlet-name>Print-Servlet</servlet-name> 
            <servlet-class>PrintServlet</servlet-class> 
            <init-param> 
                <param-name>jdbc-driver</param-name> 
    	        <param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value> 
	        </init-param> 
        </servlet> 
  	
        <servlet-mapping> 
            <servlet-name>Print-Servlet</servlet-name> 
            <url-pattern>/print</url-pattern> 
        </servlet-mapping> 
  	
    </web-app>

Servlet boleh mendapatkan parameternya menggunakan kod:

public class PrintServlet extends HttpServlet {
    public void init() {
        ServletConfig config = this.getServletConfig();
        Enumeration<String> initParameterNames = config.getInitParameterNames();

        while (initParameterNames.hasMoreElements()){
       	     String key = initParameterNames.nextElement();
             System.out.println("%s: %s\n", key, config.getInitParameter(key));
    	}
  }
}
Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi