Presentation is loading. Please wait.

Presentation is loading. Please wait.

COMP201 Java Programming Part III: Advanced Features Topic 14: Servlets Servlets and JavaServer Pages (JSP) 1.0: A Tutorial

Similar presentations


Presentation on theme: "COMP201 Java Programming Part III: Advanced Features Topic 14: Servlets Servlets and JavaServer Pages (JSP) 1.0: A Tutorial"— Presentation transcript:

1 COMP201 Java Programming Part III: Advanced Features Topic 14: Servlets Servlets and JavaServer Pages (JSP) 1.0: A Tutorial http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial-Intro.html

2 COMP201 Topic 14 / Slide 2 Objective & Outline l Objective: Introduction to servlets l Outline: n Introduction n A simple servlet –Environment for developing and testing servlets n General information about servlets n HTTP Servlets n Session tracking n Cookies

3 COMP201 Topic 14 / Slide 3 Resources l Book: Marty Hall, Core SERVLETS and JAVA SERVER PAGES, A Sun Microsystems Press/Prentice Hall PTR Book. ISBN0-13-089340-4 n Available online: http://pdf.coreservlets.com/ l Online tutorials n Servlets and JavaServer Pages (JSP) 1.0: A Tutorial http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial- Intro.html http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/Servlet-Tutorial- Intro.html n The J2EE Tutorial: http://java.sun.com/j2ee/tutorial/http://java.sun.com/j2ee/tutorial/ l Apache Tomcat Software: n Standalone web server for servlet and JSP development n Download: http://jakarta.apache.org/builds/jakarta-tomcat- 4.0/release/http://jakarta.apache.org/builds/jakarta-tomcat- 4.0/release/ n Installation: http://www.moreservlets.com/Using-Tomcat-4.htmlhttp://www.moreservlets.com/Using-Tomcat-4.html l Servlet API: http://java.sun.com/products/servlet/2.3/javadoc/index.html

4 COMP201 Topic 14 / Slide 4 Introduction l Servlets are programs that run on server n Acting as a middle layer between client requests and databases or other applications. l Example: Duke’ Book store: http://csz549.win2k.cs.ust.hk:8001/bookstore.html

5 COMP201 Topic 14 / Slide 5 Introduction l Traditionally, HTTP servers handle client requests by using CGI (common gateway interface) scripts. 1. User fills out a form and submit. 2. HTTP server gets URL requests from the net. 3. HTTP server finds the CGI script specified in the HTML file, runs it with parameters from requesting URL 4. HTTP server takes output from the CGI program (most often output is HTML text), fixes it up with a full complete HTTP header, and sends it back to the original requesting client HTML: First Name: Last Name:

6 COMP201 Topic 14 / Slide 6 Introduction l Advantages of servlets over CGI scripts (Hall book) n More efficient: each CGI needs a new process for each HTTP request. For servlets, JVM stays running and handles each request using a lightweight Java thread. n Easier to use: servlets have an extensive infrastructure for automatically parsing and decoding HTML for data, reading and setting HTTP headers, handling cookies, tracking sessions and many other such high level utilities. n More powerful: servlets can talk directly to the Web server; multiple servlets can share data, making it easy to implement database connection and similar resource-sharing optimization. Servlets can also maintain information from request to request. Simplifying techniques like session tracking and caching of previous computations. n More portable: servlets are supported on virtually every major Web server. It is part of J2EE so industry support for servlets in even more pervasive. n Safer: array bounds checking and other memory protection features are a central part of the Java programming language.

7 COMP201 Topic 14 / Slide 7 Introduction l Note: n CGI scripts written in scripting languages such as Perl, Python, Unix Shell, etc doe not need compilation. n CGI scripts written in programming languages such as C, C++ need compilation n Servlets need compilation

8 COMP201 Topic 14 / Slide 8 Servlet vs. Applet l Servlets are to servers what applets are to browsers: l Applets run by browser, servlets run by server. l Applets are “client-side java”, servlets are “server-side java”. l Applets make appearance of web pages alive, servlets make contents of web pages dynamic. l Unlike applets, however, servlets have no graphical user interface. Implement only back-end processing.

9 COMP201 Topic 14 / Slide 9 Outline l Introduction l A simple servlet n Environment for developing and testing servlets l General information about servlets l HTTP Servlets l Session tracking l Cookies

