programmera.net -> jsp -> normal     för utskrift      info@programmera.net

Servlet

1. Vad är en servlet?
2. Servletens livscykel
3. Hello World!

1. Vad är en servlet?

En servlet är basen för all webbprogrammering i Java. Servletten tar nämligen emot HTTP-förfrågningar och returnerar svar på dessa till klienten.

  • För dig som är van vid ASP eller PHP kan servleten se lite konstig ut, eftersom den bara består av en massa kod. Observera att programmera en servlet tvingar en att tänka mer i termer av HTTP än HTML.
När du skriver en servlet ärver du vanligtvis av klassen HttpServlet eller en subklass till denna. HttpServlet är en abstrakt klass vilket betyder att du måste överrida minst en av klassens metoder i din servlet. Vanligast är att man överrider:
  • init(): Initierar servleten. Här kan du lägga kod som du bara vill köra en gång, som t.ex. JNDI-uppslag.
  • doGet(): För att hantera GET-förfrågningar.
  • doPost(): För att hantera POST-förfrågningar.
  • service(): Alla anrop skickas till denna metod, oavsett om det rör sig om GET eller POST. service() anropar i sin tur doGet() eller doPost() beroende på vilken operation det rör sig om. Om du vill att samma kod ska köras oavsett vilken metod som används är det service() du ska skriva över i din Servlet.
  • destroy(): Städar efter servleten innan servleten raderas ur minnet.

2. Servletens livscykel

En servlet går igenom olika stadier under sitt "liv". För de flesta stadier görs ett metodanrop. Nedan beskrivs servletens livscykel:

  1. Programmeraren skapar servleten och kompilerar den.
  2. Webb-behållaren startas.
  3. En webbläsare skickar en förfrågan till servleten.
  4. Servleten laddas till minnet.
  5. init() anropas. Detta sker bara första gången servleten anropas. Här kan man lägga databaskontakter och konstanter som bara behöver initieras en gång. Detta snabbar upp servletens service()-metod.
  6. service() anropas. Detta sker varje gång servleten anropas. service()-metoden bestämmer vilken av doXXX()-metoderna (doGet() eller doPost()) som ska köras. Om HTTP-anropet är av typen GET anropas doGet(), o.s.v..
  7. destroy() anropas. Detta sker innan servleten tas bort ur internminnet. En anledning till att en servlet tas bort ur minnet kan vara att den inte har anropats på en viss tid.
  8. Servleten raderas ur webb-behållarens internminne.
Om man sätter load-on-startup i servlet-märket i web.xml laddas servleten redan då servern startas, init() körs också.

3. Hello World!

Nu ska vi skriva en första servlet. Vi lägger servleten i webbapplikationen programmera som skapades på sidan  Hello World! .
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet{
  public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws IOException, ServletException
  {
    PrintWriter out=res.getWriter();
    out.println("<HTML>"); 
    out.println("<BODY>"); 
    out.println("<H1>Hello World!</H1>"); 
    out.println("Från en servlet."); 
    out.println("</BODY>"); 
    out.println("</HTML>"); 
  }
}
Vi sparar servleten till CATALINA_HOME/webapps/programmera/WEB-INF/classes/HelloWorld.java, och kompilerar den. Vi lägger till följande rader i web.xml:
<servlet>
    <servlet-name>helloWorld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>helloWorld</servlet-name>
    <url-pattern>/hw</url-pattern>
</servlet-mapping>
Nu kan vi anropa servleten som hw, vi får följande: