internet technologies 6 servlets i
play

Internet Technologies 6 - Servlets I F. Ricci 2010/2011 Content - PowerPoint PPT Presentation

Internet Technologies 6 - Servlets I F. Ricci 2010/2011 Content Basic Servlets Tomcat Servlets lifecycle Servlets and forms Reading parameters Filtering text from HTML-specific characters Reading headers Sending


  1. Internet Technologies 6 - Servlets I F. Ricci 2010/2011

  2. Content  Basic Servlets  Tomcat  Servlets lifecycle  Servlets and forms  Reading parameters  Filtering text from HTML-specific characters  Reading headers  Sending compressed content  Differentiating among browsers  Referer Most of the slides were made available by www. coreservlets.com

  3. Servlet Roles  Read the explicit data sent by the client  Read the implicit HTTP request data sent by the browser  Generate the results  Send the explicit data (i.e., the document) to the client  Send the implicit HTTP response data

  4. HelloWorld import java.io.*; import javax.servlet.*; import javax.servlet.http.*; /** Very simplistic servlet that generates plain text. * <P> * Taken from More Servlets and JavaServer Pages * from Prentice Hall and Sun Microsystems Press, * http://www.moreservlets.com/. * &copy; 2002 Marty Hall; may be freely used or adapted. */ public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("Hello World"); } code }

  5. Servlet Architecture HTTP Response HTTP Servlet Container Request Java Virtual Machine (JVM) Servlet 1 Servlet 2 Client Web Web Server Servlet n

  6. Installing and Running Tomcat  Tomcat is distributed as a ZIP archive http:// tomcat.apache.org  unzip the download file, for instance into a root- level directory: C:\apache-tomcat-6.0.16  To run Tomcat you'll need to tell it where to find your J2SE SDK installation  Set the JAVA_HOME environment variable to C:\Program Files\Java\jdk1.6.0_04  To run Tomcat :  open a command window  change directory to Tomcat's bin directory  Type startup

  7. Tomcat Directory Structure Tomcat binaries: startup, shutdown All jar libraries: e.g. servlet-api.jar Configuration files: e.g. when you build your application in Netbeans a new file is added to indicate where is deployed (e.g., C:\apache- tomcat-6.0.16\conf \Catalina\localhost \coresjsp.xml) Directories of the web applications deployed here, possibly generated by .war files deployed here (with a web.xml file)

  8. Catalina Base  Go to netbeans: tools>servers to look at these details

  9. web.xml <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>bob</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>bob</servlet-name> <url-pattern>/HelloWorld</url-pattern> </servlet-mapping> </web-app>

  10. Compiling and deploying  Create a directory in \webapps called hello  Create a directory in \webapps\hello called WEB-INF and then a subdirectory classes where to put the sources and the compiled files  Set the classpath  C:\>set CLASSPATH=\apache-tomcat-6.0.16\common \lib\servlet-api.jar  Compile  C:\>javac HelloWorld.java  Deploy the web.xml file in C:\apache- tomcat-6.0.16\webapps\hello\WEB-INF  Or use an IDE (Netbeans) – separating sources ( web directory) and deployment ( build directory).

  11. Starting Tomcat  /bin/startup.bat or startup.sh  Point Browers to http://localhost:8080 should see default page  All the Docs are there on the default page!  Check out the examples pages, good tutorials

  12. Basic Servlet Structure  Here's the outline of a basic servlet that handles GET and POST requests in the same way: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SomeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); // Use "out" to send content to browser } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

  13. HelloWorld HTML import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n"; out.println(docType + "<HTML>\n" + "<HEAD><TITLE>Hello (2)</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1>Hello</H1>\n" + "</BODY></HTML>"); } code }

  14. Some Simple HTML-Building Utilities public class ServletUtilities { public static final String DOCTYPE = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">"; public static String headWithTitle(String title) { return(DOCTYPE + "\n" + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n"); } ... code }  Don’t go overboard  Complete HTML generation packages usually work poorly  The JSP framework is a better solution

  15. HelloServlet3: Packages and Utilities package coreservlets; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloServlet3 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Hello (3)"; out.println(ServletUtilities.headWithTitle(title)+ "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1>" + title + "</H1>\n" + "</BODY></HTML>"); code } }

  16. The Servlet Life Cycle ( Servlet Interface)  init  Executed once when the servlet is first loaded Not called for each request  service  Called in a new thread by server for each request  Dispatches to doGet, doPost, etc. Do not override this method!  doGet, doPost, doXxx  Handles GET, POST, etc. requests  Override these to provide desired behavior  destroy  Called when server deletes servlet instance Not called after each request. javadoc

  17. Example of usage of init  If a servlet get a request for a url with the http header  if-Modified-Since: Mon, 12 Nov 2010 18:00:00 GMT  It can check if something has really changed the output after that date – if not the servlet sends back a reply:  HTTP/1.1 304 Not Modified  And the browser shows the cashed url  The servlet must only implement the following method to know when it has been modified the last time:  public long getLastModified(HttpServletRequest request)  The app server will call it when a client requests the servlet  And will send back a result only if the page was modified (according to the value returned by the method) after Mon, 12 Nov 2010 18:00:00 GMT

  18. Code  The init method set the time the page was modified public void init() throws ServletException { // Round to nearest second (i.e, 1000 milliseconds) modTime = System.currentTimeMillis()/1000*1000; for(int i=0; i<numbers.length; i++) { numbers[i] = randomNum(); } }  An then overwrite the method that tells when the page was modified public long getLastModified(HttpServletRequest request) { return(modTime); } LotteryNumbers code

  19. Calls to the servlet The page was not modified The page was modified after after 9:00:00 GMT 8:00:00 GMT

  20. Calls to the servlet  You can do the same experiments with a telnet connection (e.g., using putty)

  21. HTML Form <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD><TITLE>A Sample Form Using GET</TITLE></HEAD> <BODY> <H2 ALIGN="CENTER">A Sample Form Using GET</H2> <FORM ACTION="http://localhost:8080/coresjp/ServletForm"> <CENTER> First name: <INPUT TYPE="TEXT" NAME="FirstName" VALUE=""><BR/> Last name: <INPUT TYPE="TEXT" NAME="LastName" VALUE=""><P> <INPUT TYPE="SUBMIT"> </CENTER> </FORM> </BODY> </HTML> form

  22. Reading form data in servlets  request.getParameter(“FirstName")  Returns URL-decoded value of first occurrence of FirstName parameter in query string  Works identically for GET and POST requests  Returns null if no such parameter is in query data  request.getParameterValues(“FirstName")  Returns an array of the URL-decoded values of all occurrences of FirstName parameter in query string  Returns a one-element array if param is not repeated  Returns null if no such parameter is in the query  request.getParameterNames() or request.getParameterMap()  Returns Enumeration or Map of request parameters  Usually reserved for debugging.

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend