C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app...

16
CHAPTER 11 DEPLOYING YOUR WEB APP

Transcript of C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app...

Page 1: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

CHAPTER 11 DEPLOYING YOUR WEB APP

Page 2: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

WAR FILE

• A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really just a JAR file).

• You jar up your entire web app structure and give it a .war extension.

• Thus instead of copy static web pages, JSP pages, servlets, and web.xml separately to appropriate locations of Tomcat for deployment, we can simply copy this single WAR file to tomcat’s webapps directory.

Page 3: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

WAR FILE

• Tomcat will be responsible for unpack the WAR file and create a corresponding application context/directory and put all extracted files there.

• In Tomcat, the name of the WAR file becomes the web app name. – That is, if you drop the file lab8.war to

Tomcat’s webapps directory, a new directory called lab8 will be created under the webapps directory.

Page 4: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

WAR FILE If you re-deploy the application by dropping an

updated WAR file to tomcat’s webapps directory, tomcat will first remove the application context/directory, then extract files from the updated WAR file, and re-create the application context/dir for the application. Another advantage: You do not have to restart your

Tomcat server after the re-deployement even if you have servlets inside your application

If you want to un-deploy the application, simply delete the WAR file from tomcat’s webapps directory (You do not need to remove the unpacked directory, tomcat will be able to automatically remove it)

Page 5: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

What a deployed WAR file looks like

Note: META-INF and MANIFEST.MF under it are automatically generated and MANIFEST.MF is used for specifying optional libraries, e.g., the libraries the container cannot find automatically.

• Classes you deploy in the WEB-INF/classes and JAR files in WEB-INF/lib are available to the container and you don’t have to say anything

Page 6: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

MAKING STATIC CONTENT AND JSPS DIRECTLY ACCESSIBLE

• When you deploy static HTML and JSPs, you can choose whether to make them directly accessible from outside the web app.

• By directly accessible, we mean that a client can enter the path to the resource into his browser, and the server will return the resource.– You can prevent direct access by putting files

under WEB-INF

Page 7: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

USE ANT TO BUILD THE WAR FILE

You can use Ant task war to build a WAR file Two options:

Use ANT war task Use ANT jar task

Page 8: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

(only part of the build file is shown here)

<?xml version="1.0" ?>

<project name="myproject" default="deploy">

<!-- ==== create directories for development environment and deployment environment ==== -->

<target name="init">

<mkdir dir="etc" />

<mkdir dir="classes" />

<mkdir dir="src" />

<mkdir dir="web" />

 

<!-- This dir will contain the WAR file -->

<mkdir dir="dist"/>

 

</target>

 

<!-- ==== compile the java source ==== -->

<target name="compile" depends="init">

<javac srcdir="src"

destdir="classes">

<classpath refid="compile.classpath"/>

</javac>

</target>

 

<!-- ==== build the war file ==== -->

<target name="dist" depends="compile">

<war destfile="dist/${application}.war" webxml="etc/web.xml">

<fileset dir="web"/>

<classes dir="classes"/>

</war>

</target>

 

 

Page 9: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

WAR FILE

Page 10: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

USE ANT TO BUILD WAR FILE

If you have third party library JAR files, when deployed, it is located at WEB-INF/lib direcotry of your web application. If you build a WAR file, you may include these

libraries in corresponding place

Page 11: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

<!-- ==== create directories for development environment and deployment environment ==== -->

<target name="init">

<mkdir dir="etc" />

<mkdir dir="classes" />

<mkdir dir="src" />

<mkdir dir="web" />

<mkdir dir="lib" />

<!-- This dir will contain the WAR file -->

<mkdir dir="dist" />

</target>

<!-- ==== compile the java source ==== -->

<target name="compile" depends="init">

<javac srcdir="src" destdir="classes">

<classpath refid="compile.classpath" />

</javac>

</target>

<!-- ==== build the war file ==== -->

<target name="dist" depends="compile">

<war destfile="dist/${application}.war" webxml="etc/web.xml">

<fileset dir="web" />

<lib dir="lib" />

<classes dir="classes" />

</war>

</target>

You may create a dir lib to store other third party library such as JDBC driver

