1 / 37

Java Web Applications

Java Web Applications. WAR. Web Archive Introduced with servlet 2.2 specification Portable deployment mechanism for web applications Defines directory structure Jar’d into a .war file for deployment Uses XML deployment descriptor. Directory Structure. find ./webbasics -print ./webbasics

rsnell
Download Presentation

Java Web Applications

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java Web Applications

  2. WAR • Web Archive • Introduced with servlet 2.2 specification • Portable deployment mechanism for web applications • Defines directory structure • Jar’d into a .war file for deployment • Uses XML deployment descriptor

  3. Directory Structure find ./webbasics -print ./webbasics ./webbasics/WEB-INF ./webbasics/WEB-INF/classes ./webbasics/WEB-INF/classes/ejava ./webbasics/WEB-INF/classes/ejava/servlets ./webbasics/WEB-INF/classes/ejava/servlets/webbasics ./webbasics/WEB-INF/classes/ejava/servlets/webbasics/BonusServlet.class ./webbasics/WEB-INF/classes/ejava/servlets/webbasics/PurchaseServlet.class ./webbasics/WEB-INF/web.xml ./webbasics/WEB-INF/weblogic.xml ./webbasics/FormExample.html ./webbasics/MenuExample.html

  4. Directory Structure (Cont) • WEB-INF • Contains web.xml deployment descriptor • Contains class files for web app (classes) • Contains .jar files for web app (lib) • Contains Tag Library Descriptors (tlds) • Cannot be served to client • Other directories store web content i.e. jsp/html files, images, sound, etc.

  5. Deployment Descriptor (web.xml) <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 1.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> <web-app> <display-name>HTML Basics</display-name> <context-param> <param-name>weblogic.httpd.servlet.reloadCheckSecs</param-name> <param-value>1</param-value> </context-param> <servlet> <servlet-name>PurchaseServlet</servlet-name> <servlet-class>ejava.servlets.webbasics.PurchaseServlet</servlet-class> <init-param> <param-name>param1</param-name> <param-value>value1</param-value> </init-param> </servlet> <servlet> <servlet-name>BonusServlet</servlet-name> <servlet-class>ejava.servlets.webbasics.BonusServlet</servlet-class> </servlet> ...

  6. Mapping Servlets to URLs (web.xml) … <servlet-mapping> <servlet-name>PurchaseServlet</servlet-name> <url-pattern>PurchaseAlias</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>BonusServlet</servlet-name> <url-pattern>BonusAlias</url-pattern> </servlet-mapping> ...

  7. Declaring Default Pages (web.xml) … <welcome-file-list> <welcome-file>/welcome.html</welcome-file> </welcome-file-list> ...

  8. Creating the .war file %cd c:\\weblogic/myserver/public_html/webbasics; \ %//c/jdk1.3/bin/jar cvf /webbasics.war * added manifest adding: FormExample.html(in = 467) (out= 257)(deflated 44%) adding: MenuExample.html(in = 486) (out= 274)(deflated 43%) adding: WEB-INF/(in = 0) (out= 0)(stored 0%) adding: WEB-INF/classes/(in = 0) (out= 0)(stored 0%) adding: WEB-INF/classes/ejava/(in = 0) (out= 0)(stored 0%) adding: WEB-INF/classes/ejava/servlets/(in = 0) (out= 0)(stored 0%) adding: WEB-INF/classes/ejava/servlets/webbasics/(in = 0) (out= 0)(stored 0%) adding: WEB-INF/classes/ejava/servlets/webbasics/BonusServlet.class(in = 2403) ( out= 1260)(deflated 47%) adding: WEB-INF/classes/ejava/servlets/webbasics/PurchaseServlet.class(in = 2585 ) (out= 1449)(deflated 43%) adding: WEB-INF/web.xml(in = 1843) (out= 587)(deflated 68%) adding: WEB-INF/weblogic.xml(in = 412) (out= 227)(deflated 44%) adding: WEB-INF/web.xml~(in = 1071) (out= 366)(deflated 65%) adding: welcome.html(in = 183) (out= 103)(deflated 43%)

  9. Summary • The web application format should be used for all web deployments • Standardized mechanism for web tier deployments

  10. Java Servlets

  11. Servlet Definition • “Web component, managed by a container, that generates dynamic content” • Request-Response mechanism modeled after HTTP • Required by J2EE v1.2 specification • Web Server configured to invoke servlets when specified URLs are accessed (servlet mapping) • HTML Forms • Java programs

  12. Architecture Get/Post Request Request Web Browser Web Server Servlet Container HTML Page Reply Servlet

  13. Servlet Benefits • Efficiency • run as threads vs. CGI processes • Written in Java • can use any Java API such as JDBC, EJB, RMI, etc. • Portability • supported by many web/application servers • Simplicity • Provides support for common operations including session management

  14. Servlet Container • Provides the execution environment for a servlet • Must support HTTP as the request/response protocol • HTTP 1.1 support strongly recommended by spec • May support HTTPS (HTTP over SSL) • Can be installed directly in a web server or as an add-on using web server extension mechanisms • May impose security constraints on servlet

  15. My First Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println(“Hello World”); } }

  16. Notes • Default return mime type is text/plain • Can also implement doPost • Same arguments • What if you want to answer to both? • Running the servlet • Compile • You will need the java 2 enterprise edition jar in your classpath • Put class into WEB-INF/classes • Put in servlet mapping and class info in WEB-INF/web.xml • Invoke  http://host/context/servletmapping

  17. Key Servlet Classes

  18. Another Example import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(“text/html”); PrintWriter out = response.getWriter(); out.println(“<HTML>\n” + “<HEAD><title>Hello WWW</title></HEAD>\n” + “<body>\n” + “<h1>Hello World!</h1>\n” + “</body></html>”); } }

  19. Requests and Responses

  20. The HttpServletRequest Object • Form parameters • String choice=request.getParameter(“Product”); • String getParameter(String key) • String[] getParameterValues(String key) • Enumeration getParameterNames() • Cookies • Cookie[] = request.getCookies() • getName(), getValue() • Binary Data • InputStream is = request.getInputStream() • Character Data • Reader r = request.getReader()

  21. The HttpServletResponse Object • void setContentType(String type) • void setContentLength(int len) • PrintWriter getWriter() • ServletOutputStream getOutputStream() • Used to send binary data back to client • void setHeader(String name, String value) • Other methods as well

  22. Servlet Implementation package ejava.servlets.webbasics; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class PurchaseServlet extends HttpServlet { public void init(ServletConfig config) throws ServletException { super.init(config); log("BonusServlet:init(config)"); }

  23. Servlet (Cont) public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); out.println("<html><head><title>"); out.println("Purchase Servlet"); out.println("</title></head><body>"); if (request.getParameter("BUYCMD") != null) { String product = request.getParameter("Product"); out.println("<p><b>purchased product:</b>"+product); } out.println("</body></html>"); out.close(); }

  24. Performance Issues • Strings are immutable • New string object is created for each string • Also for each concatenation of 2 strings •  a lot of object creation and cleanup • Use a single StringBuffer object • Use append() method to add text to it • Use flush method to push output to client

  25. Organizational Issues • WEB-INF/classes can get crowded • Use java packages to clean things up • package mypackage; //place at top of file • Put classes in WEB-INF/classes/mypackage • Set up servlet mapping in WEB-INF/web.xml • Invoke http://host/context/servletmapping

  26. Headers and CGI variables • Request object has methods to access • String value getHeader(String name) • Others • PrintEnv code • http://localhost:8080/ServletsAndJSP/TestGetPostServlet.html

  27. Cookies • Use the Cookie class • Constructor • Cookie(String name, String value) • Cookie Methods • String getDomain() or void setDomain(String dom) • String getName() or void setName(String name) • String getValue() or void setValue(String value) • String getPath() or void setPath(String path) • boolean getSecure() or void setSecure(boolean flag) • int getMaxAge() or void setMaxAge(int seconds)

  28. Cookies • Create a cookie • Construct it • Set values • Add the cookie to the response before content type • response.addCookie(Cookie theCookie) • Get Cookies from request • Cookie[] cookies = request.getCookies()

  29. Sessions • High level API • HttpSession object • Built on top of cookies or URL-rewriting • You don’t have to worry which one • Convenient place to store information • Arbitrary objects • Associated with each session

  30. The Session API • Get the HttpSession object • HttpSession session = request.getSession(true); • true automatically creates one if one doesn’t exist • Get and Set information using HttpSession methods • Object getAttribute(String name) • void setAttribute(String name, Object value) • void removeAttribute(String name) • String[] getAttributeNames() • String getID() • boolean getId() • long getCreationTime() and long getLastAccessedTime() • int getMaxInactiveInterval() and void setMaxInactiveInterval(int sec) • void invalidate()

  31. Example: Toy Shop • http://localhost:8080/ServletsAndJSP/ToyShop.html

  32. The Servlet Life Cycle • Initialization • void init() or • void init(ServletConfig config) • Be sure to call super.init(config) on first line • doXxx methods are called (doGet, doPut, etc.) • Consider if you need single thread • public class YourServlet extends HttpServlet implements SingleThreadModel • Destruction • void destroy() • don’t rely on this. The server could crash

  33. Servlet Context • Servlet may wish to interact with the host server • GenericServlet::getServletContext() • getMimeType( String file ) • getServlet(String name) : Servlet • log(Exception, String) • log(String)

  34. Redirection • Web Browser redirection • resp.sendRedirect(String url) • resp.sendError(int code, String message) • Server-Side • RequestDispatcher rd = getServletContext().getRequestDispatcher(urlString); • rd.forward();

  35. Request Dispatcher

  36. Resources • Main Servlets Page • http://java.sun.com/products/servlet/ • Java Servlet Specification v2.2 • http://java.sun.com/products/servlet/2.2/index.html • Marty Hall’s servlet tutorial • http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/

More Related