340 likes | 458 Views
This guide provides an overview of Java Servlets and dynamic web technologies. It covers the basics of serving static and dynamic web pages, the role of server-side scripting, and common technologies such as JSP, ASP, and PHP. We delve into the lifecycle of Servlets, including initialization, request handling, and response generation, as well as the advantages of using Servlets for web applications. Learn how to work with server variables, manage HTTP requests and responses, and implement simple Java Servlet examples. ###
E N D
Praxis der Internet-Programmierung • Servlet I
Statische Webseiten • 1:1-Ausgabe der angeforderten Datei • Dynamische Komponenten auf der Client-Seite: • Scripts (ECMAScript, JavaScript,…) • Plug-Ins (Java Applets, Macromedia Flash, …)
Dynamische Webseiten • Erzeugung der Ausgabe zur Laufzeit • "Web-Anwendung",
Server-seitige Technologien • Common Gateway Interface (CGI) • Ausführung in einem Webserver-externen Prozess • kein Zugriff auf Ressourcen des Webservers • je ein eigener Prozess pro Anfrage • beliebige Sprachen möglich (C/C++, Perl, Java, …) • Interpretiert / kompiliert
Server-seitige Technologien • Server-seitige Skripte • Serverside JavaScript SSJS (Netscape) • Active ServerPages ASP (Microsoft) • Hypertext Preprocessor PHP (Apache) • JavaServer Pages JSP (Sun)
Bsp: ASP <HTML> <!-- This example displays the content of several ServerVariables. --> ALL_HTTP server variable = <%= Request.ServerVariables("ALL_HTTP") %><BR> CONTENT_LENGTH server variable = <%= Request.ServerVariables("CONTENT_LENGTH") %><BR> CONTENT_TYPE server variable = <%= Request.ServerVariables("CONTENT_TYPE") %><BR> QUERY_STRING server variable = <%= Request.ServerVariables("QUERY_STRING") %><BR> SERVER_SOFTWARE server variable = <%= Request.ServerVariables("SERVER_SOFTWARE") %> <BR> </HTML>
stabil JSEE Versionen • Java Servlet 2.2 (17.12.1999) • "write once, serve anywhere“ • stabil: • Servletcontainer: Tomcat 3.3 • Servlet API: 2.2 • JSP: 1.1 • für Entwickler: • Servletcontainer: Tomcat 4.0 • Servlet API: 2.3 • JSP: 1.2
Servlets die Antwort auf CGI Programmierung • Servlets laufen auf einem Webserver in einem Servletcontainer. • Aufgaben: • Zugriff auf REQUEST • Erzeugen einer Antwort • Formatierung der Antwort in einem Dokument • Senden des RESPONSE • kein eigenständiges Programm! • keine main()-Methode!
Vorteile • Alle Servlets können in einer JVM laufen • Erleichtert die Kommunikation • Portabilität / Stabilität / Platformunabhängikeit • Sicherheit • nur eine Sprache • Funktionalität durch Methodenaufrufe auf das Servlet Objekt • Servlet bleibt im Speicher erhalten • Schnellem Starten bei einem neuen Request • wenig Memory overhead
javax.servlet C:\Programme\jbuilder5\extras\jakarta-tomcat-src\src\webpages\docs\api
Lebenszyklus eines Servlet • Laden der Servlet-Klasse • Erzeugen einer Instanz • Ausführen der init()-Methode • prüfen auf neuere Version des *.class-Files: allenfalls neu laden • Ausführen der Methode service() • z.B. Herunterfahren des Servers • Ausführen der destroy()-Methode • garbage collection
Programmierung eines Servlets • erweitern die abstract class javax.servlet.http.HttpServlet (Subklasse von GenericServlet) • service() wird nicht überschrieben • überschreiben der Methoden doGet(), doPost(), doPut(), doDelete()
HELLO WORLD • package 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 ServletException, IOException { • res.setContentType("text/html"); • PrintWriter out = res.getWriter(); • out.println("<HTML>"); • out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>"); • out.println("<BODY>"); • out.println("<BIG>Hello World</BIG>"); • out.println("</BODY></HTML>"); • } • }
Zugriff auf REQUEST • public void doGet (HttpServletRequest req, HttpServletResponse res) • throws ServletException, IOException { • Interface HttpServletRequest • getParameter()/getParametetValues(): • Zugriff auf die Name/Wert-Paare des REQUESTS • getRemoteAddr(): IP-Adresse des Clients • getProtocol(): benutztes Protokol
Zugriff auf RESPONSE • public void doGet (HttpServletRequest req, HttpServletResponse res) • throws ServletException, IOException { • Interface HttpServletResponse • Ausgabe mittels java.io.PrintWriter • PrintWriter out = res.getWriter(); • MIME-Format: res.setContentType(CONTENT_TYPE); • ASCII-Formate: text/html, text/xml, text/plain,…
Hello II • package hello_world; • import java.io.*; • import javax.servlet.*; • import javax.servlet.http.*; • public class Hello extends HttpServlet { • public void doGet(HttpServletRequest req, HttpServletResponse res) • throws ServletException, IOException { • res.setContentType("text/html"); • PrintWriter out = res.getWriter(); • String name = req.getParameter("name"); • out.println("<HTML>"); • out.println("<HEAD><TITLE>Hello, " + name + "</TITLE></HEAD>"); • out.println("<BODY>"); • out.println("Hello, " + name); • out.println("</BODY></HTML>"); • } • }
Hello World Form • <HTML> • <HEAD> • <TITLE>Introductions</TITLE> • </HEAD> • <BODY> • <FORM METHOD=GET ACTION="/servlet/hello_world.Hello"> • If you don't mind me asking, what is your name? • <INPUT TYPE=TEXT NAME="name"><P> • <INPUT TYPE=SUBMIT> • </FORM> • </BODY> • </HTML>
HTTP Request Header • import javax.servlet.*; • import javax.servlet.http.*; • import java.io.*; • import java.util.*; • public class Request_all2 extends HttpServlet { • private static final String CONTENT_TYPE = "text/html"; • /**Initialize global variables*/ • public void init(ServletConfig config) throws ServletException { • super.init(config); • }
HTTP Request Header • /**Process the HTTP Get request*/ • public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { • response.setContentType(CONTENT_TYPE); • PrintWriter out = response.getWriter(); • String title = "Servlet Example: Showing Request Headers"; • out.println(ServletUtilities.headWithTitle(title) + • "<BODY BGCOLOR=\"#FDF5E6\">\n" + • "<H1 ALIGN=CENTER>" + title + "</H1>\n" + • "<B>Request Method: </B>" + • request.getMethod() + "<BR>\n" + • "<B>Request URI: </B>" + • request.getRequestURI() + "<BR>\n" + • "<B>Request Protocol: </B>" +
HTTP Request Header • request.getProtocol() + "<BR><BR>\n" + • "<TABLE BORDER=1 ALIGN=CENTER>\n" + • "<TR BGCOLOR=\"#FFAD00\">\n" + • "<TH>Header Name<TH>Header Value"); • Enumeration headerNames = request.getHeaderNames(); • while(headerNames.hasMoreElements()) { • String headerName = (String)headerNames.nextElement(); • out.println("<TR><TD>" + headerName); • out.println(" <TD>" + request.getHeader(headerName)); • } • out.println("</TABLE>\n</BODY></HTML>"); • }
HTTP Request Header • /**Process the HTTP Post request*/ • public void doPost(HttpServletRequest request, • HttpServletResponse response) • throws ServletException, IOException { • doGet(request, response); • } • /**Clean up resources*/ • public void destroy() { • } • }
Praktikum • SERVLET Programmierung I • Hello World Servlet • Eigenes Servlet: • Gibt aktuelle Zeit aus • Begrüsst Sie mit Morgen oder Abend • Gibt erkennt ihren Browser • Sagt Ihne ihre IP Adresse • Zeigt Ihnen den Query-String an.
Links • http://java.sun.com/products/servlet/ • http://developer.java.sun.com/developer/technicalArticles/Servlets/ • http://java.sun.com/docs/books/tutorial/servlets/ • http://www.servlets.com/index.tea • http://archive.coreservlets.com/ • http://www.oreilly.com/catalog/jservlet2/ • http://java.sun.com/j2ee/j2sdkee/ • http://java.sun.com/products/servlet/2.2/javadoc/ • http://www.ifi.unibas.ch/Courses/JavaTech/course/1306Schaub/index.htm
Environement Variablen CGI-Variable
AUTH_TYPE Art der Autentisation (basic oder digest) CONTENT_LENGTH # Bytes mit post gesendet CONTENT_TYPE MIME Typ von anghängten Daten DOCUMENT_ROOT Wurzelverzeichnis des Webservers PATH_INFO Pfad ohne Query-String PATH_TRANSLATED wirklicher Pfad auf dem Server QUERY_STRING REMOTE_ADDR IP Adresse des Client CGI Variable CGI-Variable
CGI Variable • REMOTE_HOST • Domainname vom Host • REMOTE_USER • Username (nur bei Authentification) • REQUEST_METHOD • Get,Post,Put,... • SCRIPT_NAME • Pfad des Servlet • SERVER_SOFTWARE CGI-Variable
New Servlet Neues Servlet im JBuilder
Web Run Rechte Maustaste