Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "Jetty/Tutorial/Jetty and Maven HelloWorld"
m |
m |
||
Line 4: | Line 4: | ||
[http://maven.apache.org/ Apache Maven] is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. It is an ideal tool to build a web application project and such projects can use the [[Jetty/Feature/Jetty Maven Plugin]] to run the web application in development mode. | [http://maven.apache.org/ Apache Maven] is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. It is an ideal tool to build a web application project and such projects can use the [[Jetty/Feature/Jetty Maven Plugin]] to run the web application in development mode. | ||
− | You can use Maven both to build embedded | + | You can use Maven both to build embedded Jetty applications and standards based web applications. |
| details = | | details = | ||
− | To understand the basic operations of building and running against | + | To understand the basic operations of building and running against Jetty, first review: |
* the [[Jetty/Tutorial/Jetty_HelloWorld|Jetty HelloWorld Tutorial]]. | * the [[Jetty/Tutorial/Jetty_HelloWorld|Jetty HelloWorld Tutorial]]. | ||
* the [[Jetty/Tutorial/Embedding Jetty|Embedding Jetty Tutorial]]. | * the [[Jetty/Tutorial/Embedding Jetty|Embedding Jetty Tutorial]]. | ||
Line 59: | Line 59: | ||
</source> | </source> | ||
− | === | + | === Creating the POM Descriptor === |
− | The <tt>pom.xml</tt> file declares the project name and it's dependencies. Use | + | The <tt>pom.xml</tt> file declares the project name and it's dependencies. Use an editor to create the file <tt>pom.xml</tt> with the following contents: |
<source lang="xml"> | <source lang="xml"> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" | <project xmlns="http://maven.apache.org/POM/4.0.0" | ||
Line 104: | Line 104: | ||
mvn clean compile exec:java | mvn clean compile exec:java | ||
</source> | </source> | ||
− | You can point your browser to [http://localhost:8080 http://localhost:8080] to see the hello world page. You can observe what | + | You can point your browser to [http://localhost:8080 http://localhost:8080] to see the hello world page. You can observe what Maven is doing for you behind the scenes by using the <tt>mvn dependency:tree</tr> command which reveals the transitive dependency resolved and downloaded as: |
<source lang="text"> | <source lang="text"> | ||
> mvn dependency:tree | > mvn dependency:tree | ||
Line 132: | Line 132: | ||
− | == Standard Web app with Jetty and Maven == | + | == Creating a Standard Web app with Jetty and Maven == |
− | The | + | The example above shows how to run a hello world example as an embedded Jetty handler. The following example shows how to develop a standard web app with Maven and Jetty. First create the Maven structure: |
<source lang="bash"> | <source lang="bash"> | ||
Line 144: | Line 144: | ||
=== Creating some static content === | === Creating some static content === | ||
− | A web application can contain static content, so create the file <tt>src/main/webapp/index.html</tt> with the following | + | A web application can contain static content, so create the file <tt>src/main/webapp/index.html</tt> with the following contents: |
<source lang="html4strict"> | <source lang="html4strict"> | ||
<h1>Hello World Webapp</h1> | <h1>Hello World Webapp</h1> | ||
Line 173: | Line 173: | ||
</source> | </source> | ||
− | This servlet needs to be declared in the deployment descriptor, so edit the file <tt>src/main/webapp/WEB-INF/web.xml</tt> and add the following | + | This servlet needs to be declared in the deployment descriptor, so edit the file <tt>src/main/webapp/WEB-INF/web.xml</tt> and add the following contents: |
<source lang="xml"> | <source lang="xml"> | ||
<?xml version="1.0" encoding="ISO-8859-1"?> | <?xml version="1.0" encoding="ISO-8859-1"?> | ||
Line 193: | Line 193: | ||
=== Building and Running the Web Application === | === Building and Running the Web Application === | ||
− | + | No build and run the web application by using the command: | |
<source lang="bash"> | <source lang="bash"> | ||
mvn jetty:run | mvn jetty:run | ||
Line 200: | Line 200: | ||
=== Building a WAR file === | === Building a WAR file === | ||
− | + | You can create a Web Application Archive (WAR) file from the project with the command: | |
<source lang="bash"> | <source lang="bash"> |
Revision as of 17:31, 6 August 2010
Contents
Introduction
Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. It is an ideal tool to build a web application project and such projects can use the Jetty/Feature/Jetty Maven Plugin to run the web application in development mode.
You can use Maven both to build embedded Jetty applications and standards based web applications.
Details
To understand the basic operations of building and running against Jetty, first review:
Embedded Jetty with Maven
Maven uses convention over configuration, so it is best to use the project structure as Maven recommends. Archetypes can be used to quickly setup Maven projects, but for this tutorial, we will set up the structure manually:
mkdir JettyMavenHelloWorld cd JettyMavenHelloWorld mkdir -p src/main/java/org/example
The HelloWorld class
Use an editor to create the file src/main/java/org/example/HelloWorld.java with the following contents:
package org.example; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.ServletException; import java.io.IOException; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; public class HelloWorld extends AbstractHandler { public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html;charset=utf-8"); response.setStatus(HttpServletResponse.SC_OK); baseRequest.setHandled(true); response.getWriter().println("<h1>Hello World</h1>"); } public static void main(String[] args) throws Exception { Server server = new Server(8080); server.setHandler(new HelloWorld()); server.start(); server.join(); } }
Creating the POM Descriptor
The pom.xml file declares the project name and it's dependencies. Use an editor to create the file pom.xml with the following contents:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>hello-world</artifactId> <version>0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>Jetty HelloWorld</name> <dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>7.0.1.v20091125</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.1</version> <executions> <execution><goals><goal>java</goal></goals></execution> </executions> <configuration> <mainClass>org.example.HelloWorld</mainClass> </configuration> </plugin> </plugins> </build> </project>
Building and Running embedded HelloWorld
The HelloWorld class can now be compiled and executed with the commands
mvn clean compile exec:java
You can point your browser to http://localhost:8080 to see the hello world page. You can observe what Maven is doing for you behind the scenes by using the mvn dependency:tree</tr> command which reveals the transitive dependency resolved and downloaded as:
> mvn dependency:tree [INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'dependency'. [INFO] ------------------------------------------------------------------------ [INFO] Building Jetty HelloWorld [INFO] task-segment: [dependency:tree] [INFO] ------------------------------------------------------------------------ [INFO] [dependency:tree {execution: default-cli}] [INFO] org.example:hello-world:jar:0.1-SNAPSHOT [INFO] \- org.eclipse.jetty:jetty-server:jar:7.0.1.v20091125:compile [INFO] +- javax.servlet:servlet-api:jar:2.5:compile [INFO] +- org.eclipse.jetty:jetty-continuation:jar:7.0.1.v20091125:compile [INFO] \- org.eclipse.jetty:jetty-http:jar:7.0.1.v20091125:compile [INFO] \- org.eclipse.jetty:jetty-io:jar:7.0.1.v20091125:compile [INFO] \- org.eclipse.jetty:jetty-util:jar:7.0.1.v20091125:compile [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4 seconds [INFO] Finished at: Tue Feb 16 16:19:08 EST 2010 [INFO] Final Memory: 11M/68M [INFO] ------------------------------------------------------------------------
Creating a Standard Web app with Jetty and Maven
The example above shows how to run a hello world example as an embedded Jetty handler. The following example shows how to develop a standard web app with Maven and Jetty. First create the Maven structure:
mkdir JettyMavenHelloWarApp cd JettyMavenHelloWebApp mkdir -p src/main/java/org/example mkdir -p src/main/webapp/WEB-INF
Creating some static content
A web application can contain static content, so create the file <tt>src/main/webapp/index.html with the following contents:
<h1>Hello World Webapp</h1> <a href="/hello">Hello Servlet</a>
Creating a Servlet
Use an editor to create the file src/main/java/org/example/HelloServlet.java with the following contents:
package org.example; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); response.setStatus(HttpServletResponse.SC_OK); response.getWriter().println("<h1>Hello Servlet</h1>"); response.getWriter().println("session=" + request.getSession(true).getId()); } }
This servlet needs to be declared in the deployment descriptor, so edit the file src/main/webapp/WEB-INF/web.xml and add the following contents:
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>Hello</servlet-name> <servlet-class>org.example.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Hello</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping> </web-app>
Building and Running the Web Application
No build and run the web application by using the command:
mvn jetty:run
You can see the static and dynamic content at http://localhost:8080.
Building a WAR file
You can create a Web Application Archive (WAR) file from the project with the command:
mvn package
The resulting war file is in the target directory and may be deployed on any standard servlet server or deployed to jetty.