使用Maven Jetty插件

尽管很长一段时间以来我一直在使用Maven,但直到最近我才使用过Jetty插件。 为了能够测试REST客户端,我创建了一个Servlet,向我显示了所有传入的参数和带有传入请求的标头。 为了在容器中运行servlet,我决定尝试使用Maven Jetty插件 。 所以首先我使用特定的Maven原型创建一个Web应用程序:

mvn archetype:generate -DgroupId=net.pascalalma -DartifactId=rest-service -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-webapp

这将导致完整的项目和以下日志记录:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>>
[INFO] 
[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<<
[INFO] 
[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
Downloading: http://artifactory.redstream.nl/repo/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.jar
Downloaded: http://artifactory.redstream.nl/repo/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.jar (4 KB at 5.2 KB/sec)
Downloading: http://artifactory.redstream.nl/repo/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.pom
Downloaded: http://artifactory.redstream.nl/repo/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.pom (533 B at 1.1 KB/sec)
[INFO] Using property: groupId = net.pascalalma
[INFO] Using property: artifactId = rest-service
[INFO] Using property: version = 1.0.0-SNAPSHOT
[INFO] Using property: package = net.pascalalma
Confirm properties configuration:
groupId: net.pascalalma
artifactId: rest-service
version: 1.0.0-SNAPSHOT
package: net.pascalalmaY: : Y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: net.pascalalma
[INFO] Parameter: packageName, Value: net.pascalalma
[INFO] Parameter: package, Value: net.pascalalma
[INFO] Parameter: artifactId, Value: rest-service
[INFO] Parameter: basedir, Value: /Users/pascal/projects
[INFO] Parameter: version, Value: 1.0.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /Users/pascal/projects/rest-service
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.057s
[INFO] Finished at: Sun Feb 03 17:13:33 CET 2013
[INFO] Final Memory: 7M/81M
[INFO] ------------------------------------------------------------------------
MacBook-Air-van-Pascal:projects pascal$

接下来,我将servlet代码添加到项目中:

package net.pascalalma.servlets;import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/**** @author pascal*/
public class TestRestServlet extends HttpServlet {public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();out.println('GET method called');out.println('parameters:\n ' + parameters(request));out.println('headers:\n ' + headers(request));}public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();out.println('POST method called');out.println('parameters: ' + parameters(request));out.println('headers: ' + headers(request));}public void doDelete(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();out.println('Delete method called');}private String parameters(HttpServletRequest request) {StringBuilder builder = new StringBuilder();for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {String name = (String) e.nextElement();builder.append('|' + name + '->' + request.getParameter(name)+'\n');}return builder.toString();}private String headers(HttpServletRequest request) {StringBuilder builder = new StringBuilder();for (Enumeration e = request.getHeaderNames(); e.hasMoreElements();) {String name = (String) e.nextElement();builder.append('|' + name + '->' + request.getHeader(name)+'\n');}return builder.toString();}
}

并在“ web.xml”中配置servlet。 顺便说一下,生成的“ web.xml”无法显示在我的Netbeans版本(v7.2.1)中。 我收到消息:

Web应用程序版本不受支持。 将web.xml升级到2.4或更高版本,或使用以前的NetBeans版本

为了解决这个问题,我修改了web.xml,使其从以下命名空间声明开始:

<web-app xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
xmlns='http://java.sun.com/xml/ns/javaee' 
xmlns:web='http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd' 
xsi:schemaLocation='http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd' id='WebApp_ID' version='2.5'>

接下来,将servlet添加到修改后的“ web.xml”中:

<?xml version='1.0' encoding='UTF-8'?>
...<display-name>Archetype Created Web Application</display-name><servlet><servlet-name>TestRestServlet</servlet-name><servlet-class>net.pascalalma.servlets.TestRestServlet</servlet-class></servlet><servlet-mapping><servlet-name>TestRestServlet</servlet-name><url-pattern>/TestRestServlet</url-pattern></servlet-mapping>
...

现在一切准备就绪,可以测试servlet。 正如我之前所说的,我将为此使用Jetty插件。 要将插件添加到项目中,只需将以下内容放入“ pom.xml”中:

