Vortrag Servlets Carsten Taubert Inhaltsverzeichnis 1. Vortrag....................................................................................................................................1 2. Beispiele................................................................................................................................10 3. Quellen..................................................................................................................................14 1. Vortrag Seite 1 / 14 Vortrag Servlets Carsten Taubert Servlets Carsten Taubert Komponenten Architekturen - Servlets Roadmap • • • • Was sind Servlets ? Wozu braucht man Servlets ? Wie erstellt man Servlets ? Wie benutzt man Servlets ? Komponenten Architekturen - Servlets Seite 2 / 14 Vortrag Servlets Carsten Taubert Begriffserklärung • Java-Klassen, die vom Client (zB: Webbrowser) aufgerufen werden, aber auf dem Web-Server ausgeführt werden • Möglichkeit von dynamisch generierten Ausgabedaten Komponenten Architekturen - Servlets Begriffserklärung • Java – Pendant zu CGI Scripten, PHP, ASP, Ruby, … • Servlet: Server + Applet • aktuelle Version: 2.5 Komponenten Architekturen - Servlets Seite 3 / 14 Vortrag Servlets Carsten Taubert Grundlagen • Muss immer die Schnittstelle javax.servlet.Servlet oder eine davon abgeleitete implementieren • normalerweise javax.servlet.http.HttpServlet Komponenten Architekturen - Servlets Lebenszyklus • Das Interface javax.servlet.Servlet – – – – – init() service() destroy() getServletConfig() getServletInfo() nicht existent constructor init() service() destroy() initialisiert Komponenten Architekturen - Servlets Seite 4 / 14 Vortrag Servlets Carsten Taubert Das erste Servlet • Aufruf im Webrowser durch http://localhost:8080/Projektname/ServletName Komponenten Architekturen - Servlets HttpServlet • Die Klasse javax.servlet.http.HttpServlet public void service (ServletRequest arg0, ServletResponse arg1) { } Komponenten Architekturen - Servlets Seite 5 / 14 Vortrag Servlets Carsten Taubert HttpServlet • doGet : – jeder Aufruf durch die Adressleiste im Browser – Links: <a href=“http://beispiel.de?arg1=carsten&arg2=taubert“>LINK</a> • doPost : – Formulardaten: <form method=“POST“ action=“MyServlet“> <input type=“TEXT“ name=“post_text“> <input type=“SUBMIT“> </form> Komponenten Architekturen - Servlets (Http)ServletRequest javax.servlet.Servlet sevice (ServletRequest, ServletResponse) getInputStream() getParameter(String) getParameterValues(String) getParamterNames() … javax.servlet.http.HttpServlet doPost | Get | .. (HttpServletRequest, HttpServletResponse) getMethode() getCookies() getSession() getHeader() … Komponenten Architekturen - Servlets Seite 6 / 14 Vortrag Servlets Carsten Taubert (Http)ServletResponse javax.servlet.Servlet sevice (ServletRequest, ServletResponse) javax.servlet.http.HttpServlet doPost | Get | .. (HttpServletRequest, HttpServletResponse) getContentType() getOutputStreamStream() getWriter() … addCookie() sendError() sendRedirect() … Komponenten Architekturen - Servlets Hello World! public class HelloWorldServlet extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("Hello World!"); } Komponenten Architekturen - Servlets Seite 7 / 14 Vortrag Servlets Carsten Taubert Deployment Descriptor • XML Konfigurationsdatei (web.xml) • Liegt im WEB-INF Verzeichnis • Bestimmt Startseite • Teilt dem Server mit welche Servlets existieren und wo er sie findet • Definiert Variablen Komponenten Architekturen - Servlets Deployment Descriptor <web-app … > <display-name>Test</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <servlet> <servlet-name>StarterServlet</servlet-name> <servlet-class>StarterServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>StarterServlet</servlet-name> <url-pattern>/StarterServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>StarterServlet</servlet-name> <url-pattern>/Starter2</url-pattern> </servlet-mapping> </web-app> Komponenten Architekturen - Servlets Seite 8 / 14 Vortrag Servlets Carsten Taubert Deployment Descriptor <web-app … > <context-param> <param-name>contextvariable</param-name> <param-value>Variable in allen Servlets</param-value> </context-param> <servlet> <servlet-name>StarterServlet</servlet-name> <servlet-class>StarterServlet</servlet-class> <init-param> <param-name>initvariable</param-name> <param-value>Variable in nur einem Servlet</param-value> </init-param> </servlet> … </web-app> Komponenten Architekturen - Servlets deployen • Ertellung einer .war (web application archive) Datei • Kann mit in eine .ear (enterprise archive) Datei gepackt werden Komponenten Architekturen - Servlets Seite 9 / 14 Vortrag Servlets Carsten Taubert 2. Beispiele Im ersten Beispiel wird die Funktionsweise der Methoden doGet und doPost beschrieben. Durch ein HTML Formular der index.html wird ein eingegebener Text an das Servlet MyServlet.java und damit an die jeweilige verantwortliche Methode übergeben. index.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Servlet Test</title> </head> <body> <h1> POST - Formular </h1> <form method="POST" action="MyServlet"> <input type="TEXT" name="post_text"> <input type="SUBMIT"> </form> <br> <br> <br> <h1> GET - Formular </h1> <form method="GET" action="MyServlet"> <input type="TEXT" name="get_text"> <input type="SUBMIT"> </form> </body> </html> Seite 10 / 14 Vortrag Servlets Carsten Taubert MyServlet.java import java.io.IOException; import java.io.PrintWriter; import import import import javax.servlet.ServletException; javax.servlet.http.HttpServlet; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; /** * Servlet implementation class MyServlet */ public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; public MyServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String one = request.getParameterValues("get_text") [0]; response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1> Text aus GET-Formular<br><br>" + one + "</h1>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String one = request.getParameter("post_text"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1>Text aus POST-Formular<br><br>" + one + "</h1>"); } } Seite 11 / 14 Vortrag Servlets Carsten Taubert Für Beispiel zwei wurde das kostenfreie Paket ACME (www.acme.com) genutzt mit dem sehr einfach aus Java-Graphics Objekten Bilder im Gif Format erstellt werden können. In diesem Beispiel soll die Funktion eines Deployment Descriptors erklärt werden. Dieser erlaubt, das Servlet StarterServlet.java durch die Aufrufe /StarterServlet, /Starter2, /Servlets/* zu erreichen. Ebenso wurden im Deployment Descriptor 2 Variabeln definiert. Eine Contextvariable contextvariabele, die in allen Servlets verfügbar ist und ein Initvariabel initvariable die nur im Servlet StarterServlet.java verfügbar ist. StarterServlet.java import import import import import java.awt.Font; java.awt.Frame; java.awt.Graphics; java.awt.Image; java.io.IOException; import import import import import javax.servlet.ServletException; javax.servlet.ServletOutputStream; javax.servlet.http.HttpServlet; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; import Acme.JPM.Encoders.GifEncoder; public class StarterServlet extends HttpServlet { private static final long serialVersionUID = 1L; public StarterServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletOutputStream out = response.getOutputStream(); Frame frame = null; Graphics g = null; try { frame = new Frame(); frame.addNotify(); Image image = frame.createImage(800, 300); g = image.getGraphics(); g.setFont(new Font("Serif", Font.ITALIC, 50)); g.drawString(request.getRequestURI(), 10, 50); g.drawString(getServletContext() .getInitParameter("contextvariable"), 100, Seite 12 / 14 Vortrag Servlets Carsten Taubert 150); g.drawString(getServletConfig().getInitParameter( "initvariable"),100, 200); response.setContentType("image/gif"); GifEncoder encoder = new GifEncoder(image, out); encoder.encode(); } finally { if (g != null) g.dispose(); if (frame != null) frame.removeNotify(); } } } web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/ xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>Test</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>contextvariable</param-name> <param-value>Variable in allen Servlets</param-value> </context-param> <servlet> <description></description> <display-name>StarterServlet</display-name> <servlet-name>StarterServlet</servlet-name> <servlet-class>StarterServlet</servlet-class> <init-param> <param-name>initvariable</param-name> <param-value>Variable in nur einem Servlet</param-value> Seite 13 / 14 Vortrag Servlets Carsten Taubert </init-param> </servlet> <servlet-mapping> <servlet-name>StarterServlet</servlet-name> <url-pattern>/StarterServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>StarterServlet</servlet-name> <url-pattern>/Starter2</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>StarterServlet</servlet-name> <url-pattern>/Servlets/*</url-pattern> </servlet-mapping> </web-app> 3. Quellen Bücher: Bill Burke & Richard Monson-Haefel: Enterprise JavaBeans 3.0 5. Auflage, O’Reilly Bryan Basham, Kathy Sierra & Bert Bates: Head First Servlets & JSP 1. Auflage, O’Reilly Internet: ACME Gif Encoder http://www.acme.com/java/software/Acme.JPM.Encoders.GifEncoder.html Wikipedia (deutsch und englisch) http://de.wikipedia.org/wiki/Servlet http://en.wikipedia.org/wiki/Java_Servlet Sun – Servlets http://java.sun.com/products/servlet/ Java Servlet 3.0 Spezifikation http://www.jcp.org/en/jsr/detail?id=315 Story of a Servlet: An Instant Tutorial http://java.sun.com/products/servlet/articles/tutorial/ Seite 14 / 14