metode init().

Lan sawetara perkara cilik liyane sing migunani. Mesthi, aku ngomong babagan initialization servlet. Kaya sing wis dingerteni, sawise server web nggawe obyek servlet lan diselehake ing wadhah kasebut, diarani metode init () servlet . Sampeyan bisa ngilangi cara iki lan miwiti apa wae sing dibutuhake.

Apa ora nggunakake konstruktor?

Amarga proses nggawe servlet kaya iki:

  • Kita nggawe obyek sing diwarisake sakaHttpServlet
  • Nggawe obyekServletContext, tambahake variabel servlet
  • Nggawe obyekServletConfig, tambahake variabel servlet
  • Server web masang servlet menyang wadhah
  • Nelpon metode init().

Ing konstruktor servlet sampeyan, akeh variabel internal sing isih durung diwiwiti. Wadhah ora ngerti apa-apa babagan servlet sampeyan, servlet sampeyan ora ngerti apa-apa babagan kontekse. Aku kabeh wis jelas ing kene.

Ayo nulis servlet sing, nalika diwiwiti, nemokake file properti kanthi setelan:

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");
	 }
  }
}

Kene kita nggawe obyekPropertilan mbukak data saka file config.properties menyang . Inggih, ing mangsa sampeyan bisa metu saka obyekPropertimacem-macem opsi kayata data kanggo ngakses database, contone.

Cara mbukak file properti kanthi bener

Ngomong-ngomong, kepiye yen servlet sampeyan ora mlaku ing komputer sampeyan?

Ayo dadi ngomong padha wrote kene, lan mlaku ing server nang endi wae ing bagean liya ing donya. Utawa sawetara server. Kepiye cara mbukak file properti kanthi bener ing kasus iki?

Pitakonan apik. Biasane, nalika mlaku, servlet mung ngerti path relatif saka file properti, dudu path absolute, amarga file perang servlet bisa disimpen ing ngendi wae.

Dadi, kita kudu nemokake dalan ing ngendi servlet kita disimpen (servlet wis diinisialisasi) lan nambah path sing relatif :)

Iku katon kaya iki:

String path = absoluteServletParh + "relative path";

Lan, kaya biasane, tugas dhasar kasebut asring duwe "nanging" dhewe. Servlet sampeyan lan file properti disimpen ing arsip :) Ora mesthi, nanging kedadeyan. file properties asring disimpen ing file jar utawa perang.

Tegese, file sampeyan bisa uga ora duwe path fisik ing disk. Nanging amarga wadhah kasebut bisa mbukak servlet sampeyan, kemungkinan uga bisa mbukak file properti sampeyan.

Kanggo nindakake iki, sampeyan kudu njaluk obyek kelas loader (ClassLoader) lan njaluk dheweke ngunggah file sampeyan. Mangkene apa sing bakal katon:

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

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

metode getConfig().

Miturut cara, ora kabeh parameter bisa ditransfer menyang servlet ing file properti. Contone, servlet sampeyan sesambungan karo servlet liyane ing aplikasi web sing disebarake.

Banjur sampeyan kudu mesthekake yen wadhah kasebut ngliwati kabeh informasi sing dibutuhake menyang servlet nalika nelpon metode init () . Kajaba iku, dheweke mung nindakake.

Servlet sampeyan (elinga yen diwarisake saka kelas HttpServlet ) duwe metode getServletConfig () . kang ngasilake obyekServletConfig, digawe lan initialized dening wadhah. Objek iki nduweni cara ing ngisor iki:

getInitParameterNames() Ngasilake dhaptar jeneng parameter servlet
getInitParameter(Nama String) Ngasilake parameter servlet kanthi jeneng
getServletName() Ngasilake jeneng servlet dhewe
getServletContext() Ngasilake obyekServletContext

Ayo nulis servlet sing ngasilake dhaptar paramèter sakaServletConfig'A. Nglebokake ing kono bakal liwat file 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 bisa entuk paramèter kanthi nggunakake kode:

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));
    	}
  }
}