<plugins><plugin><groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId><configuration><scanIntervalSeconds>10</scanIntervalSeconds><contextPath>/</contextPath><scanIntervalSeconds>10</scanIntervalSeconds><stopKey>STOP</stopKey><stopPort>8005</stopPort><port>8080</port></configuration></plugin>
</plugins>

现在,我可以在终端中运行命令“ mvn jetty:run”,以使容器运行servlet。 日志应该以以下内容结尾:

....
2013-02-19 09:54:53.044:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server
[INFO] Starting scanner at interval of 10 seconds.</code>

现在,如果您打开浏览器并转到该URL'http:// localhost:8080 / TestRestServlet?bla = true&#8217 ; 您将看到servlet的运行并输出到浏览器:

GET method called
parameters:
|bla->true
headers:
|DNT->1
|Host->localhost:8080
|Accept->text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
|Accept-Charset->ISO-8859-1,utf-8;q=0.7,*;q=0.3
|Accept-Language->en-US,en;q=0.8
|User-Agent->Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17
|Connection->keep-alive
|Cache-Control->max-age=0
|Accept-Encoding->gzip,deflate,sdch

注意事项:如您所见,在插件配置中,为方便起见,我添加了一些额外的参数。 因此,容器将每隔10秒检查一次servlet中的更改,因此我不必在每次更改servlet之后重新启动Jetty容器。 要停止容器,您现在可以在另一个终端会话中输入命令'mvn jetty:stop -DstopPort = 8005 -DstopKey = STOP'。 顺便说一句,请确保将插件命名为“ jetty-maven-plugin”,而不是“ maven-jetty-plugin”,因为那样您将使用该插件的旧版本,而该插件不会使用配置参数(是的,非常令我感到困惑和沮丧)。

参考:在The Pragmatic Integrator博客上使用我们JCG合作伙伴 Pascal Alma的Maven Jetty插件 。

翻译自: https://www.javacodegeeks.com/2013/03/using-maven-jetty-plugin.html

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

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

相关文章

百度联盟广告如何理解按父容器宽度

创建百度联盟广告位的时候&#xff0c;选择按父容器宽度展示&#xff0c;但是在加入之后&#xff0c;查看代码发现广告的宽度为页面的宽度&#xff0c;并不是希望的父级的宽度&#xff0c; 如图在这里查看&#xff1a; 解析&#xff1a;百度联盟广告自动生成的div按父级的div宽…

WPF中通过AForge实现USB摄像头拍照

最近由于某种原因呢&#xff0c;需要做一下拍照的功能&#xff0c;本来我纠结到底用AForge类库还是用WPFMediaKit.dll &#xff0c;不过后来看网上说WPFMediaKit.dll 是截图而AForge是直接通过摄像头拍照&#xff0c;于是乎&#xff0c;我就选择了AForge类库。 首先留下发帖时我…

php中文字转,PHP文字转图片功能原理与实现方法分析

本文实例讲述了PHP文字转图片功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;这项功能主要用于对邮箱地址、手机等可能被网络爬虫抓取的重要信息的处理。将文字转化为图片绝对是个好注意。验证码的基本生成原理也与此差不多&#xff0c;只是对再对文字转化为图片的…

Java接口的防御性API演进

API的发展绝对是不平凡的。 只有少数几个需要处理的事情。 我们大多数人每天都在使用内部专有API。 现代IDE附带了很棒的工具&#xff0c;可以分解&#xff0c;重命名&#xff0c;上拉&#xff0c;下推&#xff0c;间接&#xff0c;委托&#xff0c;推断&#xff0c;泛化我们的…

sql语句查询各门课程平均分的最大值

解法一&#xff1a; select courseno,stuno,avg(score) 平均分最高值--这里是求平均&#xff0c;后面的条件是过滤最大值的 from tablename group by courseno,stuno having avg(score) > all (select avg(score) sco--这里是过滤最大值 from tablename group by courseno) …

(转)用JS实现表格中隔行显示不同颜色

用JS实现表格中隔行显示不同颜色 第一种&#xff1a; <style> tr{bgColor:expression( this.bgColor((this.rowIndex)%20 )? white : yellow); } </style> <table id"oTable" width"100" border"1" style"border-colla…

Java 系列之spring学习--spring搭建(一)

一、新建maven项目 二、引入spring jar包 <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…

php简单分页,php简单实现分页查询的方法

