CodeGym/Java курс/Модул 3/Настройка на сервлет

Настройка на сервлет

На разположение

метод init().

И няколко други полезни малки неща. Разбира се, говоря за инициализация на сервлет. Както вече знаете, след като уеб сървърът е създал обекта на сървлета и го е поставил в контейнера, той извиква метода init() на сервлета . Можете да отмените този метод и да инициализирате Howвото ви трябва в него.

Защо не използвате конструктор?

Тъй като процесът на създаване на сървлет протича по следния начин:

  • Ние създаваме обект, наследен отHttpServlet
  • Създайте обектServletContext, добавете своята сервлет променлива
  • Създайте обектServletConfig, добавете своята сервлет променлива
  • Уеб сървърът прикачва сървлета към контейнера
  • Извикване на метода init().

В конструктора на вашия сървлет много от неговите вътрешни променливи все още не са инициализирани. Контейнерът не знае нищо за вашия сервлет, вашият сервлет не знае нищо за своя контекст. Мисля, че тук всичко е ясно.

Нека напишем сървлет, който, когато се инициализира, намира файл със свойства с настройки:

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

Тук създаваме обектИмотии заредете данни от file config.properties в него . Е, в бъдеще можете да излезете от обектаИмотиразлични опции като данни за достъп до базата данни, напр.

Как да заредите правилно file със свойства

Между другото, Howво ще стане, ако сервлетът ви не работи на вашия компютър?

Да кажем, че са го написали тук и то работи на сървър някъде в друга част на света. Или няколко сървъра. Как да заредя правилно file със свойствата в този случай?

Добър въпрос. Обикновено, когато се изпълнява, сървлетът знае само относителния път на своите файлове със свойства, а не абсолютния си път, тъй като военните файлове на сървлета могат да се съхраняват навсякъде.

И така, трябва да открием пътя, където се съхранява нашият сървлет (сървлетът вече е инициализиран) и да добавим относителен път към него :)

Изглежда нещо подобно:

String path = absoluteServletParh + "relative path";

И Howто винаги, такава елементарна задача често има своето малко „но“. Вашият сървлет и неговият файл със свойства се съхраняват в архива :) Не е задължително, разбира се, но се случва. файлът със свойства често се съхранява в jar or war файлове.

Тоест вашият файл може да няма физически път на диска. Но тъй като контейнерът успя да зареди вашия сървлет, той най-вероятно ще може да зареди и вашия файл със свойства.

За да направите това, трябва да получите обекта за зареждане на клас (ClassLoader) и го помолете да качи вашия файл. Ето How ще изглежда:

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

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

метод getConfig().

Между другото, не всички параметри могат да бъдат предадени на сървлета във файловете със свойства. Например вашият сървлет комуникира с други сървлети в разпределено уеб приложение.

След това трябва да се уверите, че контейнерът предава цялата необходима информация на вашия сървлет, когато извиква своя init() метод . Освен това той прави точно това.

Вашият сървлет (не забравяйте, че е наследен от класа HttpServlet ) има метод getServletConfig() . който връща обектServletConfig, създаден и инициализиран от контейнера. Този обект има следните методи:

getInitParameterNames() Връща списък с имена на параметри на сървлета
getInitParameter(име на низ) Връща параметър на сървлета по неговото име
getServletName() Връща собственото име на сервлета
getServletContext() Връща обектServletContext

Нека напишем сървлет, който връща списък със своите параметри отServletConfig„А. Поставянето им там ще става чрез 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>

Сървлетът може да получи своите параметри с помощта на codeа:

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));
    	}
  }
}
Коментари
  • Популярен
  • Нов
  • Стар
Трябва да сте влезли, за да оставите коментар
Тази страница все още няма коментари