Directories and DDsWeb appsDirectoriesPackagesSeparation of concernsTomcat directory structureMy filesmyWebForm.htmlHow Tomcat finds the servletThree namesweb.xmlThe ServletFlowThe EndJan 13, 2019Directories and DDs2Web appsA web application is basically a web site that:“Knows who you are”--it doesn’t just give you static pages, it interacts with youCan permanently change data (such as in a database)A web application can consist of multiple piecesStatic web pages (possibly containing forms)ServletsJSPTomcat organizes all these parts into a single directory structure for each web application...but you have to help with the organization3DirectoriesTo create servlets, you really should have two directory structures:A development directory, in which you can write and partially debug your codeA deployment directory, in which you put “live” codeTomcat requires a particular set of directories for your web applicationIt is extremely picky about having everything in the right place!Since your web application must typically co-exist with other web applications, you should use packages to avoid name conflictsThis further complicates the Tomcat directory structure4PackagesA package statement in Java must be the very first line of code in the fileExample:package com.example.model;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class MyServlet extends HttpServlet { ... }This implies thatThis program is in a file named MyServlet.java, which isin a directory named model, which isin a directory named example, which isin a directory named comThat is, the file is something/com/example/model/MyServlet.java5Separation of concernsBusiness logic is the part of your application that does the actual computational workIt is a good idea to separate the business logic of any application from the part that communicates with the outside worldThis allows you to use the same business logic as an applet, a servlet, an application, or an API used by another programIn the following examples we will assume:The business logic is in the package com.example.modelThe servlet logic is in the package com.example.web6Tomcat directory structure jakarta-tomcat-5.5.9/ -- your Tomcat home directory (whatever it’s named) webapps/ myApplicationDirectory/ -- your name for your application directory myWebForm.html -- static HTML pages go in your application directory myJspResult.jsp -- JSP pages also go in your application directory WEB-INF/ -- must have this directory, named exactly like this web.xml -- this is the deployment descriptor, it must have this name lib/ -- you can use this optional directory for external .jar files classes/ -- must have this directory, named exactly like this com/ -- The com.example.model package directory example/ web/ myServlet.class --in package com.example.web; model/ myModel.class -- in package com.example.model;7My filesmyWebForm.htmlThis is the web page with a form that sends data to the servletcom/example/web/myServlet.classThis is the servlet I intend to use; it will use the myModel class, but to do this it needs an import statement:import com.example.model.myModel;com/example/model/myModel.classThis does the “business logic” it is good form to keep it separatemyJspPage.jspThe (optional) JSP page to create the HTML output (could be done directly by myServlet)web.xmlA file required by Tomcat to tell it what class to start with and how to refer to that class8myWebForm.html<html> ... <body> ... <form method="POST" action="NameSeenByUser.do"> ...various form elements... </form> ... </body></html>9How Tomcat finds the servletTomcat reads XML files that tell it about the servletsEach web application must have a Deployment Descriptor (DD) file, WEB-INF/web.xml fileThe root element of the DD file is web-app This element has a bunch of “boilerplate” attributesYou don’t have to know what any of it meansThe rest of the XML file gives names for the servlet, provides parameters, etc.We’ll cover only the most essential parts10Three namesEvery servlet has three names:The “real” name, given to it by the programmerAn “internal” name, used only within the web.xml fileThe name that the user (client) knows it byThe <servlet> element associates the fully-qualified class name with the internal nameThe <servlet-mapping> element associates the internal name with the name known to the clientThe reason for all this is to increase security by hiding the real name from the user11web.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/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>Some internal name</servlet-name> <servlet-class>com.example.web.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Some internal name</servlet-name> <url-pattern>/NameSeenByUser.do</url-pattern> </servlet-mapping> </web-app>12The Servletpublic class MyServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String value = request.getParameter("name"); out.println("<html><body>I got: " + name + " = " + value + "</body></html>"); }}13FlowThe user submits an HTML formTomcat finds the servlet based on the URL and the deployment descriptor (web.xml) and passes the request to the servletThe servlet computes a responseEither:The servlet writes an HTML page containing the responseOr:The servlet forwards the response to the JSPThe JSP embeds the response in an HTML pageTomcat returns the HTML page to the user14The
View Full Document