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