140 likes | 426 Views
Servlets. Introduction & Overview HTTP Servlets HTTP get Requests HTTP post Requests Multi-tier Applications Using JDBC from a Servlet References. Introduction. References: Y D Liang, Intro to Java Programming, 7ed chapter 39
E N D
Servlets Introduction & Overview HTTP Servlets HTTP get Requests HTTP post Requests Multi-tier Applications Using JDBC from a Servlet References
Introduction • References: Y D Liang, Intro to Java Programming, 7ed chapter 39 • Java’s support for distributed / internet- / web-based applications includes • Multithreading • Networking • java.net package • Socket-based communications, packet-based communications • Remote Method Calling • RMI (java.rmi package) • CORBA • Servlets • A client requests an action be performed; a server responds to client requests • An applet is a class that is downloaded to the client and performs functions there; • A servlet lives in the server and responds to requests from the client. • Basic packages are javax.servlet, javax.servlet.http • javax.servlet.jsp and javax.servlet.jsp.tagext comprise Java Server Pages (JSP), extending servlet capabilities to enable servers to deliver to the client dynamically created XHTML pages with embedded Java functionality.
Introduction • Servlets (ctd) • A distributed application often has a 3-tier architecture with a web server providing secure access to a “back end”, commonly a database system. • Servlets may be used to support thin clients with minimal client-side software. • The client sends one of a small number of requests to the server; servlets residing in the server respond • Clients connect to the server using standard protocols • HTTP forms • “get”, “post” requests • See http://www.w3.org/Addressing for information on URLs, and • http://www.w3.org/Protocols/HTTP • This chapter shows how servlets manage client/server communication using the HTTP protocol • Client sends an HTTP request • Servlet processes it and returns a response to client Client Web Server Back End business logic eg database
Servlet Architecture • A servlet is a class which implements the javax.servlet.Servlet interface • void init(ServletConfigcfg) • parameter supplied by server containing the servletclass • ServletConfiggetServletConfig() • returns reference to implementing object • StringgetServletInfo() • void service(ServletRequestrq, ServletResponserp) • Containing server calls this in response to a client request to the servlet. • void destroy() • The packages provide two abstract classes implementing this • javax.servlet.GenericServlet • javax.servlet.http.HttpServlet • Most servlets extend one of these. We shall concentrate on the HttpServlet from now on. • Class HttpServlet • Has empty methods , at leat one of which should be over-ridden: • doGet(HttpServletRequestrq, HttpServletResponserp) and • doPost(HttpServletRequestrq, HttpServletResponserp) • Overrides service() with a version which calls one of these, depending on request type; • An HttpServlet needs to define specific overriding doGet() and/or doPost() methods
Servlet Architecture • Interface HttpServletRequest • String getParameter(String param) • cf applet parameter • Enumeration getParameterNames() • names of all parameters set as part of a post request • String[] getParameterValues(String paramName) • a parameter can have multiple values • Cookie[] getCookies() • cookies are stored on the client by the server (see later) • HttpSession getSession (boolean create) • returns an HttpSession associated with current browsing session (see later) • if create = true, creates one if one does not already exist • Interface HttpServletResponse • void addCookie(Cookie cookie) • added to header of response to client. Stored in client if client has enabled cookies. • ServletOutputStream getOutputStream() • PrintWriter getWriter() • byte-based (binary) and character-based output to client, respecively • cookies are stored on the client by the server (see later) • void setContentType(String type) • MIME type of output to client -- “text/html” for HTML content • Every call to doGet(...), doPost(...) gets from containing server objects implementing these.
Handling get Requests • WelcomeServlet Example • WelcomeServlet.java + WelcomeServlet.html (See listings at back) • Note the tag in the XHTML form in WelcomeServlet.html: <form action = “/servletexs/welcome1” method = “get”> • directs a request from this form to the server, to the WelcomeServlet; • Establishes it as a get request • The tag <input type = “submit” value = “Get HTML Document”/> displays a button labelled “Get HTML Document” • When the client loads this XHTML and clicks the button the get request is sent to the server • The WelcomeServlet, once correctly deployed in the server, responds by • Setting the response content type to “text/html” • Getting the output PrintWriter object for the response -- called out • Using out.println(...) to output lines of HTML to the client. • Practicalities • javax.servlet and javax.servlet.http are J2EE packages: J2EE needs to be installed in the development environment and an appropriate CLASSPATH set.
Handling get Requests • Deploying the WelcomeServlet in Tomcat Server • to serve the get request from this XHTML form • Look at Tomcat’s webapps directory • In here make a directory servletexs • the context root of this Web application • In this directory install the following subdirectories and files (files in italics): servletexs WelcomeServlet.html WEB-INF web.xml classes WelcomeServlet.class • web.xml is the deployment descriptor also listed at the back of these slides • Ties the servlet to incoming get requests from client forms: see Servlet Mappings section • Client runs the servlet by first loading the form generating the get request: http://localhost:8080/servletexs/WelcomeServlet.html
Handling get Requests Containing Data • WelcomeServlet2 • WelcomeServlet2.java + WelcomeServlet2.html ( See listings at back) • Note the tag in a XHTML form in WelcomeServlet2.html as before: <form action = “/servletexs/welcome2” method = “get”> • The tags within the form <input type = “text” name = “firstname”/> <input type = “submit” value = “Submit”/> display a text box and a “Submit” button. • When the client clicks it the get request is sent to the server • with parameter named “firstname” with value = contents of text box • WelcomeServlet2 can use request.getParameter(“firstname”) to obtain the data entered by the client in the form. • Deploying: • Install WelcomeServlet2.java, WelcomeServlet2.html in Tomcat in advjhtp1/... • Edit web.xml to include <servlet> and <servlet-mapping> elements for this servlet • Restart Tomcat • Client http://localhost:8080/servletexs/WelcomeServlet2.html
Handling post Requests • WelcomeServlet3 • WelcomeServlet3.java + WelcomeServlet3.html ( See listings at back) • Note the tag in a XHTML form in WelcomeServlet3.html: <form action = “/servletexs/welcome3” method = “post”> • The tags within the form <input type = “text” name = “firstname”/> <input type = “submit” value = “Submit”/> display a text box and a “Submit” button. • When the client clicks it the post request is sent to the server • with parameter named “firstname” with value = contents of text box • WelcomeServlet3 uses request.getParameter(“firstname”) to obtain the data entered by the client in the form. • Deploying: • Install WelcomeServlet3.java, WelcomeServlet3.html in Tomcat in advjhtp1/... • Edit web.xml to include <servlet> and <servlet-mapping> elements for this servlet • Restart Tomcat • Client http://localhost:8080/servletexs/WelcomeServlet3.html
Multi-Tier Applications -- Using JDBC from a Servlet • SurveyServlet.java, Survey.html • Functionality • Collects a vote from each client “What is your favourite pet?” • Stores votes in database • Returns to client a report of survey statistics • Thin client: just a web browser • Middle tier: the SurveyServlet • Back end: a Cloudscape database connected to middle tier by JDBC • ServeyServlet • init(...) • Initially sets up a JDBC Connection to the database, and SQL PreparedStatement objects to update the database and extract statistics from it Client XHTML Web Server JDBC Back End db access middle tier
Multi-Tier Applications -- Using JDBC from a Servlet • ServeyServlet • doPost(...) • Gets vote from client • request.getParameter(“animal”) • Uses a Statement to update the database • Uses Statement objects to get get statistics • Sends XHTML response to client • Survey.html • Form with post method, containing • Radio buttons with name = “animal”for the client to vote • A Submit button • Deploy in the usual way • Install class, html file, and add animalsurvey elements to web.xml; restart Tomcat. • servlet-name = animalsurvey, url-pattern = /animalsurvey, etc • Alsocopyojdbc14.jar (containing the Oracle JDBC driver) to Tomcat’s ...\servletexs\WEB-INF\lib subdirectory.
Session Tracking -- Cookies • A way for a server to keep persistent information about a particular client • preferences • contents of an e-shopping cart • etc • Text based data • If cookies enabled in client’s browser, • Server can send cookies in header of an XHTML page • Client browser stores them in client machine • Sent back to server with next get or post from client • Cookies expire after a finite amount of time • See Liang • CookieServlet.java, CookieSelectLanguage.html
Session Tracking -- HttpSession Interface • Another way of supporting a server to maintain information about client preferences • See , egLiang • SessionServlet.java, SessionSelectLanguage.html • The Request object provides an object implementing HttpSession • Same functionality as Cookie example • Unlike Cookies, HttpSession objects are not normally saved between browser sessions but just “live” for the duraiton of a session.
Further Reading • WWW Resources • The Sun java enterprise edition web site has plenty on servlets. • Go to http://java.sun.com/ffollow the links to API documentation on the Classes and interfaces in the javax.servlet and javax.servlet.httppackages, and tutorial and background reading on servlets. • Explore http://jakata.apache.org/tomcat/ For reading about servlets deployed in Tomcat • The Liangtextbook references cited above. • The O’Reilly book Java Servlet Programming