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

maven项目 jetty

在本文中,我们使用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

maven项目 jetty

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

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

相关文章

如何解决python中编码错误的问题_【总结】Python 2.x中常见字符编码和解码方面的错误及其解决办法...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼对于Python解析器而Python解析器所干的事情&#xff0c;就是&#xff1a;Python解析器&#xff0c;根据当前的所用的字符串编码类型此字符串编码类型&#xff0c;是你自己所设置的不论是在Python的IDLE中&#xff0c;还是Python文件…

C语言知识总结一:C语言的基本知识汇总

点击蓝字关注我们来源于网络&#xff0c;侵删C语言是一种计算机程序设计语言。它既有高级语言的特点&#xff0c;又具有汇编语言的特点。它可以作 为系统设计语言&#xff0c;编写工作系统应用程序&#xff0c;也可以作为应用程序设计语言&#xff0c;编写不依赖计算机 硬件的应…

jboss8日志级别设置_罐中研讨会:设置JBoss BPM Suite全日研讨会

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

yapi 接口文档_1分钟docker部署顶尖 API 文档管理系统

YApi 是高效、易用、功能强大的 api 管理平台&#xff0c;旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API&#xff0c;YApi 还为用户提供了优秀的交互体验&#xff0c;开发人员只需利用平台提供的接口数据写入工具以及简单的点击…

微软CTO建议业界弃用C/C++采用Rust,遭C++之父回怼

点击蓝字关注我们来源于网络&#xff0c;侵删近日&#xff0c;Microsoft Azure CTO、Sysinternals 的主要开发者 Mark Russinovich 在其社交账号上发布动态称&#xff0c;开发人员是时候停止使用 C/C 来启动新项目&#xff0c;并建议可在需要使用 non-GC 语言的场景中使用 Rust…

红帽 jboss_红帽峰会2015所需的JBoss BPM内容指南

红帽 jboss明年再见&#xff1f; 今年在Red Hat Summit上&#xff0c;我们在JBoss BRMS和JBoss BPM Suite演讲中获得了很多乐趣。 在DevNation周围也有一些社区会议&#xff0c;重点介绍了使我们的产品成为可能的项目。 您可以在他们的博客上找到此演讲的概述&#xff0c;并…

跳一跳python刷分_【Python跳一跳刷分辅助】iPhone版_Python跳一跳刷分辅助Ios最新版下载_Python跳一跳刷分辅助v1.0.1苹果版免费下载 - 九酷苹果网...

Python跳一跳刷分辅助工具免费提供了&#xff0c;绝对是从根源上找到高分技巧&#xff0c;通过源代码完成高分获取&#xff0c;喜欢这类小游戏的你不要错过了这款辅助了~Python跳一跳刷分辅助原理&#xff1a;原理说明将手机点击到《跳一跳》小程序界面;用Adb 工具获取当前手机…

Python、C、Java 和 C++ 四足鼎立,其他已无胜算? | TIOBE 10 月编程语言排行榜

点击蓝字关注我们来源于网络&#xff0c;侵删技术的千变万化&#xff0c;都是有迹可循的&#xff0c;最新的 TIOBE 十月编程语言榜单重磅发布&#xff0c;快来看看有哪些值得关注的变化吧&#xff01;四大编程语言不断增强其主导地位曾几何时&#xff0c;编程语言界中 Java、C、…

如何连接oracle xe_为什么应始终将连接池与Oracle XE一起使用

如何连接oracle xe介绍 Oracle Express Edition是Oracle Enterprise Edition的免费版本&#xff0c;其较小的尺寸使其非常方便地测试各种Oracle功能。 根据Oracle文档 &#xff0c;Express Edition最多可以使用一个CPU和1 GB RAM&#xff0c;但是实际上还有其他限制并不总是很…

diveintopython3 official_Python 学习资料整理

Python 整理Python3 Official DocumentationCoding StyleEncodingFunction ParameterDecorateMap, Reduce and FilterPython Best PracticeitertoolscollectionsRegular ExpressionOperator OverloadingMulti-threadWith StatementInheritanceVariables, Refer, Copy and Scope…

