46
1 Apache Tomcat as a Apache Tomcat as a container for container for Servlets and JSP Servlets and JSP

1 Apache Tomcat as a container for Servlets and JSP

Embed Size (px)

Citation preview

Page 1: 1 Apache Tomcat as a container for Servlets and JSP

1

Apache Tomcat as a container Apache Tomcat as a container for Servlets and JSPfor Servlets and JSP

Page 2: 1 Apache Tomcat as a container for Servlets and JSP

2

What is Tomcat?What is Tomcat?

• Tomcat is a Servlet container (Web server that interacts with Servlets) developed under the Jakarta Project of Apache Software Foundation

• Tomcat implements the Servlet and the Java Server Pages (JSP) specifications of Sun Microsystems

• Tomcat is an open-source, non commercial project

- Licensed under the Apache Software License

• Tomcat is written in Java (OS independent)

Page 3: 1 Apache Tomcat as a container for Servlets and JSP

3

Reminder: A Servlet ExampleReminder: A Servlet Example

public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("<html><head><title>Hello</title></head>"); out.println("<body>"); out.println("<h2>" + new java.util.Date() + "</h2>"); out.println("<h1>Hello World</h1></body></html>"); }} HelloWorld.java

http://localhost/dbi/hello

Page 4: 1 Apache Tomcat as a container for Servlets and JSP

4

Reminder: A JSP ExampleReminder: A JSP Example<html> <head> <title>Hello World</title> </head> <body> <h2><%= new java.util.Date() %></h2> <h1>Hello World</h1> </body></html> hello.jsp

http://localhost/dbi/hello.jsp

Pay attention to the fact a cookie is placed in the client…We’ll discuss it next lessons

Page 5: 1 Apache Tomcat as a container for Servlets and JSP

5

Reminder: Another JSP ExampleReminder: Another JSP Example

<html> <head><title>Numbers</title></head> <body> <h1>The numbers 1 to 10:</h1> <ul>

<% int i; for (i=1; i<=10; ++i) { %> <li>Number <%=i%> </li> <%}%> </ul> </body></html> numbers-xhtml.jsp

http://localhost/dbi/numbers-xhtml.jsp

Page 6: 1 Apache Tomcat as a container for Servlets and JSP

6

Running TomcatRunning Tomcat

Page 7: 1 Apache Tomcat as a container for Servlets and JSP

7

Tomcat Directory StructureTomcat Directory Structure

Tomcat-Base

webapps work

lib classesROOT myApp1 myApp2server.xml

WEB-INF

lib classesweb.xml

server sharedlogsconf

Tomcat-Home

bin common

lib classes

Page 8: 1 Apache Tomcat as a container for Servlets and JSP

8

Base and Home DirectoriesBase and Home Directories

• The directory TOMCAT-HOME contains executables and libraries required for the server launching, running and stopping

- This directory is placed under /usr/local/…

• The directory TOMCAT-BASE contains the Web-site content, Web applications and configuration data

- This directory is placed under your home directory

Page 9: 1 Apache Tomcat as a container for Servlets and JSP

9

Installing Tomcat in the CSE NetInstalling Tomcat in the CSE Net

• Create a directory for tomcat base

- For example: mkdir ~/tomcat-base

• Set the environment variable CATALINA_BASE to your tomcat-base directory

- For example: setenv CATALINA_BASE ~/tomcat-base

- Insert this line into your .cshrc file

• Run ~dbi/tomcat/bin/setup

• $CATALINA_BASE is now a regular Tomcat base directory, and Tomcat is ready to run

Page 10: 1 Apache Tomcat as a container for Servlets and JSP

10

Running Tomcat in the CSE NetRunning Tomcat in the CSE Net

• To start tomcat use ~dbi/tomcat/bin/catalina run

• Or, in background, ~dbi/tomcat/bin/catalina start

• To stop tomcat use ~dbi/tomcat/bin/catalina stop

• To see the default page of Tomcat from your browser use the URL http://<machine-name>:<port>/ - machine-name is the name of the machine on which Tomcat runs and port

is the port you chose for Tomcat

• You can also use http://localhost:<port>/ if your browser runs on the same machine as Tomcat

