Servlet în întrebări și răspunsuri

Ce este un servlet?

Servlet - o interfață Java, a cărei realizare vă permite să extindă funcționalitatea serverului. Pentru a interacționa cu servletul folosește principiul cererii de răspuns. Tehnologia Java Servlet definește HTTP clase orientate spre servlet. Pentru a crea un servlet trebuie să utilizeze pachete javax.servlet și javax.servlet.http. inclusiv interfețele și clasele necesare.







Interfață Javax.servlet.Servlet este formată din trei metode primare și două metode auxiliare.

container servlet

container de servlet - este un server care oferă suport servlete sistem (Servlet ciclu de viață), în conformitate cu normele și specificațiile acceptate. Servlet Container poate funcționa ca un server web independent, și să interacționeze cu celălalt, de exemplu serverul web Apache.

Cea mai frecventă punerea în aplicare a containerului servlet. Apache Tomcat, GlassFish, Jetty, JBoss, IBM WebSphere, Oracle WebLogic.

GenericServlet și HttpServlet

Java Servlet API, în plus față de propria interfață conține, de asemenea, mai multe clase de servlete, care pot servi drept bază. Baza pentru toate aceste clase este o clasă abstractă javax.servlet.GenericServlet.

După cum se poate observa din clasa definiție GenericServlet include toate metodele și interfețele Servlet ServletConfig. Metoda nu este implementată este doar un serviciu de abstract metodă. Metoda de serviciu este numit de fiecare dată servlet.

EXEMPLU servlet Mai întâi, moștenind proprietăți GenericServlet

clasa Javax.servlet.http.HttpServlet moștenește GenericServlet.

HttpServlet oferă chiar mai mult confort pentru programator și are multe metode utile:

Interfețe ServletRequest și HttpServletRequest

Solicitare din browser-ul primește serverul ca HttpServletRequest obiect. Această interfață moștenește interfață ServletRequest. ServletRequest metode de interfață furnizează informații suplimentare, inclusiv detalii despre servlet, iar protocolul solicitare HTTP:

Când apelați servlet (adresa serverului), ca regulă, a trecut parametrii și valorile lor. Pentru a analiza parametrii și valorile lor să fie utilizate metodele de extracție descrise la clasa HttpServlet pagina.

Interfețe ServletResponse și HttpServletResponse

Interfața ServletResponse este proiectat pentru a genera și a trimite date la client. Toate metodele ServletResponse instrumente servesc acestui scop. Următoarele metode vă permit să obțineți link-uri către fluxuri de ieșire:

Dacă getOutputStream () metoda a fost deja solicitat acest răspuns este generat IllegalStateException.

HttpServletResponse interfață moștenește interfață ServletResponse și include mai multe metode utile, care sunt descrise pe pagina clasa HttpServlet. Pe aceeași pagină este un exemplu de utilizare a HttpServletResponse pentru a forma un răspuns la client.

Rularea servlet

container de servlet încarcă servletul atunci când prima cerere de client. În unele cazuri, în cazul în care un surround de servlet, trebuie să-l descărcați direct la începutul aplicării pentru a reduce timpul de procesare a cererii. Pentru a face acest lucru, utilizați tag-ul în web.xml descriptor de aplicare, ceea ce determină necesitatea de a încărca servlet la pornire.

Valoarea trebuie să fie un număr întreg. Dacă valoarea este negativă, atunci servlet este încărcat la cererea clientului, în alte cazuri, servlet-ul este încărcat la pornirea sistemului.







filtru de servlet

Filtrul servlet trebuie să pună în aplicare interfață javax.servlet.Filter. care definește trei metode:

Metoda init () reglat configurația filtrului. Metoda doFilter îndeplinește funcția de bază a filtrului. solicită container servlet init () o dată pentru a pregăti filtrul pentru funcționare, și cauzează doFilter () atunci când intră utilizatorul / browser-ul cere ca filtrul trebuie să intercepteze. După ce aplicația a terminat activitatea, numită distruge metoda ().

Filtru Servlet poate fi utilizat pentru:

  • determinarea conținutului cererii;
  • modificarea titlul cererii și a datelor;
  • modificarea antetul și datele de răspuns.

