Inhaltsverzeichnis 1. Vortrag

Werbung
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
Herunterladen