Vo štvrtej časti rozprávania o servletoch sme načrtli možnosti konfiguračného súboru web.xml, pomocou ktorého môžete v určitých oblastiach ovplyvňovať správanie webovej aplikácie. Ukázali sme si, ako pomocou tejto komponenty predať servletu niekoľko inicializačných parametrov. V tejto časti budeme v možnostiach web.xml z pohľadu servletu pokračovať.

Definovanie vlastných URL

Ešte v tretej časti sme si vyrobili jednoduchý servlet, skompilovali sme ho, nasadili na server Tomcat a vyskúšali. V tom úplne najjednoduchšom variante je servlet volaný ako http://server:port/web_applikacia/servlet/package.MyServlet. Zároveň som načrtol, že servlet môžem zaregistrovať pod vlastným menom a vtedy použijem takéto URL http://server:port/web_applikacia/servlet/MenoServletu. Niekedy ani jedna z variánt nie je dostatočne vyhovujúca. Napríklad potrebujete URL odkazujúce na top úroveň ( http://server:port/web_applikacia/ ) vašej webaplikácie bez nutnosti zadávania klúčového slova servlet. Takéto URL napríklad zjednodušuje používanie relatívnych odkazov. Okrem toho je kratšie a vyzerá lepšie :-)

Na vytvorenie vlastného URL potrebujete vložiť do web.xml element <servlet-mapping> a jeho dva subelementy <servlet-name> a <url-pattern>. Meno servletu je zaregistrované meno. To znamená, že najprv musíte servlet zaregistrovať, až potom môžete vytvoriť naň vlastné URL. Do elementu <url-pattern> vložte URL relatívne vzhľadom na koreňový adresár aplikácie. Obsah tohto elementu musí začínať lomítkom (/).

<servlet>
   <servlet-name>CustomURL</servlet-name>
   <servlet-class>interval.CustomURLServlet</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>CustomURL</servlet-name>
   <url-pattern>/custom</url-pattern>
</servlet-mapping>

Teraz sa už na servlet CustomURLServlet možete odkazovať takto:

V definícii elementu <url-pattern> môžete použiť aj tzv. wildcards. Napríklad znak *. Týmto znakom môžem nahradiť „n“ iných znakov. Klasicky názov súboru, názov stránky. Napr. *.asp, *.html, *.* a pod. Ak si chcete prezrieť zdrojový kód servletu CustomURLServlet kliknite sem. Príklad si môžete vyskúšať aj on-line.

Nastavenie globálnych inicializačných parametrov

Pod globálnymi inicializačnými parametrami mám na mysli parametre spoločné pre celú aplikáciu. Tieto parametre sú dostupné pre všetky komponenty web aplikácie, na rozdiel od už prebratých čisto servletových parametrov. Na deklaráciu celo-aplikačných parametrov treba použiť element <context-param>, dva subelementy <param-name> a <param-value> a voliteľne <description>.

<context-param>
   <param-name>kontakt</param-name>
   <param-value>super.developer@java.com</param-value>
   <description>kontakt na spravcu aplikacie</description>
</context-param>

Ak máte takto nastavený parameter, prostredníctvom metódy getInitParameter() objektu ServletContext môžete získať jeho hodnotu z akéhokoľvek servletu alebo stránky JSP v danej aplikácii.

private String kontakt;
 
public void init(ServletConfig config) throws ServletException {
   super.init(config);
   ServletContext context = config.getServletContext();
   kontakt = context.getInitParameter(„kontakt“);
}

Na rozdiel od inicializácie konkrétneho servletu, pri celo-aplikačných parametroch nemusí byť servlet zaregistrovaný pod nejakým menom. Je to logické, pretože inak by ste museli registrovať každý servlet alebo JSP, ktorý by chcel(a) takýto parameter použiť. Ale samozrejme stále platí, že servlet zaregistrovať môžete. Tu je dôkaz:

Zdrojový kód servletu si môžete prezrieť tu.

Automatické spúšťanie servletu pri štarte servera

Ak si spomeniete na prvé diely tohto seriálu viete, že servlet je spúšťaný (inicializovaný a naťahovaný do pamäte) pri prvej požiadavke na jeho služby. Ale v prípade, že init() metóda servletu je „komplikovaná“ (napr. získava väčšie množstvo údajov z databázy), môže prvý užívateľ, ktorý požiada o servlet, čakať pomerne dlhú dobu kým získa výsledok. Ak chceme tento handicap odstrániť, môžeme v súbore web.xml nastaviť aby server takýto servlet natiahol automaticky po štarte. Na to je treba do vetvy <servlet></servlet> vložiť element <load-on-startup />.

<servlet>
   <servlet-name>…</servlet-name>
   <servlet-class>…</servlet-class>
   <load-on-startup />
</servlet>

Týmto teda zabezpečíte, že konkrétny servlet sa naloaduje pri štarte servera. Ak chcete takýmto spôsobom natiahnuť pri štarte viac servletov, môžete poradie ich spúšťania nechať na server. Alebo si môžete vynútiť vlastné poradie. Urobíte to jednoducho:

<servlet>
   <servlet-name>servlet1</servlet-name>
   <servlet-class>package.Servlet1</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
   <servlet-name>servlet2</servlet-name>
   <servlet-class>package.Servlet2</servlet-class>
   <load-on-startup>3</load-on-startup>
</servlet>
<servlet>
   <servlet-name>servlet3</servlet-name>
   <servlet-class>package.Servlet3</servlet-class>
   <load-on-startup>2</load-on-startup>
</servlet>

Nastavenie „uvítacej“ stránky

Predstavte si, že zadáte takéto URL http://server:port/web_applikacia/. Čo sa asi tak stane? Získa užívateľ výpis adresára? Alebo chybovú hlášku? Prípadne sa mu vráti obsah nejakého štandardného súboru (ak existuje)? Ak áno potom ktorého? Index.html, index.jsp, default.html, alebo snáď iného? Aby sme vyriešili túto dilemu vložíme do web.xml element <welcome-file-list> a aspoň jeden subelement <welcome-file>. Obsah subelementu môže byť HTML stránka alebo JSP stránka. Bohužial zatiaľ nie je možné vložiť odkaz na servlet ( Tomcat 4.0.4 ), dokonca ani keď ho zaregistrujete. Aspoň mne sa to nepodarilo, ak sa to niekomu podarí, nech mi dá vedieť ako. Odkazov môžem vložiť aj viac a v tom prípade bude server postupne v danom poradí jednotlivé súbory vyhľadávať. V prípade, že sa nenájde ani jeden z nich, výsledok závisí od konkrétneho servera. Môže to byť chybová hláška alebo výpis adresára. Server Tomcat vám vypíše obsah daného adresára.

<welcome-file-list>
   <welcome-file>hello.jsp</welcome-file>
   <welcome-file>hello.html</welcome-file>
</welcome-file-list>

Na záver vám ponúkam uverejnené príklady na stiahnutie. V budúcej časti, opustíme nezáživnú teóriu a ukážeme si ako pomocou servletu spracovať formulárové dáta.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět