如何使用Java,Maven,Jetty创建Web应用程序项目
在本文中,我們使用Maven Archetype插件創(chuàng)建一個(gè)簡(jiǎn)單的Web應(yīng)用程序。 我們將在名為Jetty的Servlet容器中運(yùn)行此Web應(yīng)用程序,添加一些依賴項(xiàng),編寫簡(jiǎn)單的Servlet,并生成WAR文件。 在本文的最后,您還可以在Tomcat中部署該服務(wù)。
系統(tǒng)要求
- Java SE開發(fā)套件8
- Maven 3.3.3
逐步創(chuàng)建Web服務(wù)
本節(jié)說(shuō)明如何從EMPTY文件夾創(chuàng)建此簡(jiǎn)單的Web項(xiàng)目。
創(chuàng)建簡(jiǎn)單的Web項(xiàng)目
創(chuàng)建您的Web應(yīng)用程序
$ mvn archetype:generate -DgroupId=com.pengyifan.simpleweb \-DartifactId=simple-webapp \-Dpackage=com.pengyifan.simpleweb \-DarchetypeArtifactId=maven-archetype-webapp \-Dversion=1.0-SNAPSHOT \-DinteractiveMode=false... [INFO] BUILD SUCCESSMaven Archetype插件創(chuàng)建項(xiàng)目后,將目錄更改為simple-webapp目錄,并查看pom.xml 。 您應(yīng)該看到
<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>com.pengyifan.simpleweb</groupId><artifactId>simple-webapp</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>simple-webapp Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies><build><finalName>simple-webapp</finalName></build> </project>請(qǐng)注意,包裝元素包含值war 。 這種打包類型是配置Maven以在WAR文件中生成Web應(yīng)用程序存檔的方式。 一個(gè)帶有war包裝的項(xiàng)目將在target目錄中創(chuàng)建一個(gè)WAR文件。 因此,該文件的默認(rèn)名稱為${artifactId}-${version}.war 。 在此Maven項(xiàng)目中,默認(rèn)WAR將在target/simple-webapp-1.0-SNAPSHOT.war 。 此外,我們通過(guò)在該項(xiàng)目的構(gòu)建配置中添加finalName元素來(lái)定制生成的WAR文件的名稱。 在finalName為simple-webapp ,打包階段在target/simple-webapp.war生成一個(gè)WAR文件。
接下來(lái),您需要配置
pom.xml應(yīng)該看起來(lái)像這樣。 您也可以使用下載的軟件包中的pom.xml覆蓋它。
<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>com.pengyifan.simpleweb</groupId><artifactId>simple-webapp</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>simple-webapp Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.4</version><scope>provided</scope></dependency></dependencies><build><finalName>simple-webapp</finalName><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.26</version><configuration><connectors><connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"><port>80</port></connector></connectors></configuration></plugin></plugins></build> </project>現(xiàn)在,您可以調(diào)用Jetty插件的Run目標(biāo),以在Jetty Servlet容器中啟動(dòng)Web應(yīng)用程序。 跑:
$ mvn jetty:run請(qǐng)注意, mvn jetty:run將繼續(xù)運(yùn)行Jetty servlet容器,直到使用CTRL-C停止該過(guò)程為止。
Maven啟動(dòng)Jetty Servlet容器后,在Web瀏覽器中加載URL http://localhost/simple-webapp/index.jsp 。 由Archetype生成的簡(jiǎn)單index.jsp很簡(jiǎn)單; 它包含帶有文本“ Hello World!”的第二級(jí)標(biāo)題。 Maven希望將Web應(yīng)用程序的文檔根目錄存儲(chǔ)在src/main/webapp 。 在此目錄中,您可以找到index.jsp文件。
<h2>Hello World! </h2>在src/main/webapp/WEB-INF ,我們將找到最小的Web應(yīng)用程序web.xml ,如以下示例所示:
<web-app><display-name>Archetype Created Web Application</display-name> </web-app>添加一個(gè)簡(jiǎn)單的Servlet
僅具有一個(gè)頁(yè)面且沒有配置的servlet的Web應(yīng)用程序幾乎是無(wú)用的。 讓我們向該應(yīng)用程序添加一個(gè)簡(jiǎn)單的servlet,并對(duì)pom.xml和web.xml進(jìn)行一些更改以支持此更改。 首先,我們需要在src/main/java下創(chuàng)建一個(gè)名為com.pengyifan.web的新包:
$ mkdir -p src/main/java/com/pengyifan/web $ cd src/main/java/com/pengyifan/web創(chuàng)建此包后,轉(zhuǎn)到src/main/java/com/pengyifan/web directory并創(chuàng)建一個(gè)名為SimpleServlet的類:
package com.pengyifan.web;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter;public class SimpleServlet extends HttpServlet {@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}@Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();out.println("SimpleServlet Executed");out.flush();out.close();} }我們的SimpleServlet類就是這樣:一個(gè)servlet,它向響應(yīng)的Writer打印一條簡(jiǎn)單消息。 現(xiàn)在,我們需要將此servlet添加到您的Web應(yīng)用程序并將其映射到請(qǐng)求路徑。 您可以在src/main/webapp/WEB-INF更改web.xml 。
<web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>simple</servlet-name><servlet-class>com.pengyifan.web.SimpleServlet</servlet-class></servlet><servlet-mapping><servlet-name>simple</servlet-name><url-pattern>/simple</url-pattern></servlet-mapping> </web-app>一切就緒,可以測(cè)試該servlet。 跑:
$ mvn clean install ... $ mvn jetty:run [INFO] [jetty:run] ... [INFO] Started Jetty Server此時(shí),您應(yīng)該能夠檢索SimpleServlet的輸出。 在Web瀏覽器中,您可以加載http:// localhost:8080 / simple-webapp / simple,并獲取SimpleServlet Executed 。
更改端口
在源代碼包中,我們使用端口80 。 在此任務(wù)中,我們建議您在端口80上監(jiān)聽 RESTful API。 但是我們?nèi)匀豢梢允章犉渌丝凇?為此,請(qǐng)?jiān)趐om.xml文件中找到以下幾行,然后在<port>更改數(shù)字。
[...] <plugin><groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.26</version><configuration><connectors><connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"><port>80</port></connector></connectors></configuration> </plugin> [...]出于安全原因,我們可能需要啟用服務(wù)器與客戶端之間的SSL通信。 因此,當(dāng)我們運(yùn)行mvn jetty:run我們必須能夠使用https協(xié)議。 為了進(jìn)行開發(fā),我們可以創(chuàng)建自己的安全證書并配置插件以使用它。
要?jiǎng)?chuàng)建開發(fā)證書,我們運(yùn)行以下命令:
keytool -genkey -alias jetty6 -keyalg RSA \-keystore target/jetty-ssl.keystore \-storepass jetty6 -keypass jetty6 \-dname "CN=your name or domain"輸入-dname "CN="選項(xiàng)的名稱或域名。 在Maven pom.xml配置插件時(shí),我們?cè)俅涡枰荑€庫(kù)和密鑰密碼。 以下代碼片段顯示了Jetty插件如何支持SSL:
<plugin><groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><configuration><connectors><connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"><port>8080</port></connector><connector implementation="org.mortbay.jetty.security.SslSocketConnector"><port>8081</port><maxIdleTime>60000</maxIdleTime><keystore>${project.build.directory}/jetty-ssl.keystore</keystore><password>jetty6</password><keyPassword>jetty6</keyPassword></connector></connectors></configuration> </plugin>在connectors元素中,我們定義了用于在端口8080上進(jìn)行http偵聽和在端口8081上進(jìn)行https偵聽的連接器。 在<keystore> ,我們引用使用keytool創(chuàng)建的密鑰庫(kù)文件。 <password>和<keyPassword>定義密碼值。
要測(cè)試此配置,我們可以調(diào)用mvn jetty:run并打開一個(gè)地址為https://localhost:8081/simple-webapp/的Web瀏覽器。 我們一定不要忘記使用https作為協(xié)議。
我們使用Java開發(fā)工具包中的keytool命令生成了密鑰庫(kù)。 但是有一個(gè)Maven插件可以做同樣的事情,但是我們可以在POM中定義keytool的所有參數(shù)。 當(dāng)我們運(yùn)行mvn keytool:generateKeyPair ,將mvn keytool:generateKeyPair密鑰庫(kù),并使用mvn keytool:clean可以再次刪除密鑰庫(kù)。 如果要將密鑰庫(kù)的創(chuàng)建附加到Maven生成資源階段,則必須首先確保調(diào)用keytool:clean否則從keytool收到錯(cuò)誤消息,指出指定的別名已存在。 因此,我們可以將以下內(nèi)容添加到我們的POM中:
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>keytool-maven-plugin</artifactId><executions><execution><phase>generate-resources</phase><id>clean</id><goals><goal>clean</goal></goals></execution><execution><phase>generate-resources</phase><id>generateKeyPair</id><goals><goal>generateKeyPair</goal></goals></execution></executions><configuration><keystore>${project.build.directory}/jetty-ssl.keystore</keystore><dname>CN=BioCreative, OU=NLM, O=NIH, L=Bethesda, ST=DC</dname><keypass>jetty6</keypass><storepass>jetty6</storepass><alias>jetty6</alias><keyalg>RSA</keyalg></configuration> </plugin>現(xiàn)在我們可以調(diào)用mvn jetty:run ,并且keyty由Jetty插件自動(dòng)生成和使用。
配置Tomcat
Tomcat身份驗(yàn)證
要把WAR文件部署到Tomcat中,要比Jetty困難一點(diǎn)。 首先,我們需要添加一個(gè)具有角色manager-gui和manager-script 。 在%TOMCAT_PATH%/conf/tomcat-users.xml
<tomcat-users><role rolename="manager-gui"/><role rolename="manager-script"/><user username="admin" password="password" roles="manager-gui,manager-script" /> </tomcat-users>Maven認(rèn)證
在Maven設(shè)置文件%MAVEN_PATH%/conf/settings.xml ,在Tomcat用戶上方添加,以后Maven將使用該用戶登錄Tomcat服務(wù)器。
<settings ...><servers><server><id>TomcatServer</id><username>admin</username><password>password</password></server></servers> </settings>Tomcat Maven插件
在pom.xml聲明一個(gè)Maven Tomcat插件
<plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><url>http://localhost:8080/</url><server>TomcatServer</server><path>/biocreative</path></configuration> </plugin>在部署期間,它告訴Maven使用http:// localhost:8080 /在路徑/biocreative WAR文件部署到Tomcat服務(wù)器,并使用“ TomcatServer”(在settings.xml )用戶名和密碼進(jìn)行身份驗(yàn)證。
部署到Tomcat
在Tomcat上操作WAR文件的命令。
- mvn tomcat7:部署
- mvn tomcat7:取消部署
- mvn tomcat7:重新部署
例如,
mvn tomcat7:deployTomcat 6示例
如果你使用Tomcat 6,更改插件artifactId中pom.xml到tomcat6-maven-plugin 。 推薦行可能是
- mvn tomcat6:部署
- mvn tomcat6:取消部署
- mvn tomcat6:重新部署
翻譯自: https://www.javacodegeeks.com/2015/08/how-to-create-a-web-application-project-with-java-maven-jetty.html
總結(jié)
以上是生活随笔為你收集整理的如何使用Java,Maven,Jetty创建Web应用程序项目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java ee技术_Java EE 6与
- 下一篇: 网址备案信息查询(网址备案信息)