Open http://localhost:<port>In class port number is 80, you can check /conf/server.xml

Don’t forget to stop the server

before you logout…

Page 11: 1 Apache Tomcat as a container for Servlets and JSP

11

From Scratch to Server in the CSE NetFrom Scratch to Server in the CSE Net

Page 12: 1 Apache Tomcat as a container for Servlets and JSP

12

Page 13: 1 Apache Tomcat as a container for Servlets and JSP

13

Choosing a port for TomcatChoosing a port for Tomcat

• In the file $CATALINA_BASE/conf/server.xml you will find the element Connector of Service “Catalina”

• Choose a port (greater than 1024 – why?) and change the value of the port attribute to your chosen one:

<Server> … <Service name="Catalina”> <Connector port="8090"/> … </Service> …</Server>

Page 14: 1 Apache Tomcat as a container for Servlets and JSP

14

Creating Web ApplicationsCreating Web Applications

Page 15: 1 Apache Tomcat as a container for Servlets and JSP

15

Creating Web ApplicationsCreating Web Applications

• A Web application is a self-contained subtree of the Web site

• A Web application usually containsseveral different types of Web resources like HTML files, Servlets, JSP files, and other resources like Database tables

• Each Web application has its own subdirectory under the directory

$CATALINA_BASE/webapps/

Page 16: 1 Apache Tomcat as a container for Servlets and JSP

16

The Directory Structure of a Web The Directory Structure of a Web ApplicationApplication

• Tomcat automatically identifies a directory $CATALINA_BASE/webapps/myApp/ with the relative URL /myApp/

• For example, a file named index.html in myApp is mapped to by the following URLs:

http://machine:port/myApp/index.html

http://machine:port/myApp/

Page 17: 1 Apache Tomcat as a container for Servlets and JSP

17

The Directory Structure of a Web The Directory Structure of a Web ApplicationApplication

• You can also use subdirectories under myApp

• For example: the file myApp/myImages/im.gif is mapped to by the URL

http://machine:port/myApp/myImages/im.gif

