Servlet III Struktur einer Webanwendung

Werbung
Servlet III
Java Webanwendung
Webcontainer
Web.xml
Weiterleitung von Requests
Cookies
Struktur einer Webanwendung
Wurzel
Webanwendung
Klassen Files
jar Files
1
Eigene Anwendung
Passwort
File
eigene
Fehlermeldung
Eigene Anwendung im JBuilder
Webanwendung
WAR File
Beschreibung der
Anwendung
Servlet Klassen
Statische Seiten
Fehlerseite
Passwörter
2
:$5)LOH
Web Application Archive File
• Das WAR-File verpackt
ein komplette
Webanwendung.
• Das WEB-INF Verzeichnis
ist speziell, es enthält
Konfigurationen und class
files für die
Webanwendung.
• Format = jar-File
3
Installation von Webanwendungen
:$5)LOH
Eine Webanwendung wird auf einem Server
installiert, indem das WAR-File in den webapp
Ordner kopiert wird.
Tomcat 4.0 http://jakarta.apache.org
Container
Webserver
Servlet Container
Request
Context
eigene
Servlets
Response
Session
4
Konfigurationdatei
für den Servlet Container
• ServletContext Init Parameters
• Servlet Declaration
• Servlet Mappings
• Welcome File list
• Error Pages
• MIME Type Mappings
• Session Configuration
• Application Lifecyle Listener classes
• Filter Definitions and Filter Mappings
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,
Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>servletiii.protectedpage</servlet-class>
<init-param>
<param-name>passwordFile</param-name>
<param-value>pw.properties</param-value>
</init-param>
</servlet>
5
web.xml
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>*.log</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>wetter1</servlet-name>
<url-pattern>/wetter/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>wetter2</servlet-name>
<url-pattern>/wetter2</url-pattern>
</servlet-mapping>
web.xml
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
</web-app>
6
Seiten weiterleiten
out.println(“<a href=\“http://www.unibas.ch\“>
Uni Basel </a>);
res.setHeader(“Refresh“,“3“);
res.setHeader(“Refresh“,“3; URL=http://www.unibas.ch“);
res.setStatus(res.SC_MOVED_TEMPORARILY);
res.setHeader(“Location“,“http://www.new.site“);
res.sendRedirect(“http://www.new.site“);
RFC 2616 Hypertext Transfer Protocol (HTTP/1.1)
http://www.rfc-editor.org
res.sendRedirect
CLIENT
SERVER
http://..formular1
Get Request
Servlet: formular1
…
res.sendRedirect(“ant2.html“);
…
Response
Status 302
Location ant2.html
http://..ant2.html
Get Request
Response
ant2.html
<HTML>
…
</HTML>
7
public class randomforward2 extends HttpServlet {
private static final String CONTENT_TYPE = "text/html";
private Vector wetter = new Vector();
Random random = new Random();
/**Initialize global variables*/
public void init() throws ServletException {
wetter.add("/html/gut.html");
wetter.add("/html/schlecht.html");
wetter.add("/html/nebel.html");
wetter.add("/html/kalt.html");
}
/**Process the HTTP Get request*/
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType(CONTENT_TYPE);
PrintWriter out = res.getWriter();
int index = Math.abs(random.nextInt())% wetter.size();
String go = (String)wetter.elementAt(index);
// Methode 1
//res.sendRedirect(req.getContextPath()+go);
//res.flushBuffer();
// Methode 2
//res.setStatus(res.SC_MOVED_TEMPORARILY);
//res.setHeader("Location",req.getContextPath()+go);
//res.flushBuffer();
// Methode 3
String dummy = "3; URL="+req.getContextPath()+go;
res.setHeader("Refresh",dummy);
res.flushBuffer();
out.println("<html><head><title>randomforward</title></head>");
out.println("<body>Hierhin kommen Sie nicht</body></html>");
…
8
RequestDispatcher rd;
rd = getServletContext(). \\
getRequestDispatcher(“/display.html“);
rd.forward(req,res);
RequestDispatcher disp =
req.getRequestDispatcher("/display.html");
disp.forward(req, res);
res.sendRedirect
CLIENT
http://..formular1
SERVER
Get Request
Response
Servlet: formular1
…
res.sendRedirect(“ant2.html“);
…
ant2.html
<HTML>
…
</HTML>
9
Was ist ein Cookie?
&RRNLHV
4Ein Cokie sind kleine
Textinformation
4vom Server zum Client gesendet
4Jedes Mal, wenn der Browser die
Seite wieder besucht wird das
Cookie geschickt.
4Cookies ermöglichen anhaltende
(persistent) Sitzungen via http
4RFC 2109
Vorteile?
&RRNLHV
4Identifizierung eine Users
4Personifizierte Homepages,
Portale, User Profiles
4 Automatisches Login
10
Servlet Cookie API
&RRNLHV
Erzeugen mit:
c = new Cookie(name, value)
Verschieden Attribute:
public String getComment()
public void setComment(String comment)
public String getDomain()
public void setDomain(String domainPattern)
c.setDomain(.unibas.ch)
11
Servlet Cookie API
&RRNLHV
public String getMaxAge()
public void setMaxAge(int lifetime in Sekunden)
lifetime < 0 das Cookie nicht speichern
lifetime = 0 das Cookie von der Disk löschen
public String getPath()
public void setPath(String path)
path =“/ “ Alle Seiten des Servers erhalten das Cookie
path = “/ifi/user “ Bei allen Seiten unterhalb dieses
Pfades schickt der User-Agent das Cookie
Beispiel SetCookies
&RRNLHV
package cookies;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SetCookies extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
for(int i=0; i<3; i++) {
// Default maxAge is -1, indicating cookie
// applies only to current browsing session.
Cookie cookie = new Cookie("Session-Cookie-" + i,
"Cookie-Value-S" + i);
response.addCookie(cookie);
12
&RRNLHV
Beispiel SetCookies
cookie = new Cookie("Persistent-Cookie-" + i,
"Cookie-Value-P" + i);
// Cookie is valid for an hour, regardless of whether
// user quits browser, reboots computer, or whatever.
cookie.setMaxAge(3600);
response.addCookie(cookie);
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Setting Cookies";
&RRNLHV
Beispiel SetCookies
out.println (ServletUtilities.headWithTitle(title) +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +
"There are six cookies associated with this page.\n" +
"To see them, visit the\n" +
"<A HREF=\"/servlet/cookies.ShowCookies\">\n" +
"<CODE>ShowCookies</CODE> servlet</A>.\n" +"<P>\n" +
"Three of the cookies are associated only with the\n" +
"current session, while three are persistent.\n" +
"Quit the browser, restart, and return to the\n" +
"<CODE>ShowCookies</CODE> servlet to verify that\n" +
"the three long-lived ones persist across sessions.\n" +
"</BODY></HTML>");
}
}
13
Praktikum
Kundenangaben mit PW Abfrage:
1. http Passwortabfrage
2. Formular mit Passwortabfrage
3. Eingabe von weiteren Daten
4. Alle Daten anzeigen
5. Eingabe von weiteren Daten
6. Cookie für AutoLogin
7. Möglichkeit das Cookie zu löschen
Ihr Job
1.)
2.)
3.) Eingabe von Daten
4.) Anzeige der Daten
14
15
Herunterladen