10 COMP201 Topic 14 / Slide 10 A Simple Servlet import java.io.*; import javax.servlet.*; public class SimpleGenericServlet extends GenericServlet { public void service (ServletRequest request, ServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.println("Hello World"); out.close(); } Note: no main method. Servlet run by server, just as applet run by browser

11 COMP201 Topic 14 / Slide 11 A Simple Servlet service : The most important method in a servlet, Determines what the servlet does. Invoked automatically when a request comes in. Needs to be overridden. l It takes two arguments: public void service (ServletRequest request, ServletResponse response) ServletRequest and ServletResponse are interfaces defined by the javax.servlet Get information about a request from the ServletRequest object request. Get information about a response via the ServletResponse object response.

12 COMP201 Topic 14 / Slide 12 Environment for developing and testing servlets l Compile: n Need Servlet.jar. Available in Tomcat package l Setup testing environment n Install and start Tomcat web server n Place compiled servlet at appropriate location –See http://www.moreservlets.com/Using-Tomcat-4.htmlhttp://www.moreservlets.com/Using-Tomcat-4.html l Run example: n http://csz549.win2k.cs.ust.hk:8001/servlet/SimpleGenericServlet

13 COMP201 Topic 14 / Slide 13 Outline l Introduction l A simple servlet n Environment for developing and testing servlets l General information about servlets l HTTP Servlets l Session tracking l Cookies

14 COMP201 Topic 14 / Slide 14 General Information about Servlets Architecture of package javax.servlet Servlet interface: declares servlet methods ( init, service, etc.) GenericServlet implements Servlet HttpServlet subclass adds features specific to HTTP Technically, a servlet is a program that extends either GenericServlet or HttpServlet.

15 COMP201 Topic 14 / Slide 15 General Information about Servlets Servlet Life Cycle l Servlets are controlled by servers 1. A server loads and initializes the servlet 2. The servlet handles zero or more client requests 3. The server terminates the servlet

16 COMP201 Topic 14 / Slide 16 Servlet Life Cycle l Methods public void init(): Called only once when servlet is being created. Good place for set up, open Database, etc. public void service(): Called once for each request. In HttpServlet, it delegates requests to doGet, doPost, etc. l public void destroy(): Called when server decides to terminate the servlet. Release resources, close Database, etc.

17 COMP201 Topic 14 / Slide 17 Outline l Introduction l A simple servlet n Environment for developing and testing servlets l General information about servlets l HTTP Servlets l Session tracking l Cookies

18 COMP201 Topic 14 / Slide 18 HTTP Servlets l For HTTP requests. l HTTP requests include l GET, conditional GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS l The default is GET. l Type of request specified in HTML file: …

19 COMP201 Topic 14 / Slide 19 HTTP Servlets Methods of HttpServlet and HTTP requests All methods take two arguments: an HttpServletRequest object and an HttpServletResponse object. Return a BAD_REQUEST (400) error by default. MethodsHTTP RequestsComments doGet GET, HEADUsually overridden doPost POSTUsually overridden doPut PUTUsually not overridden doOptions OPTIONSAlmost never overridden doTrace TRACEAlmost never overridden

20 COMP201 Topic 14 / Slide 20 HTTP Servlets Classes and interfaces in javax.servlet.http include l HttpServlet extends GenericServlet l HttpServletRequest extends ServletRequest l HttpServletResponse extends ServletResponse l … HttpServlet class has already overridden the service method to delegate requests to special purpose methods such as doGet and doPost. Don’t override the service method when sub classing HttpServlet. Instead, redefine the special purpose methods, mostly doGet and doPost.

21 COMP201 Topic 14 / Slide 21 HttpServletRequest Objects l Provide access to HTTP header data and the arguments of the request. l Values of individual parameters getParameterNames method provides the names of the parameters getParameter method returns the value of a named parameter. getParameterValues method returns an array of all values of a parameter if it has more than one values. HTTP Servlets

22 COMP201 Topic 14 / Slide 22 HttpServletResponse Objects l Provide two ways of returning data to the user: getWriter method returns a PrintWriter for sending text data to client getOutputStream method returns a ServletOutputStream for sending binary data to client. Need to close the Writer or ServletOutputStream after you send the response. l HTTP Header Data Must set HTTP header data before you access the Writer or OutputStream. HttpServletResponse interface provides methods to manipulate the header data. For example, the setContentType method sets the content type. (This header is often the only one needs to be manually set.) HTTP Servlets

23 Handling GET requests : Override the doGet method public class BookDetailServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {... // set content-type header before accessing the Writer response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(...); // then write the response //Get the identifier of the book from request String bookId = request.getParameter("bookId"); if (bookId != null) { out.println( information about the book );} out.close(); …… Try getRequest.html and getRequest2.html on http://csz549.win2k.cs.ust.hk:8001/201html/index.html BookDetailServlet.java in bookstore example

24 Handling POST requests: Override the doGPost method public class ReceiptServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {... // set content type header before accessing the Writer response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(...); // then write the response out.println(" Thank you for … " + request.getParameter("cardname") +...); out.close(); } Calling by: l l //postrequest.html

25 COMP201 Topic 14 / Slide 25 l Handling both GET and POST requests in the same way public class BookDetailServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // codes for handling the request } public void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet( request, response); } HTTP Servlets

26 COMP201 Topic 14 / Slide 26 Outline l Introduction l A simple servlet n Environment for developing and testing servlets l General information about servlets l HTTP Servlets l Session tracking l Cookies

27 COMP201 Topic 14 / Slide 27 Session Tracking l Servlets in Duke’s Bookstore n BookStoreServlet: Forward to main page. n CatalogServlet: Show all books in the store so user can select them. n BookDetailServlet: Show details of a book so user can select it n ShowCartServlet: Show shopping cart contents. n CashierServlet: Check out.

28 COMP201 Topic 14 / Slide 28 Session Tracking Motivation In the Duke’s Bookstore example, suppose a client has selected several books. (Do this and check the page produced by CatalogServlet.) l Problem 1: l The client requests ShowCartServlet to show the books in his/her shopping cart. l Question: How does ShowCartServlet know the selected books? l How communications between servlets are facilitated? l Problem 2: l The client decides to leave the bookstore and visit some other pages. l Question: When the client comes back and makes further requests, how do the servlets know the books that have been selected previously? l How come servlets can remember things?

29 COMP201 Topic 14 / Slide 29 Session Tracking l Session tracking is a mechanism that servlets use to maintain statues about a series of requests l From the same user (that is, requests originating from the same browser) l Across some period of time Solution to Problem 2: Servlets use sessions as “notebook” and hence can remember l Sessions are shared among the servlets accessed by the same client. Solution to Problem 1. Servlets communicate via sessions.

30 COMP201 Topic 14 / Slide 30 Session Tracking l Session is associated with a request. l To use session, n Get session from HttpServletRequest request: –HttpSession getSession(boolean create) –HttpSession mySession = request.getSession(boolean create); –Case 1: create == true l Return the associated session if exists l Otherwise, create a new session, associate it with the request, and return the session –Case 2: create == false l Return the associated session if exists l Otherwise, return null. –Note: get session before accessing response streams.

31 COMP201 Topic 14 / Slide 31 Session Tracking Store/retrieve information to/from HttpSession object. 1)public void setAttribute(String name, Object obj) Ex: session = req.getSession(true); session.setAttribute("Count", new Integer(1)); 2)public Object getAttribute(String name). Ex: int n = ((Integer)session.getAttribute("Count")).intValue(); n Invalidate the session (optional). –Manually: Session.invalidate() –Automatically when no request after certain time.

32 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); HttpSession session = req.getSession(false); PrintWriter out = resp.getWriter(); out.println(" Count me! "); if (session == null) {out.println("Welcome, I don't believe we've met!"); session = req.getSession(true); session.setAttribute("Count", new Integer(1)); out.println(”I think of you as "+ session.getId()); } else {int n = ((Integer)session.getAttribute("Count")).intValue(); out.println("You again? ” + session.getId()); out.println(”That makes " + n + " visits!”); session.setAttribute("Count", new Integer(n + 1));} out.println(" "); out.close(); } //HelloAgainServlet.java

