34
Praxis der Internet-Programmierung Servlet I

Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Embed Size (px)

Citation preview

Page 1: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Praxis der Internet-Programmierung

Servlet I

Page 2: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Statische Webseiten

1:1-Ausgabe der angeforderten Datei

Dynamische Komponenten auf der Client-Seite: Scripts (ECMAScript,

JavaScript,…)Plug-Ins (Java Applets,

Macromedia Flash, …)

Page 3: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Dynamische Webseiten

Erzeugung der Ausgabe zur Laufzeit

"Web-Anwendung",

Page 4: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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

Page 5: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Server-seitige Technologien

Server-seitige Skripte

Serverside JavaScript SSJS (Netscape)Active ServerPages ASP (Microsoft)Hypertext Preprocessor PHP (Apache)JavaServer Pages JSP (Sun)

Page 6: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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>

Page 7: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Java Servlet Framework

Page 8: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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

stabil

Page 9: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Servlets die Antwort auf CGI Programmierung

Servlets laufen auf einem Webserver in einem Servletcontainer.

Aufgaben:Zugriff auf REQUESTErzeugen einer Antwort Formatierung der Antwort in

einem DokumentSenden des RESPONSE

kein eigenständiges Programm! keine main()-Methode!

Page 10: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

VorteileAlle Servlets können in einer JVM laufen

Erleichtert die KommunikationPortabilität / Stabilität / PlatformunabhängikeitSicherheitnur eine Sprache Funktionalität durch Methodenaufrufe auf das

Servlet Objekt

Servlet bleibt im Speicher erhaltenSchnellem Starten bei einem neuen Requestwenig Memory overhead

Page 11: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

javax.servlet

C:\Programme\jbuilder5\extras\jakarta-tomcat-src\src\webpages\docs\api

Page 12: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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

Page 13: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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()

Page 14: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

HELLO WORLDpackage 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>");

}

}

Page 15: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Zugriff auf REQUEST

public void doGet (HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException {

Interface HttpServletRequestgetParameter()/getParametetValues():

Zugriff auf die Name/Wert-Paare des REQUESTS

getRemoteAddr(): IP-Adresse des Clients

getProtocol(): benutztes Protokol

Page 16: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

HttpServletRequest API

Page 17: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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,…

Page 18: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Hello IIpackage 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>");

}

}

Page 19: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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>

Page 20: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Request Headers IE 5.5

Page 21: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Request Headers Netscape 6.0

Page 22: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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);

}

Page 23: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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>" +

Page 24: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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>");

}

Page 25: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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() {

}

}

Page 26: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Praktikum

SERVLET Programmierung I

1. Hello World Servlet2. 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.

Page 27: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

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

Page 28: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Environement VariablenCGI-Variable

Page 29: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

CGI Variable

AUTH_TYPEArt der Autentisation

(basic oder digest)

CONTENT_LENGTH# Bytes mit post

gesendet

CONTENT_TYPEMIME Typ von

anghängten Daten

DOCUMENT_ROOTWurzelverzeichnis des

Webservers

PATH_INFOPfad ohne Query-

String

PATH_TRANSLATEDwirklicher Pfad auf

dem Server

QUERY_STRING

REMOTE_ADDR IP Adresse des ClientC

GI-Variable

Page 30: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

CGI Variable

REMOTE_HOSTDomainname vom Host

REMOTE_USERUsername (nur bei Authentification)

REQUEST_METHODGet,Post,Put,...

SCRIPT_NAMEPfad des Servlet

SERVER_SOFTWARE

CGI-Variable

Page 31: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

New

Neues Servlet im JBuilder

Servlet

Page 32: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts
Page 33: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts
Page 34: Praxis der Internet-Programmierung Servlet I. Statische Webseiten 1:1-Ausgabe der angeforderten Datei Dynamische Komponenten auf der Client-Seite: Scripts

Rechte Maustaste

Web Run