Construct the file and directory structure of a Web Application that may contain
(a) static content, (b) JSP pages, (c) servlet classes, (d) the deployment descriptor,
(e) tag libraries, (f) JAR files, and (g) Java class files; and describe how to protect
resource files from HTTP access.
A Web application exists as a structured hierarchy of directories. The root of this
hierarchy serves as the document root for files that are part of the application. For
example, for a Web application with the context path /catalog
in a Web container, the index.html file at the base of the
Web application hierarchy can be served to satisfy a request from
/catalog/index.html.
A special directory exists within the application hierarchy named "WEB-INF".
This directory contains all things related to the application that aren't in the
document root of the application. The WEB-INF node is NOT
part of the public document tree of the application. NO file contained in the
WEB-INF directory may be served directly to a client by
the container. However, the contents of the WEB-INF directory
are visible to servlet code using the getResource and
getResourceAsStream method calls on the
ServletContext, and may be exposed using the
RequestDispatcher calls. Hence, if the Application Developer
needs access, from servlet code, to application specific configuration information
that he does not wish to be exposed directly to the Web client, he may place it
under this directory. Since requests are matched to resource mappings in a
case-sensitive manner, client requests for /WEB-INF/foo,
/WEb-iNf/foo, for example, should not result in contents of
the Web application located under /WEB-INF being returned, nor
any form of directory listing thereof.
The contents of the WEB-INF directory are:
The /WEB-INF/web.xml deployment descriptor.
The /WEB-INF/classes/ directory for servlet and
utility classes. The classes in this directory must be available to the
application class loader.
The /WEB-INF/lib/*.jar area for Java ARchive files.
These files contain servlets, beans, and other utility classes useful to
the Web application. The Web application class loader must be able to load
classes from any of these archive files.
The Web application class loader must load classes from the
WEB-INF/classes directory first, and then from library JARs in
the WEB-INF/lib directory. Also, any requests from the client
to access the resources in WEB-INF/ directory MUST be
returned with a SC_NOT_FOUND (404) response.
Web applications can be packaged and signed into a Web ARchive format (WAR)
file using the standard Java archive tools. For example, an application for issue
tracking might be distributed in an archive file called issuetrack.war.
When packaged into such a form, a META-INF directory will be
present which contains information useful to Java archive tools. This directory
MUST NOT be directly served as content by the container in response to a Web client's
request, though its contents are visible to servlet code via the
getResource and getResourceAsStream
calls on the ServletContext. Also, any requests to access the
resources in META-INF directory must be returned with a
SC_NOT_FOUND (404) response.
Tag extensions written in JSP using tag files can be placed in one of two
locations. The first possibility is in the /META-INF/tags/
directory (or a subdirectory of /META-INF/tags/) in a JAR file
installed in the /WEB-INF/lib/ directory of the web
application. Tags placed here are typically part of a reusable library of tags that
can be easily dropped into any web application.
The second possibility is in the /WEB-INF/tags/ directory
(or a subdirectory of /WEB-INF/tags/) of the web application.
Tags placed here are within easy reach and require little packaging. Only files with
a .tag or .tagx extension are recognized by
the container to be tag files.
Tag files that appear in any other location are not considered tag extensions
and must be ignored by the JSP container. For example, a tag file that appears in
the root of a web application would be treated as content to be served.
The following is a listing of all the files in a sample Web application:
/index.html
/howto.jsp
/feedback.jsp
/images/banner.gif
/images/jumping.gif
/WEB-INF/web.xml
/WEB-INF/lib/jspbean.jar
/WEB-INF/lib/jstl.jar
/WEB-INF/jsp/example-taglib.tld
/WEB-INF/jsp/debug-taglib.tld
/WEB-INF/jsp2/jsp2-example-taglib.tld
/WEB-INF/tags/displayProducts.tag
/WEB-INF/tags/helloWorld.tag
/WEB-INF/tags/panel.tag
/WEB-INF/tags/xhtmlbasic.tag
/WEB-INF/classes/com/mycorp/servlets/MyServlet.class
/WEB-INF/classes/com/mycorp/util/MyUtils.class