Servlets und JSP

Werbung
Servlets und JSP
U berblick
Servlet Process Flow
Request
Client
Response
Servlet
Servlet
Servlet
e.g. File
DB, ...
Resources
Web Server
&
Servlet-Engine
2
Java Servlet API
ä javax.servlet Package (generisch, protokollunabhangig)
ü
ü
ü
ü
ü
Servlet
ServletRequest
ServletResponse
ServletContext
...
ä javax.servlet.http Package (Erweiterung fu r HTTP)
ü
ü
ü
ü
ü
HttpServlet (Klasse)
HttpServletRequest
HttpServletResponse
HttpSession
...
3
Einfaches Beispiel
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Servlet1 extends HttpServlet {
public void doGet (HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println(
"<HTML><HEAD><TITLE>My Servlet</TITLE></HEAD><BODY>" +
"<H2>Famous Example:</H2><HR>" +
"<P>Hello World!</P>" +
"</BODY></HTML>"
);
out.close();
}
}
4
Servlet Lebenszyklus ü Szenario
(1)
ä Engine ladt Servlet-Klasse und erzeugt ein Exemplar
ü alle Variablen werden genau einmal initialisiert
ü alle Variablen bleiben aktiv, solange das Servlet-Exemplar existiert
ä Mehrere Web-Browser (=Clients) fordern das Servlet an
ü Request wird vom Web-Server an Servlet-Engine und von dieser
weiter zum entsprechenden Servlet gesandt
ä Engine erzeugt pro Request einen Thread
ü jeder Thread behandelt Request+Response des jeweiligen Clients
ü jeder Thread hat Zugriff auf die Instanzvariablen des Servlets
5
Servlet Lebenszyklus - Szenario
(2)
6
HttpServlet Lebenszyklus-Methoden
ä init(ServletConfig)
ü Variablen initialisieren, Ressourcen anfordern
1x
ä service(HttpRequest, HttpResponse) oder
doGet(HttpRequest, HttpResponse) oder
doPost(HttpRequest, HttpResponse) , ...
ü “Arbeitsß methoden
ü pro Client Request einmal aufgerufen
ä destroy()
ü Ressourcen freigeben
ü ev. Zustand speichern
1x
7
Client Request / Parameter
– request.getParameter("name") liefert
ü Wert (URL-decoded) des ersten Parameters mit Namen name oder
ü null, falls nicht vorhanden
– request.getParameterValues("name") liefert
ü Array mit Werten (URL-decoded)
fu r jedes Vorkommen des angegebenen Parameternamens
– request.getParameterNames() liefert
ü eine Aufzahlung (Enumeration) aller Parameternamen
ð funktioniert gleich bei HTML POST und GET Requests
8
Beispiel: Formulare (HTML)
<FORM ACTION="/servlet/ThreeParamsServlet" METHOD="GET">
First Parameter: <INPUT TYPE="TEXT" NAME="param1"></BR>
Second Parameter: <INPUT TYPE="TEXT" NAME="param2"></BR>
Third Parameter: <INPUT TYPE="TEXT" NAME="param3"></BR>
<CENTER><INPUT TYPE="SUBMIT"></CENTER>
</FORM>
9
Beispiel: Formulare (Servlet)
public class ThreeParamsServlet extends HttpServlet {
public void doGet (HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
String title = "Reading Three Request Parameters";
out.println(
"<HTML>\n<HEAD>\n<TITLE>" + title + "</HEAD></TITLE>\n" +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +
"<UL>\n" +
" <LI><B>param1</B>: "+req.getParameter("param1")+"</LI>\n" +
" <LI><B>param2</B>: "+req.getParameter("param2")+"</LI>\n" +
" <LI><B>param3</B>: "+req.getParameter("param3")+"</LI>\n" +
"</UL>\n" +
"</BODY>\n</HTML>"
);
Parameter
out.close();
aus dem Formular
}
}
10
Beispiel: Formulare (Ergebnis)
11
response
A.html Response
Redirection
ä "Antwort umleiten" zu andere Ressourcen
ü JSP, HTML, Servlet, ....
ä Browser fu hrt Umleitung durch
ä Request wird NEU erstellt
ü Ressource hat keinen Zugriff auf original Request + Parameter
ä Standard
response.sendRedirect("myHtml.html")
"geht mich nichts an, nimm myHtml.html Seite!"
12
request
Request Dispatching
ä "Anfrage" weiterleiten an aktive Ressourcen
ü Servlet, JSP ü aber KEINE HTML Seiten!
ä Request bleibt erhalten
ä RequestDispatcher Objekt
RequestDispatcher dispatcher =
getServletContext().
getRequestDispatcher("/servlet/Servlet2");
ü Servlet2 muss im gleichen Kontext sein
– dispatcher.forward(request, response)
ü Servlet1 darf noch keine Antwort zuru ckgesendet haben
– dispatcher.include(request, response)
ü "inkludieren" der Antwort von Servlet2
13
Sitzungen
(Session Tracking)
ä Wozu?
ü HTTP ist ein nicht sitzungsorientiertes Protokoll
ü Wenn der eBusiness-Kunde einen Artikel in den Einkaufskorb legt,
woher weiö der Server, was schon im Einkaufskorb ist?
ü Wenn der Kunde seine Online-Einkaufstour beendet, woher weiö
der Server, welcher Einkaufskorb zu welchem Kunden geho rt?
ä Wie bisher?
ü Cookies
ü URL mit Parameter
ü Versteckte HTML-Form Felder
ä Servlets bieten ein “Higher Level APIß
14
javax.servlet.http.HTTPSession
ä HttpSession-Objekte existieren am Server
request.getSession() liefert neues/existierendes Objekt
ä Automatische Assoziation mit Client u ber Cookies oder
URL-Rewriting
ü falls Client-Browser Cookies nicht unterstu tzt: URL + Parameter
ü URL + Parameter muss codiert werden: response.encodeURL
ü hangt von ServletüServer ab!
ä beliebige Objekte ko nnen gespeichert werden
ü Hashtable-artige Schnittstelle (Schlu ssel ü Wert Paare)
sessionObject.getAttribute (bzw. getValue vor V2.2)
sessionObject.setAttribute
15
Session Beispiel
protected void doPost (HttpServletRequest req,
HttpServletResponse resp)
throws ServletException, IOException {
// session variables
HttpSession session = request.getSession();
shopbeans.Cart cart = null;
synchronized (session) {
cart = (shopbeans.Cart) session.getAttribute("cart");
if ( cart == null ) {
cart = new shopbeans.Cart();
session.setAttribute("cart", cart);
}
}
cart.placeOrder();
// ... other code ...
}
16
Was sind Java Server Pages (JSP) ?
ä Webseiten mit statischem und dynamischem Inhalt
ü statisch: reines HTML
ü dynamisch: spezielle JSP-Tags und Java Skripten
ä JSP wird in ein Servlet konvertiert, wobei
ü HTML in Java Quelltext (out.print) konvertiert wird,
ü JSP Tags in Java Quelltext konvertiert werden und
ü Java Quelltext direkt u bernommen wird
ä A nderung der JSP hat automatische U bersetzung zur Folge
ä Vergleiche ASP.NET (Active Server Pages) von Microsoft
ä Erweiterung der Java Servlet API => alle Vorteile von
Servlets
17
Warum JSP und nicht Servlets ?
ä Striktere Trennung zwischen
ü Erscheinungsbild (HTML) und
ü Logik (JavaBeans)
ä HTML Code kann wie gewohnt verwendet werden
ä Veranderung des Aussehens ohne A nderung des
dynamischen Inhalts.
ä Kaum Programmierarbeit ?!
ä Einfachere Handhabung ?!
18
JSP ü Aufbau einer Seite
<%@ page import="java.util.*, java.text.DateFormat" %>
<HTML><HEAD><TITLE>JSP Test</TITLE></HEAD>
<BODY>
<% int max = 100; %>
<P>JSP Test - Za hler bis <%=max%> </P>
1. Eigenschafts Tags
2. Deklarationen
3.
<%
String dateString = DateFormat.getDateInstance(DateFormat.SHORT, <% for (int i = 0; i < max; i++) {%>
<%=i%>
<% }%>
HTML gemischt mit
Ausdru cke, Includes
Scriptlets
Tags
implizite Objekte
...
Locale.GERMAN).format(new Date());
%>
<P>Datum: <%=dateString%> </P>
</BODY></HTML>
19
Implizite Objekte
ä Innerhalb einer JSP gibt es implizit einige Objekte
ü
ü
ü
ü
request (javax.servlet.ServletRequest)
out (javax.servlet.jsp.JspWriter)
response (javax.servlet.ServletResponse)
pageContext (javax.servlet.jsp.PageContext)
ä Beno tigt wird meist nur “requestß und “outß
ü <%=request.getParameter("id")%>
ü <% ... out.println(”testⓨ
); %>
20
Deklaration, Ausdru cke, Include
ä Deklaration (Variablen, Methoden, Funktionen)
<%! int i = 0, j = 0; %>
<%! Circle c = new Circle(2.0); %>
<%! String M() {} %>
Application scope !! (= Klassenvariablen bzw. Methoden und Funktionen)
ä Ausdru cke
<%=i%>
<%=new Date()%>
<%=M()%>
Ausdruck wird in einen String konvertiert. ACHTUNG: kein abschlieöendes Semikolon.
ä Include
ü Bettet eine Datei statisch ein (zur U bersetzungszeit)
ü JSP Dateien werden geparst
<%@ include file="relativeURL" %>
21
Scriptlet
ä Ein Tag mit beliebigem Java Quelltext
ü Anweisungen
ü Variablendeklarationen
ä nur Java Quelltext, keine Tags!
<% if(request.getParameter("name") == null) {%>
<B>Der Parameter "name" fehlt.</B>
<% } else { %>
<B>Der Wert für "name" ist
<%=request.getParameter("name")%></B>
<% } %>
22
JSP Tag: forward
ä leitet Request auf eine andere relative URL um
ü Request Parameter mittels Param Tag mo glich
<jsp:forward page="Relative URL"/>
<jsp:forward page="<%=Ausdruck%>"/> leite Request auf XY
<jsp:forward page="XY">
um und verwende die
Parameter "username"
und "passwort"
<jsp:param name="user" value="jsmith"/>
<jsp:param name="passwort" value="<%=Ausdruck%>"/>
</jsp:forward>
23
JSP Tag: useBean
ä Bean Instanz wird aus einer Klasse oder einem
serialisiertem Template erzeugt
ä Bean besitzt bestimmte Lebensdauer
(page, request, session, application)
<jsp:useBean id="myBool" class="ssw.util.BoolBean" scope="session"/>
Lokalisiert oder erzeugt ein Exemplar von ssw.util.BoolBean und legt eine Referenz
in myBool ab.
<jsp:useBean id="myBool" class="ssw.util.BoolBean" scope="session">
<jsp:setProperty name="myBool" property="value" value="true"/>
</jsp:useBean>
property wird nur bei
Instanzierung gesetzt
24
JSP Tag: setProperty
ä Setzen einer oder mehrerer Eigenschaften eines Beans
ä Verwendet JavaBean setter Methoden
<jsp:setProperty name="Bean-Name"
property="*" />
Setzt alle Eigenschaften, die einem Request Parameter entsprechen.
<jsp:setProperty name="Bean-Name"
property="Eigenschaftsname" />
Setzt die Eigenschaft entsprechend dem gleichnamigen Request Parameter.
<jsp:setProperty name="Bean-Name"
property="Eigenschaftsname"
param="Parametername"/>
Setzt die Eigenschaft entsprechend dem gegebenen Request Parameter.
<jsp:setProperty name="Bean-Name"
property="Eigenschaftsname"
value="Wert" />
Setzt Eigenschaft auf entsprechenden Wert.
<jsp:setProperty name="Bean-Name"
property=" Eigenschaftsname"
value="<%=Ausdruck%>" />
Setzt Eigenschaft auf entsprechenden Wert den der Ausdruck liefert.
25
JSP Tag: getProperty
ä Ausgabe einer bestimmten Eigenschaft eines Beans
ä Bean muö vorher mit jsp:useBean erzeugt werden
ä Verwendet JavaBean getter Methode
ä Indexed properties sind nicht mo glich
ä Enterprise Beans ko nnen nicht angesprochen werden
<jsp:getProperty name="Bean-Name" property="Name"/>
26
Beispiel: JSP => Servlet
JSP
<%@ page import="java.util.Date"%>
<HTML>
<HEAD><TITLE>Date Example</TITLE></HEAD>
<BODY>
<B><%=new Date()%></B>
</BODY>
</HTML>
generiertes Servlet
import java.util.Date;
public class DateSample extends XXX implements javax.servlet.jsp.HttpJspPage {
public void _jspService(HttpServletRequest request, HttpServletResponse response) {
out.print("<HTML>\r\n<HEAD><TITLE>Date
Example</TITLE></HEAD>\r\n<BODY>\r\n<B>ⓨ
);
out.print(new Date());
out.print("</B>\r\n</BODY>\r\n</HTML>\r\n");
}
}
27
Herunterladen