如何使用Java,Maven,Jetty创建Web应用程序项目

在本文中,我们使用Maven Archetype插件创建一个简单的Web应用程序。 我们将在名为Jetty的Servlet容器中运行此Web应用程序,添加一些依赖项,编写简单的Servlet,并生成WAR文件。 在本文的最后,您还可以在Tomcat中部署该服务。

系统要求

  • Java SE开发套件8
  • Maven 3.3.3

逐步创建Web服务

本节说明如何从EMPTY文件夹创建此简单的Web项目。

创建简单的Web项目

创建您的Web应用程序

$ 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 SUCCESS

Maven Archetype插件创建项目后,将目录更改为simple-webapp目录,并查看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></dependencies><build><finalName>simple-webapp</finalName></build>
</project>

请注意,包装元素包含值war 。 这种打包类型是配置Maven以在WAR文件中生成Web应用程序存档的方式。 一个带有war包装的项目将在target目录中创建一个WAR文件。 因此,该文件的默认名称为${artifactId}-${version}.war 。 在此Maven项目中,默认WAR将在target/simple-webapp-1.0-SNAPSHOT.war 。 此外,我们通过在该项目的构建配置中添加finalName元素来定制生成的WAR文件的名称。 在finalNamesimple-webapp ,打包阶段在target/simple-webapp.war生成一个WAR文件。

接下来,您需要配置

  1. 适用于目标Java版本的Maven Compiler插件(本文中的JDK 8)
  2. Java Servlet依赖性。
  3. Maven码头插件。

pom.xml应该看起来像这样。 您也可以使用下载的软件包中的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>

现在,您可以调用Jetty插件的Run目标,以在Jetty Servlet容器中启动Web应用程序。 跑:

$ mvn jetty:run

请注意, mvn jetty:run将继续运行Jetty servlet容器,直到使用CTRL-C停止该过程为止。

Maven启动Jetty Servlet容器后,在Web浏览器中加载URL http://localhost/simple-webapp/index.jsp 。 由Archetype生成的简单index.jsp很简单; 它包含带有文本“ Hello World!”的第二级标题。 Maven希望将Web应用程序的文档根目录存储在src/main/webapp 。 在此目录中,您可以找到index.jsp文件。

<h2>Hello World!
</h2>

src/main/webapp/WEB-INF ,我们将找到最小的Web应用程序web.xml ,如以下示例所示:

<web-app><display-name>Archetype Created Web Application</display-name>
</web-app>

添加一个简单的Servlet

仅具有一个页面且没有配置的servlet的Web应用程序几乎是无用的。 让我们向该应用程序添加一个简单的servlet,并对pom.xmlweb.xml进行一些更改以支持此更改。 首先,我们需要在src/main/java下创建一个名为com.pengyifan.web的新包:

$ mkdir -p src/main/java/com/pengyifan/web
$ cd src/main/java/com/pengyifan/web

创建此包后,转到src/main/java/com/pengyifan/web directory并创建一个名为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类就是这样:一个servlet,它向响应的Writer打印一条简单消息。 现在,我们需要将此servlet添加到您的Web应用程序并将其映射到请求路径。 您可以在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>

一切就绪,可以测试该servlet。 跑:

$ mvn clean install
...
$ mvn jetty:run
[INFO] [jetty:run]
...
[INFO] Started Jetty Server

此时,您应该能够检索SimpleServlet的输出。 在Web浏览器中,您可以加载http:// localhost:8080 / simple-webapp / simple,并获取SimpleServlet Executed

更改端口

在源代码包中,我们使用端口80 。 在此任务中,我们建议您在端口80监听 RESTful API。 但是我们仍然可以收听其他端口。 为此,请在pom.xml文件中找到以下几行,然后在<port>更改数字。

[...]
<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>
[...]

出于安全原因,我们可能需要启用服务器与客户端之间的SSL通信。 因此,当我们运行mvn jetty:run我们必须能够使用https协议。 为了进行开发,我们可以创建自己的安全证书并配置插件以使用它。

要创建开发证书,我们运行以下命令:

keytool -genkey -alias jetty6 -keyalg RSA \-keystore target/jetty-ssl.keystore \-storepass jetty6 -keypass jetty6 \-dname "CN=your name or domain"

输入-dname "CN="选项的名称或域名。 在Maven pom.xml配置插件时,我们再次需要密钥库和密钥密码。 以下代码片段显示了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上进行http侦听和在端口8081上进行https侦听的连接器。 在<keystore> ,我们引用使用keytool创建的密钥库文件。 <password><keyPassword>定义密码值。

要测试此配置,我们可以调用mvn jetty:run并打开一个地址为https://localhost:8081/simple-webapp/的Web浏览器。 我们一定不要忘记使用https作为协议。