• By default, Tomcat maps the root directory (http://localhost:8090/) to the directory webapps/ROOT/

- You can change this default

Page 18: 1 Apache Tomcat as a container for Servlets and JSP

18

The Directory Structure of a Web The Directory Structure of a Web ApplicationApplication

• An application's directory must contain the following:

- The directory WEB-INF/

- A legal web.xml file under WEB-INF/myApp

WEB-INF

web.xml

<web-app></web-app>

Minimal content of web.xml

Page 19: 1 Apache Tomcat as a container for Servlets and JSP

19

From Scratch to ApplicationsFrom Scratch to Applications

Page 20: 1 Apache Tomcat as a container for Servlets and JSP

20

Check an example where there are files in the given directory

URL : http://localhost/dbi/code/

Page 21: 1 Apache Tomcat as a container for Servlets and JSP

21

Configuring a Web ApplicationConfiguring a Web Application

• Application-specific configuration and declarations are written in the file myApp/WEB-INF/web.xml

• This file contains:

- Servlet declarations, mappings and parameters

- Default files for directory requests (e.g index.html)

- Error pages (sent in cases of HTTP errors)

- Security constraints

- Session time-out specification

- Context (application) parameters

- And more…

Page 22: 1 Apache Tomcat as a container for Servlets and JSP

22

Error PagesError Pages

• Use the error-page element to define the page sent in case of an HTTP error that occurs within the application context

• An error page element has two sub elements:

- error-code - the HTTP error status code

- location - the page that should be sent

Page 23: 1 Apache Tomcat as a container for Servlets and JSP

23

Error Page ExampleError Page Example<html> <head><title>Not Found</title></head> <body> <h1 style="text-align:center; color:green"> Sorry, no such file... </h1> </body></html>

my404.html

<web-app> <error-page> <error-code>404</error-code> <location>/my404.html</location> </error-page> </web-app>

web.xml

Page 24: 1 Apache Tomcat as a container for Servlets and JSP

24

A non-existing resource

The problem with this example is that the browser caches this

response as the resource of the requested URL and next time you

refer to this URL will lead to SC=200 instead 404 (see why in

the next slide).You can solve this problem simply

by changing the errorpage file suffix from ,html to .jsp (how does this

solve the problem?)

You should also change the content of the web.xml to reflect the

renaming

Page 25: 1 Apache Tomcat as a container for Servlets and JSP

25

Page 26: 1 Apache Tomcat as a container for Servlets and JSP

26

Welcome PagesWelcome Pages• The (optional) welcome-file-list element contains a list

of file names

• When the URL request is a directory name, Tomcat automatically brings the first file on the list

• If that file is not found, the server then tries the next file in the list, and so on

• This file can be of any type, e.g., HTML, JSP, image, etc.

• The default welcome list for all applications is set in $CATALINA_BASE/conf/web.xml

Page 27: 1 Apache Tomcat as a container for Servlets and JSP

27

Welcome Page ExampleWelcome Page Example<html> <head><title>Welcome</title></head> <body> <h1 style="text-align:center; color:red"> Welcome Dear Visitor! </h1> </body></html>

welcome.html

<web-app> <welcome-file-list> <welcome-file>welcome.html</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>

web.xml

Page 28: 1 Apache Tomcat as a container for Servlets and JSP

28

Page 29: 1 Apache Tomcat as a container for Servlets and JSP

29

Tomcat and Java ClassesTomcat and Java Classes

• Tomcat uses Java classes you provide in order to run Servlets and JSP files- For example, the Servlets themselves!

• Tomcat 5.x initialization scripts ignore your environment CLASSPATH variable

• Classes are expected to be placed (or linked) at some predefined places in its directories

• There are actually 5 or 6 more and less restrictive classpaths used by tomcat – can you think why?

• Hint: how would a malicious web application gain control of another, innocent, web application?

Page 30: 1 Apache Tomcat as a container for Servlets and JSP

30

Java Class LocationsJava Class Locations

• Tomcat expects to find Java classes in class files (in a directory named classes) and JAR files (in a directory named lib) in the following places:

• TOMCAT-HOME/common/- Basic runtime classes. No need to touch this directory

• $CATALINA_BASE/webapps/myApp/WEB-INF/

- Application-specific classes (Servlets are typically here)

• $CATALINA_BASE/shared/

- Classes that are used by all the Web applications

Page 31: 1 Apache Tomcat as a container for Servlets and JSP

31

Java Class LocationsJava Class Locations

Tomcat-Home

bin common

Tomcat-Base

webapps work

lib classesROOT myApp1 myApp2server.xml

WEB-INF

lib classesweb.xml

server sharedlogsconf

lib classes

Page 32: 1 Apache Tomcat as a container for Servlets and JSP

32

Classes Provided by DBIClasses Provided by DBI

In order to provide the classes you need, like ORACLE, SAX and DOM-related packages, the Tomcat-setup script links the directory $CATALINA_BASE/shared/lib/ to ~dbi/tomcat/shared/lib/, thus the latter packages are automatically known by your Tomcat server

Page 33: 1 Apache Tomcat as a container for Servlets and JSP

33

• We know how file resources (e.g HTML, JSP, images) are published using Tomcat

• In order to publish a Servlet in Tomcat, we have to do the following:

- Put the class file in a proper place

- Tell Tomcat that the class acts as a Servlet

- Tell Tomcat the URL mapping of the Servlet

• The last two are discussed in the following slide

Publishing a ServletPublishing a Servlet

Page 34: 1 Apache Tomcat as a container for Servlets and JSP

34

Servlet Declaration and MappingServlet Declaration and Mapping

• The element <servlet> declares a Servlet

• The sub element <init-param> defines an parameter passed to the Servlet

- Access using ServletConfig.getInitParameter()

• The element <servlet-mapping> maps a URL to a specific Servlet

- The URL is relative to the application’s base URL

(http://machine:port/myApp/)

We’ll mention it again later

Page 35: 1 Apache Tomcat as a container for Servlets and JSP

35

Publishing a Servlet -An ExamplePublishing a Servlet -An Example

<web-app> <servlet> <servlet-name>hello</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hi</url-pattern> </servlet-mapping></web-app>

web.xml

http://localhost/myApp/hi

The 2 blocks do not have to be adjacent

within web.xml

myApp/WEB-INF/classes/HelloWorld.class

Page 36: 1 Apache Tomcat as a container for Servlets and JSP

36

A TipA Tip

• Tomcat provides a Servlet that enables invoking an existing Servlets without declarations and mappings

• To enable this feature, uncomment the elements servlet and servlet-mapping of the Servlet called invoker in $CATALINA_BASE/conf/web.xml

• To call the compiled Servlet myServlet.class in the application myApp use this URL: http://<machine>:<port>/myApp/servlet/myServlet

• NEVER publish a Web-site with this feature enabled!- Otherwise, your security restrictions are easily bypassed (try

to think how this can be achieved)

Page 37: 1 Apache Tomcat as a container for Servlets and JSP

37

web.xml web.xml DTDDTD

Your web.xml file must conform to the web-app DTD:

<!ELEMENT web-app (icon?, display-name?, description?, distributable?, context-param*, filter*, filter-mapping*, listener*, servlet*, servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?, error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*, login-config?, security-role*, env-entry*, ejb-ref*, ejb-local-ref*)>

Page 38: 1 Apache Tomcat as a container for Servlets and JSP

38

Our Entire web.xml so farOur Entire web.xml so far

<web-app>

<servlet> <servlet-name>hello</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hi</url-pattern> </servlet-mapping>

web.xml

Page 39: 1 Apache Tomcat as a container for Servlets and JSP

39

Our Entire web.xml so farOur Entire web.xml so far

<welcome-file-list> <welcome-file>welcome.html</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <error-page> <error-code>404</error-code> <location>/my404.html</location> </error-page> </web-app>

web.xml

Page 40: 1 Apache Tomcat as a container for Servlets and JSP

40

Web Application DevelopmentWeb Application Development

Page 41: 1 Apache Tomcat as a container for Servlets and JSP

41

Web ArchivesWeb Archives• A WAR (Web ARchive) file is a JAR file that contains a

whole Web-application directory

• For example, to create a WAR file of myApp do: cd webapps/myAppjar cvf myApp.war * (don’t forget the filename! What

would happen otherwise?)• Tomcat unpacks all WAR files found in

$CATALINE_BASE/webapps/ at statup- The unpacked directory and context will be named as the

WAR file name (without the .war extension)

- The WAR will not be unpacked if webapps/ already contains the directory and the WAR is not newer...

- Why not keep the applications packed?

- If we must unpack them, why pack them to begin with?

Page 42: 1 Apache Tomcat as a container for Servlets and JSP

42

Reflecting Application ChangesReflecting Application Changes

• Changes in your Java classes may not be reflected

in your application

- Old versions may already have been loaded

- The application needs to be reloaded

• Changes in other files like HTML or JSP are

always reflected

• Modification of web.xml automatically causes the

application to be reloaded

Page 43: 1 Apache Tomcat as a container for Servlets and JSP

43

Tomcat 5.5 ManagerTomcat 5.5 Manager

• Tomcat 5.5 comes with a Web application called “manager”, which supports functions for managing Web applications

• You can either use the HTML interface at http://<machine>:<port>/manager/html/ or send direct HTTP requests to it

• You will need to authenticate as a privileged user

- Use the username “admin” with no password

Page 44: 1 Apache Tomcat as a container for Servlets and JSP

44

Tomcat 5.5 ManagerTomcat 5.5 Manager

• Using the manager, you can

- Deploy a Web application by posting a WAR file

- Undeploy a deployed Web application

- Start/stop a Web application (make it available/unavailable)

- Reload an existing Web application (unpack new WARs)

• Warning: while “stop” makes an application unavailable,

“undeploy” deletes the application directory and WAR file

from webapps/

Find these options in the tomcat manager GUI

Page 45: 1 Apache Tomcat as a container for Servlets and JSP

45

Tomcat and EclipseTomcat and Eclipse

• You can use an Eclipse plugin for Tomcat Web-application development

• The “Sysdeo Eclipse Tomcat Launcher” plugin is installed in CS

• Using this plugin, you can start/stop the server, reload an application, etc.

• Detailed explanations in the course technical-help section

Page 46: 1 Apache Tomcat as a container for Servlets and JSP

46