C语言 #define 和 typedef 区别

点击蓝字关注我们来源于网络&#xff0c;侵删在C语言编程中&#xff0c;typedef 和 #define是最常用语句&#xff0c;可能很多工作过几年的工程师都没有去深究过它们的一些用法和区别。typedef的用法在C/C语言中&#xff0c;typedef常用来定义一个标识符及关键字的别名&#xf…

Spring Batch –用JavaConfig替换XML作业配置

最近&#xff0c;我协助一个客户启动并运行了Spring Batch实现。 该团队决定继续使用针对批处理作业的基于JavaConfig的配置&#xff0c;而不是传统的基于XML的配置。 随着这越来越成为配置Java应用程序的一种常用方法&#xff0c;我觉得是时候更新Keyhole的Spring Batch系列了…

python 共轭转置_python矩阵运算,转置,逆运算,共轭矩阵实例

我就废话不多说了&#xff0c;大家还是直接看代码吧&#xff01;#先定义两个矩阵Xnp.array([[1,2104,5,1,45],[1,1416,3,2,40],[1,1534,3,2,30],[1,852,2,1,36]])ynp.array([45,40,30,36])#内积以后发现cnp.dot(X.T,X)carray([[ 4, 5906, 13, 6, 151],[ 5906, 9510932, 21074, …

python解析pcap包已text格式输出_python分析pcap包

前两天需要分析一个pcap包&#xff0c;写了一段python脚本&#xff0c;将每个包的基本信息(源/目的MAC、源/目的IP、源/目的端口)提取出来。在实现过程中为了省事用了dpkt开发包&#xff0c;不过只用了几个简单的函数&#xff0c;具体的信息提取部分都是自己实现的。值得注意的…

sql limit 子句_Java 8流中的常见SQL子句及其等效项

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

C++编程中的核心知识点!

点击蓝字关注我们来源于网络&#xff0c;侵删尊重函数接口&#xff0c;尽量不作内部改动C代码语句分为&#xff1a;内置类型&#xff0c;名字&#xff0c;变量&#xff0c;操作符&#xff0c;标量&#xff0c;字符串&#xff0c;预处理指示&#xff08;如#include&#xff09;等…

python3.70_Python3 基本数据类型

Python3 基本数据类型Python 中的变量不需要声明。每个变量在使用前都必须赋值&#xff0c;变量赋值以后该变量才会被创建。在 Python 中&#xff0c;变量就是变量&#xff0c;它没有类型&#xff0c;我们所说的"类型"是变量所指的内存中对象的类型。等号()用来给变量…

jdbc mysql驱动_MySQL JDBC驱动程序如何处理准备好的语句

jdbc mysql驱动准备的语句类型 在研究《 高性能Java持久性》一书中的“ 语句缓存”一章时&#xff0c;我有机会比较了Oracle&#xff0c;SQL Server&#xff0c;PostgreSQL和MySQL处理预准备语句的方式。 感谢Jess Balint &#xff08;MySQL JDBC驱动程序撰稿人&#xff09;在…

C++ 语言的单元测试与代码覆盖率

点击蓝字关注我们来源于网络&#xff0c;侵删前言测试是软件开发过程中一个必须的环节&#xff0c;测试确保软件的质量符合预期。对于工程师自己来说&#xff0c;单元测试也是提升自信心的一种方式。直接交付没有经过测试的代码是不太好的&#xff0c;因为这很可能会浪费整个团…

使用Spring AOP和番石榴速率限制器的节气门方法

外部服务或API可能有使用限制&#xff0c;或者它们不能失败就无法处理大量请求。 这篇文章解释了如何创建一个基于Spring Framework的方面&#xff0c;该方面可以用来限制使用Guava速率限制器的任何建议方法调用。 以下实现需要Java 8&#xff0c;Spring AOP和Guava。 让我们从…