我们使用Java开发工具包中的keytool命令生成了密钥库。 但是有一个Maven插件可以做同样的事情,但是我们可以在POM中定义keytool的所有参数。 当我们运行mvn keytool:generateKeyPair ,将mvn keytool:generateKeyPair密钥库,并使用mvn keytool:clean可以再次删除密钥库。 如果要将密钥库的创建附加到Maven生成资源阶段,则必须首先确保调用keytool:clean否则从keytool收到错误消息,指出指定的别名已存在。 因此,我们可以将以下内容添加到我们的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>

现在我们可以调用mvn jetty:run ,并且keyty由Jetty插件自动生成和使用。

配置Tomcat

Tomcat身份验证

要把WAR文件部署到Tomcat中,要比Jetty困难一点。 首先,我们需要添加一个具有角色manager-guimanager-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认证

在Maven设置文件%MAVEN_PATH%/conf/settings.xml ,在Tomcat用户上方添加,以后Maven将使用该用户登录Tomcat服务器。

<settings ...><servers><server><id>TomcatServer</id><username>admin</username><password>password</password></server></servers>
</settings>

Tomcat Maven插件

pom.xml声明一个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服务器,并使用“ TomcatServer”(在settings.xml )用户名和密码进行身份验证。

部署到Tomcat

在Tomcat上操作WAR文件的命令。

  • mvn tomcat7:部署
  • mvn tomcat7:取消部署
  • mvn tomcat7:重新部署

例如,

mvn tomcat7:deploy

Tomcat 6示例

如果你使用Tomcat 6,更改插件artifactIdpom.xmltomcat6-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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java开发一款坦克大战游戏

导读:随着人们对生活质量的要求一天比一天高,为了让人们更好地开掘自身的智慧,游戏就此进入了大众的视野,在人们的生活中有着重要的位置,已然变得必不可少。游戏产业推动高新技术不断升级,极大地促进了经济的增长,推动了“第四产业”的经济腾飞。坦克大战游戏是童年时期…

java大转盘抽奖概率算法_幸运大转盘抽奖 抽奖算法 程序实现逻辑

近期碰到的一个需求&#xff0c;实现一个类似大转盘抽奖的功能&#xff0c;需自定义奖项&#xff0c;各奖项中奖概率&#xff0c;当日抽奖最大次数&#xff0c;抽奖成本等。分享一个简单的java代码的实现的思路&#xff0c;有不足之处感谢各位指正。初步方法首先要定义几个奖品…

java开发银行柜员业务绩效考核系统

导读:当今社会己进入信息社会时代,信息己经受到社会的广泛关注,被看作社会和科学技术发展的三大支柱(材料、能源、信息)之一。信息是管理的基础,是进行决策的的基本依据。在一个组织里,信息己作为人力、物力、财力之外的第四种能源,占有重要的地位。然而,信息是一种非…

mysql orderby count_mysql中count(),groupby,orderby使用方法分享

本文主要和大家分享mysql中count(), group by, order by使用方法&#xff0c;mysql中order by 排序查询、asc升序、desc降序&#xff0c;group by 分组查询、having 只能用于group by子句、作用于组内&#xff0c;having条件子句可以直接跟函数表达式。使用group by 子句的查询…

一文教你使用java开发一款坦克大战游戏

导读&#xff1a;随着人们对生活质量的要求一天比一天高&#xff0c;为了让人们更好地开掘自身的智慧&#xff0c;游戏就此进入了大众的视野&#xff0c;在人们的生活中有着重要的位置&#xff0c;已然变得必不可少。游戏产业推动高新技术不断升级&#xff0c;极大地促进了经济…

Java 8流中的常见SQL子句及其等效项

功能编程允许使用通用语言进行准声明性编程 。 通过使用功能强大的流畅API&#xff08;例如Java 8的Stream API &#xff09;或jOOλ的顺序Stream扩展Seq或更复杂的库&#xff08;例如javaslang或functionaljava&#xff09; &#xff0c;我们可以以一种非常简洁的方式来表示数…

php开启openssl的方法

windows下开启方法&#xff1a; 1&#xff1a; 首先检查php.ini中&#xff1b;extensionphp_openssl.dll是否存在&#xff0c; 如果存在的话去掉前面的注释符‘&#xff1b;’&#xff0c; 如果不存在这行&#xff0c;那么添加extensionphp_openssl.dll。 2&#xff1a; 讲php文…

mysql 短时大连接的问题_mysql长连接和短连接的问题

什么是长连接&#xff1f;其实长连接是相对于通常的短连接而说的&#xff0c;也就是长时间保持客户端与服务端的连接状态。通常的短连接操作步骤是&#xff1a;连接-》数据传输-》关闭连接&#xff1b;而长连接通常就是&#xff1a;连接-》数据传输-》保持连接-》数据传输-》保…

