260 likes | 446 Views
An introduction to Java Servlet. Alessandro Marchetto Fondazione Bruno Kessler-IRST,. Outline. Just a quick introduction After this lecture you will be able to read and write “simple” Servlets. Web applications Java Servlet Servlet engine How to write a servlet
E N D
An introduction to Java Servlet Alessandro Marchetto Fondazione Bruno Kessler-IRST,
Outline • Just a quick introduction • After this lecture you will be able to read and write “simple” Servlets • Web applications • Java Servlet • Servlet engine • How to write a servlet • How to Process a request (Form data) • Servlet session tracking
Web applications • The Web server distributes pages of formatted information to clients that request it. • HTML Pages are transmitted using the http protocol • The browser renders (static) HTML pages. • HTML pages are stored in a file system (database) contained on the web server.
Dynamic Web applications • In some cases the content of a page (HTML) is not necessarily stored inside a file. • The content can be assembled at run-time according to user inputs and informations stored in a database. It can come from the output of a program (server script). • Servlets and JavaServer Pages are the Java technology’s answer to dynamic Web sites. They are programs that run on a Web server and build Web pages. Web Server Script/program DB http request http response Client
HTML and DOM • The HTML Document Object Model (HTML DOM) defines a standard way for accessing and manipulating HTML documents. • The DOM presents an HTML document as a tree-structure (a node tree), with elements, attributes, and text. <html> <head> <title>My title</title> </head> <body> <h1>My header</h\> <a href=“”>My link</a> </body> </html> its DOM http://www.w3.org/TR/html401/http://www.w3.org/TR/DOM-Level-2-HTML/html.html
Outline • Just a quick introduction • After this lecture you will be able to read and write “simple” servlets • Web applications • Java Servlet • Servlet engine • How to write a servlet • How to Process a request (i.e., Form data) • Servlet session tracking
Servlet Engine • A servlet engine (or servlet container) provides the run-time environment in which a servlet is executed. • The servlet engine manages the life-cycle of servlets (i.e., from their creation to their destruction). • The servlet engine: loads, executes and destroyes servlets • Apache Tomcat is a servlet container http://tomcat.apache.org Relationships between Web server, Servlet engine and Servlets.
The Life-Cycle of a Servlet • Servlet are Java classes. To execute them it is necessary compiling them in bytecode. • The servlet engine perform the following tasks: • it loads the servlet when it is requested (only the first time). • it calls the init() method of the servlet. • it handles the requests calling the service() method of the servlet. • at the end, it calls the destroy() method.
How to write a Java servlet HttpServlet implements the Servlet interface … • All servlets implement the Servlet interface or extend a class the implements it. • We will use HttpServlet and these methods: • doGet • doPost • init • destroy • getServletInfo • To write a servlet some of these methods must be overridden ..... http://java.sun.com/javaee/5/docs/api/
Generic Template • The generic template to write Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletTemplate extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Use “request” to read incoming HTML form data (e.g. submitted data) // Use “response” to specify the HTTP response status (e.g., content type) PrintWriter out = response.getWriter(); // Use “out” to send content to browser } }
Helloworld • First example of servlet • We override doGet() • The execution of it produces a HTML response import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloClientServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(“text/html”); PrintWriter out = response.getWriter(); out.println(“<HTML><HEAD><TITLE>Hello Client!</TITLE>”+ “</HEAD><BODY>Hello Client!</BODY></HTML>”); out.close(); } }
Context ServletContext • The Context can be used to store “global” information shared among the servlets of a given application. • The Context is initialized when the Servlet container starts and destroyed when it shuts down. For this reason, it is suited for keeping the “long lived information” It is implemented with: javax.servlet.ServletContext The methods: -getServletContext(): obtain the context -getAttribute(String key): get an attribute from the context -setAttribute(String key, Object value): set an attribute 1 1 Common Data Servlets
~hall First Par ~gates Second Par ~mcnealy Third Par Submit Forms and Servlets (1) • How to exchange data between client and server? <form method=“GET/POST” action=“ThreeParams”> First Par: <input type=“text” name=“param1” /> Second Par: <input type=“text” name=“param2” /> Third Par: <input type=“text” name=“param3” /> <input type=“submit” value=“Submit” /> </form> GET: In a URL the part after the question mark (?) is known as form data, and is a way to send data from a Web page to a server-side program http://host/ThreeParams POST: a data packege is created and attached to the HTTP requests sent to the server ? param1= ~hall¶m2= ~gates¶m3= ~mcnealy
HTML CODE Forms and Servlets (2) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class ThreeParams extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Reading Three Request Parameters"; out.println( ServletUtilities.headWithTitle(title) + "<BODY>\n" + "<H1 ALIGN=CENTER>" + title + "</H1>\n" + "<UL>\n" + " <LI>param1: " + request.getParameter("param1") + "\n" + " <LI>param2: " + request.getParameter("param2") + "\n" + " <LI>param3: " + request.getParameter("param3") + "\n" + "</UL>\n" + "</BODY></HTML>"); } ~hall ~ gate ~mcnealy
HTTP - Stateless protocol (1) • The Web server can’t remember previous transactions since HTTP is a “stateless” protocol. • E.g., a shopping cart: • it contains all items that have been selected from an online store's catalog by a customer; • the customer can check the content of the cart at any time during the session; • thus, the server must be able to maintain the cart of the user across several Web page requests.
How to maintain the state HTTP - Stateless protocol (2) • There are four ways to maintain the state: • Cookies • javax.servlet.http.Cookie(String nome, String val) • methods: setName(String cookieName), setValue(String cookieValue), etc. • Hidden fields in forms • <input type=“hidden” value=“<valore>” /> • URL rewriting • e.g., http://host/serveltPages/ShowSession;jsessionid=E4D371A0710 • String encodeURL(String url) of the class HttpServletResponse • where: url is the original l’URL and the output is the rewritten one • Servlets (HttpSession API)
Saving the state in general First request The Server marks the client with an unique ID and creates a memory partition that will contain the data (state) xyz5 Every subsequent connection must send the ID. In this way the server recognize/identify the client
Recover the session connected to the client Recover the cart Add a new product to the cart Store the cart in the session Servlet Sessions (3) Assuming ShoppingCart is some class you have defined yourself that stores information on items being purchased HttpSession session = request.getSession(true); ShoppingCart previousItems = (ShoppingCart)session.getAttribute("previousItems"); if (previousItems == null) { previousItems = new ShoppingCart(...); } String itemID = request.getParameter("itemID"); previousItems.addEntry(Catalog.getEntry(itemID)); session.setAttribute("previousItems", previousItems);
References • TutorialaboutServlets and JSP www.apl.jhu/%7Ehall/java/Servlet-Tutorial • Understanding “Architecture 2” www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html • Sun http://java.sun.com/products/servlet/ • Sun (Servlet and JSP) API http://java.sun.com/javaee/5/docs/api/ • Sun (Servlet) Documentation http://java.sun.com/products/servlet/docs.html • SunJ2EE Tutorialhttp://java.sun.com/javaee/5/docs/tutorial/doc/ • Apache Tomcat http://tomcat.apache.org/ • Tomcat (servlet) API http://tomcat.apache.org/tomcat-5.0-doc/servletapi/index.html • Tomcat (jsp) APIhttp://tomcat.apache.org/tomcat-5.0-doc/jspapi/index.html • Tomcat in Eclipse http://www.sysdeo.com/eclipse/tomcatplugin (a Tomcat installation is required) • Tutorial about how to intregrate Tomcat in Eclipse http://plato.acadiau.ca/courses/comp/dsilver/2513/EclipseAndTomcatTutorial/
Tomcat configuration (1) Tomcat directory organization: In the directory: $TOMCAT_HOME$/webapps ./myApplication ./myApplication/*.html ./myApplication/WEB-INF/ ./myApplication/WEB-INF/web.xml ./myApplication/WEB-INF/classes/*.class ./myApplication/WEB-INF/lib/*.jar [./myApplication/WEB-INF/src/*.java]
Tomcat configuration (2) • web.xml: • XML file used by Tomcat • it is a deployment descriptor • used to set specific parameters for the current application, such as: • name of the servlet (that can be reached though HTTP) • URL corresponding to servlet files (e.g., into /WEB-INF/classes/) • sessions “timeout” • etc. • it is loaded during the application installation • It is composed of the tags: • servlet: set alias and parameters to initialize a given servlet • servlet-mapping: set URL(s) to a given servlet
Sample of web.xml <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>HelloClientServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloClientServlet</url-pattern> </servlet-mapping> </web-app> Name of the class (with package) Alias to use in HTTP request
Servlet in Eclipse+Tomcat • Steps to build a new Web application using Tomcat in Eclipse: • Define a new Tomcat Project • Write our servlet file in the subdirectory WEB-INF/src • Write the servlet configutation file (web.xml) in the subdirectory WEB-INF • Start Tomcat or in the right-menu clcik on “Tomcat project“ and reload the context • Open a browser, and call the servelt such as http://localhost:8080/ProofProject/proofServlet
How to compile and execute a Servlet? How to use Eclipse to done this task? ... Helloworld demo ...