33 COMP201 Topic 14 / Slide 33 Outline l Introduction l A simple servlet n Environment for developing and testing servlets l General information about servlets l HTTP Servlets l Session tracking l Cookies

34 COMP201 Topic 14 / Slide 34 Cookies l Cookies: small bits of textual information that a Web Server sends to a browser and that the browser returns unchanged when later visiting the same Web site or domain. n Made at server n Sent to client for storage n Retrieved by server when client connects again l Cookies can be used for n Session tracking. HttpSession implemented using cookies. n Persistent state. E.g. name, address, email address. When user access some servlets again, no need to provide such information one more time.

35 COMP201 Topic 14 / Slide 35 Cookies l Details: n Each cookie is a name=value pair. n Servlets send cookies to clients by adding fields to HTTP response headers. n Clients automatically return cookies by adding fields to HTTP request headers. n NOTE: Cookies shared among servlets on the server accessed by the same client.

36 COMP201 Topic 14 / Slide 36 Cookies Cookies are objects of class javax.servlet.http.Cookie l To send a cookie, 1. Create a Cookie object Cookie c = new Cookie(name, value); 2. Set attributes if necessary c.setMaxAge(30); //expire after 30 seconds 3. Send the cookie response.addCookie(c); l To get information from a cookie, 1. Retrieve all the cookies from the user's request Cookie[] cookies = request.getCookies(); 2. Find the cookie that you are interested in and get its value for (int i = 0; i < cookies.length; i++) { String name = cookies[i].getName(); String value = cookies[i].getValue(); }

37 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("Cookies received from client: "); Cookie[] cookies = request.getCookies(); for (int i = 0; i < cookies.length; i++) { Cookie c = cookies[i]; String name = c.getName(); String value = c.getValue(); out.println(name + " = " + value + " "); } out.println(" Cookies sent to client:> "); String name = request.getParameter("cookieName"); if (name != null && name.length() > 0) { String value=request.getParameter("cookieValue"); Cookie c = new Cookie(name, value); c.setMaxAge(180); response.addCookie(c); out.println(name + " = " + value + " ");}} // CookieServlet.java


Download ppt "COMP201 Java Programming Part III: Advanced Features Topic 14: Servlets Servlets and JavaServer Pages (JSP) 1.0: A Tutorial"

Similar presentations


Ads by Google