java实现动漫论坛

导读:作为文化产业的一部分,动漫影响了我国一代又一代青少年,据钱江晚报调查显示,有超过七成的95后愿意从事与动漫相关的行业,可见其对青少年影响力之大。 动漫论坛作为最先开始热爱动漫人士进行交流的方式之一,是爱好者们共享信息,寻找同伴的重要渠道之一。在这次毕业设…

混合使用Azure LB和ILB访问相同web服务(3)

接下来我们来配置Azure Load balancer&#xff0c;就是面向公网的负载均衡器&#xff1a; 1.在该测试中&#xff0c;为了保持内网访问和外网访问一样的体验&#xff0c;本地端口和public端口和ILB一样&#xff0c;同样是80&#xff1a; PS C:\> Get-AzureVM -ServiceName …

Java实现个人博客系统(附下载源码)

导读:进入二十一世纪,以Internet为核心的现代网络积水和通信技术已经得到了飞速的发展和广泛的应用,各种网络交流互动工具也应运而生。其中以论坛、博客、社区、空间最为受广大网民朋友的欢迎,也是目前为止发展的比较成熟的信息交流工具。在网络技术逐渐渗入社会生活各个层…

mysql日活统计函数_如何通过简化日活模型,预估一个产品的日活(DAU)?

本文笔者通过简化日活模型&#xff0c;粗略地估算出未来一段时间的产品日活规模。进而通过日活的规模&#xff0c;再去估算一些潜在收益&#xff0c;以及运营成本等等数据。这段时间&#xff0c;经常有人问到以下的问题&#xff1a;按照现在的推广和留存&#xff0c;我们在未来…

通过SPANN方式将Spring&Quartz与自定义注释集成

在上一篇文章中 &#xff0c;我们演示了如何在Spring容器中创建和配置带批注的Quartz作业。 我们使用了一个类级别的注释将一些元数据添加到实现Quartz Job的bean中。 批注定义了作业的名称&#xff0c;组及其cron表达式。 后来&#xff0c;大部分代码专用于处理该批注&#xf…

Linux学习之常用技巧

▌基础 学习 Bash 。你可以man bash来看看bash的东西&#xff0c;并不复杂也并不长。你用别的shell也行&#xff0c;但是bash是很强大的并且也是系统默认的。&#xff08;学习zsh或tsch只会让你在很多情况下受到限制&#xff09; 学习 vim 。在Linux下&#xff0c;基本没有什么…

java开发一个完整的秒杀与竞价网上商城

导读:网络商城近年来非常火热的一种经营方式,与现实生活中的商店的差别是利用电子商务的一些手段,从而沟通消费者与商家进行商品买卖的虚拟商店,减少买家卖家间的多层环节,减少运输的成本以及层层代理过程中的差价,这就有巨大的价格优势从而带来巨大的发展空间。网络商城…

precede和previous_Previous Analyses of Hungarian Phrase Structure

摘要&#xff1a;The most obvious empirical basis of the establishment of phrase structure rules is the observation of word order phenomena. Since in a large set of Hungarian sentences any permutation of the major constituents is grammatical, the conclusion…

判断存储过程是否存在某个参数名

select * from syscolumns where id (select id from sysobjects where name存储过程名) select * from syscolumns where id object_id(存储过程名) and name参数名 以上只是拿出参数列表&#xff0c;还要在WHERE 后加 NAMEHEHE 你想查的字段名。转载于:https://www.cnblogs.c…

罐中研讨会:设置JBoss BPM Suite全天研讨会

是否在寻找一种简单的方法来宣传&#xff0c;展示或演示JBoss业务流程管理套件&#xff08;BPM Suite&#xff09;产品的入门难度&#xff1f; 别无所求&#xff0c;因为我们召集了这个研讨会&#xff0c;因此您可以围绕JBoss BPM Suite构建一个晚上&#xff0c;半天或全天的…

java实现一个电子书下载系统

导读:电子书代表人们所阅读的数字化出版物, 从而区别于以纸张为载体的传统出版物, 电子书是利用计算机技术将一定的文字、图片、声音、影像等信息, 通过数码方式记录在以光、电、磁为介质的设备中, 借助于特定的设备来读取、复制、传输,已经为人们所熟悉。 众所周知,自20世…

常用FTP命令 1. 连接ftp服务器

1. 连接ftp服务器格式&#xff1a;ftp [hostname| ip-address]a)在linux命令行下输入&#xff1a; ftp 192.168.1.1b)服务器询问你用户名和密码&#xff0c;分别输入用户名和相应密码&#xff0c;待认证通过即可。 2. 下载文件 下载文件通常用get和mget这两条命令。a) get 格式…