Pack the third party library here

Page 12: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

WAR FILE

We can use ANT jar task to build the WAR file too. In this case, you create another dir called build

as the place for assembling all the files in this place.

Using ANT war task is more convenient, since this assembly step is avoided.

Page 13: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

<target name="init">

………………….

<!-- This dir is the place where we assembly different parts of WAR file -->

<mkdir dir="build" />

<mkdir dir="build/WEB-INF" />

<mkdir dir="build/WEB-INF/classes" />

<mkdir dir="build/WEB-INF/lib" />

<!-- This dir will contain the WAR file -->

<mkdir dir="dist" />

</target>

<!-- ==== build the war file ==== -->

<target name="dist" depends="compile">

<copy todir="build/WEB-INF/lib">

<fileset dir="lib">

<include name="**/*.jar" />

</fileset>

</copy>

<copy todir="build/WEB-INF/classes">

<fileset dir="classes">

<include name="**/*.*" />

</fileset>

</copy>

<copy file="etc/web.xml" todir="build/WEB-INF" />

<copy todir="build">

<fileset dir="web">

<include name="**/*.*" />

</fileset>

</copy>

<jar destfile="dist/${application}.war" basedir="build"/>

</target>

Directory build and its sub-directories are places for assembling files

Page 14: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

<!-- ==== build the war file ==== -->

<target name="dist" depends="compile">

<copy todir="build/WEB-INF/lib">

<fileset dir="lib">

<include name="**/*.jar" />

</fileset>

</copy>

<copy todir="build/WEB-INF/classes">

<fileset dir="classes">

<include name="**/*.*" />

</fileset>

</copy>

<copy file="etc/web.xml" todir="build/WEB-INF" />

<copy todir="build">

<fileset dir="web">

<include name="**/*.*" />

</fileset>

</copy>

<jar destfile="dist/${application}.war" basedir="build"/>

</target>

Since WAR file is simply a JAR file, we can use ANT jar task to jar the files we assembled in the build directory.

Page 15: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

HOW TO FIND OUT WHAT IS INSIDE THE GENERATED WAR FILE

C:\J2EE_C~1\LAB9_A~2\LAB9_A~1\dist>jar tvf lab9a_2.war

0 Tue Nov 23 13:53:28 EST 2010 META-INF/

106 Tue Nov 23 13:53:26 EST 2010 META-INF/MANIFEST.MF

0 Tue Nov 23 13:53:28 EST 2010 WEB-INF/

0 Tue Nov 23 13:53:28 EST 2010 WEB-INF/classes/

0 Tue Nov 23 13:53:28 EST 2010 WEB-INF/classes/edu/

0 Tue Nov 23 13:53:28 EST 2010 WEB-INF/classes/edu/nku/

0 Tue Nov 23 13:53:28 EST 2010 WEB-INF/classes/edu/nku/j2ee/

0 Tue Nov 23 13:53:28 EST 2010 WEB-INF/lib/

235 Tue Nov 23 13:53:28 EST 2010 WEB-INF/classes/edu/nku/j2ee/CounterBean.class

304 Tue Nov 23 13:53:28 EST 2010 WEB-INF/web.xml

481 Tue Nov 23 13:53:28 EST 2010 counter.jsp

488 Tue Nov 23 13:53:28 EST 2010 index.htm

2573 Tue Nov 23 13:53:28 EST 2010 index.jpg

616 Tue Nov 23 13:53:28 EST 2010 prog.jsp

• If you want to find out what is inside the generated WAR file, you can use the command:

jar tvf name_of_WAR_file

• You may noticed that when you use ant war task or jar task to generate the WAR file, it automatically creates a directory called META-INF and a file MANIFEST.MF under it.

Page 16: C HAPTER 11 D EPLOYING YOUR WEB APP. WAR FILE A WAR file is simply a snapshot of your web app structure, in a nice portable, compressed form (it is really.

DEPLOY WAR FILE

<!-- ==== deploy the files to Tomcat ==== -->

<target name="deploy" depends="dist">

<copy file="dist/${application}.war"

todir="${tomcat.home}/webapps" />

</target> This simply drop the file under webapps dir

of tomcat.