Filtrul servlet este conectat la aplicația descriptor web.xml. Următoarea listă este stabilită de filtrul servlet salut. care pot fi cauzate de adresa direct la el. Exemplu de utilizare a acestui filtru poate fi găsit pe pagina exemplu servlet, Buna ziua!

Filtrul Servlet poate fi configurat astfel încât acesta va funcționa cu un singur servlet, servlet, sau un grup pentru un grup de pagini. Următoarea listă de aplicare diskriptora filtru web.xml FILTERNAME se conectează la servlet și ServletName pagini * .html.

Configurația servlet, ServletConfig

Interfața Javax.servlet.ServletConfig este utilizat pentru a transmite informațiile de configurare servlet. Fiecare servlet are propria sa ServletConfig. care este responsabil pentru crearea unui container servlet.

Următoarea listă în metoda de inițializare a inițializarea consolei afișează numele și parametrii MNAME. cerere (a se vedea. exemplul de mai sus), specificate în descriptor.

Contextul servlet, ServletContext

Pentru a accesa parametrii de servlet la WEB-aplicație, trebuie să utilizați interfața javax.servlet.ServletContext. ServletContext obiect este unic și este disponibil pentru toate servleturile.

ServletContext permite accesul la parametrii WEB-aplicații definite în tag-ul descriptor web.xml :

ServletContext obiect poate fi obținut cu ajutorul metodei getServletContext (interfață ServletConfig).

Interfața ServletContext definește accesul la următoarele pentru lucrul cu atribute:

  • getAttribute obiect publice (String nume)
  • getAttributeNames java.util.Enumeration publice ()
  • void setAttribute publice (String nume, obiect Object)
  • void removeAttribute publice (String nume)

Atributele rol poate îndeplini obiectul din orice clasă. Scopul acestor funcții este asociat cu încărcătura nu are legătură cu fiecare alte servlete obiecte diferite.

Diferențele ServletConfig și ServletContext

  • ServletConfig obiect este unic pentru fiecare servlet și ServletContext definite pentru întreaga aplicare;
  • ServletConfig utilizate pentru parametrii servlet de inițializare și pentru obținerea parametrilor de inițializare a aplicației ServletContext pentru toate servlete;
  • ServletConfig obiect nu permite să se stabilească parametrii / atributele, în timp ce acestea pot fi setate în obiectul ServletContext. care devin disponibile pentru toate servleturile.

Aceasta înseamnă că fiecare individ ServletConfig pentru servlet, și ServletContext - pentru WEB-aplicații și este disponibil pentru toate servleturile.

interfaţă RequestDispatcher

Interfața RequestDispatcher este utilizată pentru a lucra cu resurse suplimentare, care includ un alt servlet, pagina JSP sau document HTML. De obicei, această interfață este utilizată pentru comunicarea internă între servlete în același context. Accesul la RequestDispatcher poate fi obținută folosind metoda getRequestDispatcher (String URL) interfața ServletContext.

RequestDispatcher implementează două metode:

  • anula înainte (cerere ServletRequest, răspuns ServletResponse) - cerere de transmisie / de control la o altă resursă de pe un server;
  • void includ (cerere ServletRequest, răspuns ServletResponse) - includerea de conținut suplimentar de resurse în răspuns.

Diferente metode forward () și sendRedirect ()

înainte (interfața RequestDispatcher) metoda este utilizată pentru a trimite cererea către o altă resursă din cadrul servlet. Aceasta este, acțiunea este realizată într-o singură etapă. Metoda sendRedirect () interfață ServletResponse este un două etape. În această metodă, aplicație web-client returnează un răspuns cu codul de stare 302 (redirecționării), precum și cu referire la trimiterea cererii. Browserul trimite o nouă cerere de link-ul de descărcare. Adică, înainte () este prelucrată în interiorul containerului, și sendRedirect () este procesat în browser.

Pentru a organiza tranziția în cadrul aceleiași aplicații, trebuie să utilizați înainte (), deoarece Această metodă răspunde mai rapid decât sendRedirect (), folosind resurse de rețea suplimentare.

Un exemplu de utilizare înainte () și sendRedirect () în servlet prezentate aici.