Servlet I

Werbung
Praxis der Internet-Programmierung
Servlet I
Statische Webseiten
1:1-Ausgabe der
angeforderten Datei
Dynamische
Komponenten auf der
Client-Seite:
4Scripts (ECMAScript,
JavaScript,…)
4Plug-Ins (Java Applets,
Macromedia Flash, …)
1
Dynamische Webseiten
Erzeugung der Ausgabe zur Laufzeit
"Web-Anwendung",
Server-seitige Technologien
Common Gateway Interface (CGI)
4Ausführung in einem Webserver-externen
Prozess
4kein Zugriff auf Ressourcen des Webservers
4je ein eigener Prozess pro Anfrage
4beliebige Sprachen möglich (C/C++, Perl,
Java, …)
4Interpretiert / kompiliert
2
Server-seitige Technologien
Server-seitige Skripte
4Serverside JavaScript SSJS
(Netscape)
4Active ServerPages ASP (Microsoft)
4Hypertext Preprocessor PHP (Apache)
4JavaServer 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>
3
Java Servlet Framework
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:
Servlet API:
JSP:
stabil
Tomcat 4.0
2.3
1.2
4
Servlets die Antwort auf
CGI Programmierung
Servlets laufen auf einem Webserver
in einem Servletcontainer.
Aufgaben:
4Zugriff auf REQUEST
4Erzeugen einer Antwort
4Formatierung der Antwort in
einem Dokument
4Senden des RESPONSE
kein eigenständiges Programm!
keine main()-Methode!
Vorteile
Alle Servlets können in einer JVM laufen
4Erleichtert die Kommunikation
4Portabilität / Stabilität / Platformunabhängikeit
4Sicherheit
4nur eine Sprache
4Funktionalität durch Methodenaufrufe auf das
Servlet Objekt
Servlet bleibt im Speicher erhalten
4Schnellem Starten bei einem neuen Request
4wenig Memory overhead
5
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
6
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>");
}
}
7
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
HttpServletRequest API
8
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>");
}
}
9
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>
Request Headers IE 5.5
10
Request Headers Netscape 6.0
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);
}
11
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>");
}
12
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
1. Hello World Servlet
2. 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.
13
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
&*,9DULDEOH
Environement Variablen
14
CGI Variable
AUTH_TYPE
PATH_INFO
&*,9DULDEOH
4Art der Autentisation
(basic oder digest)
CONTENT_LENGTH
4Pfad ohne QueryString
PATH_TRANSLATED
4# Bytes mit post
gesendet
CONTENT_TYPE
4MIME Typ von
anghängten Daten
DOCUMENT_ROOT
4wirklicher Pfad auf
dem Server
QUERY_STRING
REMOTE_ADDR
4Wurzelverzeichnis des
Webservers
4IP Adresse des Client
CGI Variable
REMOTE_HOST
&*,9DULDEOH
4Domainname vom Host
REMOTE_USER
4Username (nur bei Authentification)
REQUEST_METHOD
4Get,Post,Put,...
SCRIPT_NAME
4Pfad des Servlet
SERVER_SOFTWARE
15
Neues Servlet im JBuilder
New
Servlet
16
Rechte
Maustaste
Web Run
17
Herunterladen