这篇文章主要为大家详细介绍了php简单实现分页查询的方法&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下关于php,最近学了好多&#xff0c;老师跟我们说&#xff0c;现在学的都是php的核心部分&#xff0c;所以我比较注意了一下&#xff0c;也多练习…

Java Collections API怪癖

因此&#xff0c;当涉及到Java Collections API时&#xff0c;我们倾向于认为已经了解了所有内容。 我们知道我们的身边方式列表 &#xff0c; 设置 &#xff0c; 地图 &#xff0c; Iterables &#xff0c; 迭代器 。 我们已经为Java 8的Collections API增强做好了准备。 但是…

笔记 — 动画效果(Css3)

/*** animation-name: 调用 keyframes 所定义的动画* animation-duration: 动画周期所花费的时间长度* animation-timing-function: 规定动画的速度曲线* animation-delay: 延时执行动画的时间* animation-iteration-count: 动画执行的次数* animation-dircetion: 规定动画下一…

可命名元组namedtuple

import collectionsMytupleClass collections.namedtuple(MytupleClass,[x,y,z])objMytupleClass(11,22,33)print(obj.x)print(obj.y)print(obj.z)print(dir(obj))print(help(obj))转载于:https://www.cnblogs.com/POP-w/p/7412278.html

django用户认证系统——登录4

用户已经能够在我们的网站注册了&#xff0c;注册就是为了登录&#xff0c;接下来我们为用户提供登录功能。和注册不同的是&#xff0c;Django 已经为我们写好了登录功能的全部代码&#xff0c;我们不必像之前处理注册流程那样费劲了。只需几分钟的简单配置&#xff0c;就可为用…

php缓存类,PHP缓存类

// ----------------------------------------------------------------------// |缓存类// ----------------------------------------------------------------------// | Author: justmepzy(justmepzygmail.com)// -------------------------------------------------------…

双向@OneToMany / @ManyToOne关联

编程的目标之一是代表现实世界中的模型。 通常&#xff0c;应用程序需要对实体之间的某些关系进行建模。 在上一篇有关Hibernate关联的文章中&#xff0c;我描述了建立“一对一”关系的规则。 今天&#xff0c;我将向您展示如何设置双向的“ 一对多 ”和“ 多对一 ”关联。 这个…

web前端黑客技术揭秘 6.漏洞挖掘

6.1  普通XSS漏洞自动化挖掘思路 6.1.1  URL上的玄机 6.1.2  HTML中的玄机 2.HTML标签之内 6.1.3  请求中的玄机 6.1.4  关于存储型XSS挖掘 6.2.1  HTML与JavaScript自解码机制 <input type"button" id"exec_btn" value"exec" on…

Webpack基础使用

目录 一.什么是Webpack 二.为什么要使用Webpack 三.Webpack的使用 1.下载yarn包管理器 2.Webpack的安装 3.Webpack的简单使用 4.效果 四.Webpack打包流程 一.什么是Webpack Webpack是一个静态模块打包工具 二.为什么要使用Webpack 在开发中&#xff0c;我们常常会遇到…

CSS3及JS媒体查询教程

CSS3媒体查询&#xff1a; 语法&#xff1a; <media_query_list>&#xff1a;<media_query>[,<media_query>] <media_query>&#xff1a;only|not <mediaType> and <expression>[ and <expression>] <expression>&#xff1a;…

php mongodb

// 欄位字串為$querys array("name">"shian");// 數值等於多少$querys array("number">7);// 數值大於多少$querys array("number">array($gt > 5));// 數值大於等於多少$querys array("number">array($…

阿帕奇骆驼遇见Redis

键值商店的兰博基尼 Camel是最好的面包集成框架&#xff0c;在本文中&#xff0c;我将向您展示如何通过利用另一个出色的项目Redis使它更加强大。 Camel 2.11即将发布&#xff0c;具有许多新功能&#xff0c;错误修复和组件。 这些新组件中的几个是我创作的&#xff0c; red…

php 数字加逗号,php数字满三位添加一逗号

//数字满三位添加一逗号&#xff1a;$s_money1 1000000;$s_money2 number_format($s_money1);echo $s_money1;//1000000echo "";echo $s_money2;//1,000,000PHP number_format() 函数number_format() 函数通过千位分组来格式化数字。注释&#xff1a;该函数支持一个…