Úvod do Java servletov

1. Prehľad

V tomto článku sa pozrieme na základný aspekt vývoja webu v prostredí Java - servlety.

2. Servlet a kontajner

Zjednodušene povedané, Servlet je trieda, ktorá vybavuje požiadavky, spracováva ich a odpovedá späť odpoveďou.

Napríklad môžeme použiť servlet na zhromažďovanie vstupov od používateľa prostredníctvom formulára HTML, na dopytovanie záznamov z databázy a na dynamické vytváranie webových stránok.

Servlety sú pod kontrolou inej Java aplikácie zvanej a Kontajner na servlet. Keď aplikácia spustená na webovom serveri prijme požiadavku, server odovzdá požiadavku kontajneru servletov - ktorý ju následne odovzdá cieľovému servletu.

3. Maven závislosti

Ak chcete do našej webovej aplikácie pridať podporu servletu, javax.servlet-api je vyžadovaná závislosť:

 javax.servlet javax.servlet-api 3.1.0 

Najnovšiu závislosť od Maven nájdete tu.

Samozrejme, budeme tiež musieť nakonfigurovať kontajner Servlet, aby sme mohli nasadiť našu aplikáciu; toto je dobré miesto pre začatie spôsobu nasadenia VOJNY na Tomcat.

4. Životný cyklus servletu

Prejdime si sadu metód, ktoré definujú životný cyklus servletu.

4.1. init ()

The init metóda je navrhnutá tak, aby sa dala volať iba raz. Ak inštancia servletu neexistuje, webový kontajner:

  1. Načíta triedu servletov
  2. Vytvorí inštanciu triedy servletov
  3. Inicializuje ho zavolaním na init metóda

The init metóda musí byť úspešne dokončená skôr, ako servlet bude môcť prijímať akékoľvek požiadavky. Zásobník servletu nemôže uviesť servlet do prevádzky, ak: init metóda buď hodí a ServletException alebo sa nevráti v časovom období definovanom webovým serverom.

public void init () hodí ServletException {// inicializačný kód, ako je nastavenie databázy atď ....}

4.2. služba ()

Táto metóda sa volá až po servlete init () metóda bola úspešne dokončená.

Kontajner volá služba () metóda na spracovanie požiadaviek prichádzajúcich od klienta, interpretuje typ požiadavky HTTP (ZÍSKAJTE, POST, PUT, ODSTRÁNIŤatď.) a hovory doGet, doPost, doPut, doDeleteatď. podľa potreby.

služba public void (požiadavka ServletRequest, odpoveď ServletResponse) vyvolá ServletException, IOException {// ...}

4.3. zničiť ()

Zavolá sa do kontajnera servletu, aby vyradil servlet z prevádzky.

Táto metóda sa volá iba raz, pokiaľ sú všetky vlákna v servlete služby metóda skončila alebo po uplynutí časového limitu. Keď kontajner zavolá túto metódu, nebude volať služby opäť na servlete.

public void zničiť () {//}

5. Príklad servletu

Poďme si teraz pripraviť úplný príklad zaobchádzania s informáciami pomocou formulára.

Na začiatok definujeme servlet s mapovaním / CalculateServlet ktorý zachytí informácie POSTed vo formulári a vráti výsledok pomocou RequestDispatcher:

@WebServlet (name = "FormServlet", urlPatterns = "/ vypočítaťServlet") verejná trieda FormServlet rozširuje HttpServlet {@Override chránený void doPost (požiadavka HttpServletRequest, odpoveď HttpServletResponse) hodí ServletException, IOExget {výška reťazca = požiadavka {výška reťazca = požiadavka) ; Hmotnosť reťazca = request.getParameter ("hmotnosť"); skúste {double bmi = vypočítaťBMI (Double.parseDouble (váha), Double.parseDouble (výška)); request.setAttribute ("bmi", bmi); response.setHeader ("Test", "Úspech"); response.setHeader ("BMI", String.valueOf (bmi)); RequestDispatcher dispečer = request.getRequestDispatcher ("index.jsp"); dispečer.predal (požiadavka, odpoveď); } catch (Výnimka e) {response.sendRedirect ("index.jsp"); }} súkromné ​​Zdvojnásobiť vypočítať BMI (zdvojnásobiť váhu, zdvojnásobiť výšku) {vratná hmotnosť / (výška * výška); }}

Ako je uvedené vyššie, triedy s poznámkami @WebServlet musí predĺžiť javax.servlet.http.HttpServlet trieda. Je dôležité si to uvedomiť @WebServlet anotácia je k dispozícii iba od verzie Java EE 6 a novšej.

The @WebServlet anotácia je kontajnerom spracovaná v čase nasadenia a zodpovedajúci servlet je sprístupnený v zadaných vzoroch adries URL. Stojí za povšimnutie, že pomocou anotácie na definovanie vzorov adries URL sa môžeme vyhnúť použitiu deskriptora nasadenia XML s názvom web.xml pre naše mapovanie servletu.

Ak chceme servlet mapovať bez anotácií, môžeme použiť tradičné web.xml namiesto toho:

  FormServlet com.root.FormServlet FormServlet / CalcServlet 

Ďalej si vytvoríme základné HTML formulár:

Vaša hmotnosť (kg):
Vaša výška (m):

$ {bmi}

Nakoniec - aby sme sa ubezpečili, že všetko funguje podľa očakávaní, napíšeme tiež rýchly test:

verejná trieda FormServletLiveTest {@Test public void whenPostRequestUsingHttpClient_thenCorrect () vyvolá výnimku {HttpClient client = new DefaultHttpClient (); HttpPost method = new HttpPost ("// localhost: 8080 / CalcServlet"); Zoznam nvps = nový ArrayList (); nvps.add (new BasicNameValuePair ("height", String.valueOf (2)))); nvps.add (new BasicNameValuePair ("weight", String.valueOf (80)))); method.setEntity (new UrlEncodedFormEntity (nvps)); HttpResponse httpResponse = client.execute (metóda); assertEquals ("Úspech", httpResponse .getHeaders ("Test") [0] .getValue ()); assertEquals ("20.0", httpResponse .getHeaders ("BMI") [0] .getValue ()); }}

6. Servlet, HttpServlet a JSP

Je dôležité to pochopiť technológia Servlet nie je obmedzená na protokol HTTP.

V praxi to je takmer vždy, ale Servlet je všeobecné rozhranie a HttpServlet je rozšírenie tohto rozhrania - pridáva podporu špecifickú pre HTTP - ako napr doGet a doPost, atď.

Nakoniec je technológia Servlet tiež hlavným hnacím motorom mnohých ďalších webových technológií, ako sú JSP - JavaServer Pages, Spring MVC atď.

7. Záver

V tomto rýchlom článku sme predstavili základy servletov vo webovej aplikácii Java.

Vzorový projekt je možné stiahnuť a spustiť tak, ako je projekt GitHub.


$config[zx-auto] not found$config[zx-overlay] not found