`

jetty快速入门

    博客分类:
  • Java
阅读更多
(0)
Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty以其高效、小巧、可嵌入式.

如果让一个人说出一种开源的servlet容器,可能他们会回答Apache Tomcat。但是,Tomcat并不是孤单的,我们还有Jetty。Jetty作为可选的servlet容器只是一个额外的功能,
而它真正出名是因为它是作为一个可以嵌入到其他的Java代码中的servlet容器而设计的。这就是说,开发小组将Jetty作为一组Jar文件提供出来,因此你可以在你自己的代码中将servlet容器实例化成一个对象并且可以操纵这个容器对象。


可以提供给客户一个自己具有启动,停止以及管理功能的应用程序:Jetty对于普通的HTTP服务(没有servlet)只需要350k的内存,这使得可以将其用在智能设备中。你可以提供基于web的控制面板并且具有Java web应用的所有功能而不用担心那些独立的容器所带来的压力。

Jetty 的配置文件放在 etc 路径下,该路径下有如下几个配置文件:
jetty.xm1文件。
jetty-jmx.xm1文件。
jetty-plus.xm1文件。
webdefault.xm1文件。

其中 webdefault.xm1文件是 Web 应用的默认配置文件,与 Jetty 的配置没有太大的关系,该文件通常不需要修改。
另外的三个都是 Tomcat 的配置文件:jetty.xm1文件是默认的配置文件;jetty-jmx.xm1是启动 JMX 控制的配置文件; jetty-plus.xm1文件是在增加 Jetty 扩展功能的配置文件。
在启动 Jetty 时输入如下命令:
java -jar startup.jar
默认使用jetty.xm1文件时启动Jetty,即与如下命令效果相同:
java -jar startup.jar etc/jetty.xml

关闭时在命令行中用: ctrl+c

Jetty 配置文件语法说明:
打开 Jetty 配置文件,该配置文件的根元素是Configure.
Jetty 是个嵌入式 Web 容器,因此它的服务对应一个 Server 实例,可以看到配置文件中有如下片段:
 <1-配置了一个Jetty服务器进程一〉
<Configure id="Server" class="org.mortbay.jetty.Server">
另外还会看到有如下的配置元素:
Set: 相当于调用 se仅xx 方法。
Get: 相当于调用 getXxx 方法。
New: 创建某个类的实例。
Arg: 为方法或构造器传入参数。
Array: 设置一个数组。
Map: 允许生成一个新的HashMap.
Item: 设置一个Array或者Map条目元素的条目
Call: 调用某个方法。
<SystemProperty>: 这个元素允许JVM系统属性作为Set、Put或者Arg 元素的值。
 
Java对象通过一连串<New>, <Set>, <Put> 和 <Call>元素来配置。下面的例子让你有个初步的了解: 
<Set name="Test">value</Set> == obj.setTest("value"); 
<Put name="Test">value</Put> == obj.put("Test","value"); 
<Call name="test"><Arg>value</Arg></Call> == obj.test("value"); 
<New class="com.acme.MyStuff"><Arg/></New> == new com.acme.MyStuff(); 
 
一个Call元素可以包含一系列的Arg元素,跟随一系列作用在新对象上的Set、Put或者Call元素。 

<Call name="test"> 
<Arg>value1</Arg> 
<Set name="Test">Value2</Set> 
</Call> 

等价于: 

Object o2 = o1.test("value1"); 
o2.setTest("value2"); 
 
<SystemProperty name="Test" default="value"/> 

等价于: 

System.getProperty("Test","value"); 
<ref>,这个元素引用以前产生的一个对象,一个Ref元素包含一系列作用在参考对象上的Set, Put 和 Call元素: 

第一步下载:http://dist.codehaus.org/jetty/jetty-6.1.14/jetty-6.1.14.zip  是目前最新的稳定版。
解压到如E:\jetty-6.1.14,其中比较重要的目录是:etc、contexts、webapps。个人认为可以类比 tomcat的conf、conf\Catalina\localhost、webapps目录。contexts是热部署用的。

(1)
把应用程序或WAR包放于jetty的webapps下来发布:
试运行下,可以把一个简单的web项目放到webapps目录下,或是*.war,如:web-demo(或web-demo.war)放到webapps目录下。
运行: E:\jetty-6.1.14>java -jar start.jar
当看到:
2009-01-13 15:35:01.953::INFO: Started SelectChannelConnector@127.0.0.1:8080 ,表示jetty启动完成.
打开:http://localhost:8080/web-demo ,就有结果了。

(2)
如果不把web-demo放到webapps目录下也可,在contexts目录下建立一个文件告诉jetty就行了。
可以在contexts目录下复制test.xml为web-demo.xml,然后修改如下:
     1. <?xml version="1.0" encoding="ISO-8859-1"?>    
     2. <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">    
     3.       
     4. <Configure class="org.mortbay.jetty.webapp.WebAppContext">    
     5.       
     6. <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->    
     7. <!-- Required minimal context configuration : -->    
     8. <!-- + contextPath -->    
     9. <!-- + war OR resourceBase -->    
    10. <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->    
    11. <Set name="contextPath">/web-demo</Set>    
    12. <Set name="war">e:/workspace/web-demo/WebContent</Set>    
    13.       
    14. <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->    
    15. <!-- Optional context configuration -->    
    16. <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->    
    17. <Set name="extractWAR">false</Set>    
    18. <Set name="copyWebDir">false</Set>    
    19. <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>    
    20. <!--   
    21. <Set name="overrideDescriptor"><SystemProperty name="jetty.home" default="."/>/contexts/test.d/override-web.xml</Set>   
    22. -->    
    23. </Configure>   
war可以设置成绝对路径。然后再重启jetty,也可得到同样的效果.

(3)在现成的项目中嵌入使用 jetty
现我有一示例项目 e:/workspace/web-demo(称为project_home),里面的Web根目录是WebContent。
1.
在project_home 建一个jetty目录,子目录如:contexts、etc、lib。
2.
把${jetty_home}/etc目录下的jetty.xml、 webdefault.xml文件复制到${project_home}/jetty/etc目录中;
3.
把${jetty_home}/lib/jsp- 2.1目录复制到${project_home}/jetty/lib目录下,
把jetty-6.1.14.jar、jetty-util-6.1.14.jar、servlet-api-2.5- 6.1.14.jar复制到${project_home}/jetty/lib目录下.
(如果不复制jsp-2.1或jsp-2.0也可以正常启动,只是不能解析 jsp,打开主页时提示 JSP not support)
4.
${jetty_home}/start.jar复制到$ {project_home}/jetty目录下。
5.
接下来在${project_home}/jetty/contexts目录下加一个文件。可以是上面给出的web-demo.xml。不过war 可以改为:
<Set name="war"><SystemProperty name="jetty.home" default="."/>/../WebContent</Set>
6.
注释${project_home}/jetty/etc/jetty.xml文件中的:

<!--    
<Item>    
<New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler"/>    
</Item>    
-->    
<!--    
<Call name="addLifeCycle">    
<Arg>    
<New class="org.mortbay.jetty.deployer.WebAppDeployer">    
<Set name="contexts"><Ref id="Contexts"/></Set>    
<Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webapps</Set>    
<Set name="parentLoaderPriority">false</Set>    
<Set name="extract">true</Set>    
<Set name="allowDuplicates">false</Set>    
<Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>    
</New>    
</Arg>    
</Call>    
-->    
<!--    
<Item>    
<New class="org.mortbay.jetty.security.HashUserRealm">    
<Set name="name">Test Realm</Set>    
<Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>    
<Set name="refreshInterval">0</Set>    
</New>    
</Item>    
-->    
<!--    
<Ref id="RequestLog">    
<Set name="requestLog">    
<New id="RequestLogImpl" class="org.mortbay.jetty.NCSARequestLog">    
<Set name="filename"><SystemProperty name="jetty.logs" default="./logs"/>/yyyy_mm_dd.request.log</Set>    
<Set name="filenameDateFormat">yyyy_MM_dd</Set>    
<Set name="retainDays">90</Set>    
<Set name="append">true</Set>    
<Set name="extended">false</Set>    
<Set name="logCookies">false</Set>    
<Set name="LogTimeZone">GMT</Set>    
</New>    
</Set>    
</Ref>    
-->   
RequestLog 是访问记录,不注释也可,前提就是有logs目录。
addLifeCycle 不注释也行,前提是有webapps目录。
Test Realm 不注释也是,前提是etc目录下有realm.properties。

配置好了,现在到E:\workspace\web-demo\jetty,运行java -jar start.jar 可以启动这个项目了。

(4)使用Jetty作为嵌入式服务器
有两种方式: 一种是单独设置.另一种是结合配置文件(比较简单).
需要导入的JAR包有:
jetty-6.1.14.jar
jetty-util-6.1.14.jar
servlet-api-2.5-6.1.14.jar
jsp-2.1目录下的JAR包.
(4.1)
结合配置文件(比较简单):
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.DefaultHandler;
import org.mortbay.xml.XmlConfiguration;
import org.xml.sax.SAXException;

public class JettyServer {

        public static void main(String[] args) {
                Server server = new Server(8080);
                server.setHandler(new DefaultHandler());
                XmlConfiguration configuration = null;
                try {
                        configuration = new XmlConfiguration(
                                new FileInputStream("C:/jetty.xml"));
                } catch (FileNotFoundException e1) {
                        e1.printStackTrace();
                } catch (SAXException e1) {
                        e1.printStackTrace();
                } catch (IOException e1) {
                        e1.printStackTrace();
                }
                try {        
                        configuration.configure(server);
                        server.start();
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}
配置文件为c盘中的Jetty.xml.
复制原始的Jetty.xml,进行修改:
RequestLog 是访问记录,不注释也可,前提就是在JettyServer.java的目录中,有logs目录。
addLifeCycle ,修改webapps目录的位置。
Test Realm 不注释也是,前提是etc目录下有realm.properties。
如下:
        <Call name="addLifeCycle">
            <Arg>
                <New class="org.mortbay.jetty.deployer.WebAppDeployer">
                    <Set name="contexts"><Ref id="Contexts"/></Set>
                    <Set name="webAppDir">E:/HUANGWEIJUN/jetty-6.1.14/webapps</Set>
     <Set name="parentLoaderPriority">false</Set>
     <Set name="extract">true</Set>
     <Set name="allowDuplicates">false</Set>
                    <Set name="defaultsDescriptor">
        E:/HUANGWEIJUN/jetty-6.1.14/etc/webdefault.xml</Set>
                </New>
            </Arg>
        </Call>



        <Set name="UserRealms">
            <Array type="org.mortbay.jetty.security.UserRealm">
<!--       
                <Item>
                    <New class="org.mortbay.jetty.security.HashUserRealm">
                        <Set name="name">Test Realm</Set>
                        <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>
                        <Set name="refreshInterval">0</Set>
                    </New>
                </Item>
-->
            </Array>
        </Set>


<!--
        <Ref id="RequestLog">
            <Set name="requestLog">
                <New id="RequestLogImpl" class="org.mortbay.jetty.NCSARequestLog">
                    <Set name="filename"><SystemProperty name="jetty.logs" default="./logs"/>/yyyy_mm_dd.request.log</Set>
                    <Set name="filenameDateFormat">yyyy_MM_dd</Set>
                    <Set name="retainDays">90</Set>
                    <Set name="append">true</Set>
                    <Set name="extended">false</Set>
                    <Set name="logCookies">false</Set>
                    <Set name="LogTimeZone">GMT</Set>
                </New>
            </Set>
        </Ref>
-->

(4.2)
不用配置文件:
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;
import org.mortbay.thread.BoundedThreadPool;

public class JettyServer2 {
    public static void main(String[] args) throws Exception {    
                     // Jetty HTTP Servlet Server.    
                     Server server = new Server();    
                     BoundedThreadPool threadPool = new BoundedThreadPool();    
                     // 设置线程池    
                     threadPool.setMaxThreads(100);    
                     server.setThreadPool(threadPool);    
                     // 设置连接参数    
                     Connector connector = new SelectChannelConnector();    
                     // 设置监听端口    
                     connector.setPort(8000);    
                     // 为服务设置连接器    
                     server.setConnectors(new Connector[] { connector });    
                     WebAppContext context = new WebAppContext();    
                     // 设置contextPath如:[url]http://localhost:8000/test...    [/url]
                     context.setContextPath("/jason");    
                     // 启动的war包的位置    
                     context.setWar("E:/HUANGWEIJUN/jetty-6.1.14/webapps/jason");    
                     server.addHandler(context);    
                     server.setStopAtShutdown(true);    
                     server.setSendServerVersion(true);    
                     server.start();    
                     // 将服务添加到连接池中    
                     server.join();    
             }    
     }

以上两种方式,当运行相关的JAVA类时,即可启动Jetty服务器,可以访问服务器中webapps中的内容.

(5)Jetty 的安全性
为了防止任何人都有权限去关闭一个已经开启的 Jetty 服务器, 我们可以通过在启动 Jetty 服务器的时候指定参数来进行控制,使得用户必须提供密码才能关闭 Jetty 服务器,启动 Jetty 服务器的命令如下所示:
java -DSTOP.PORT=8079 -DSTOP.KEY=mypassword -jar start.jar
这样,用户在停止 Jetty 服务器的时候,就必须提供密码“mypassword”。

-D<name>=<value>
               set a system property

(6)Jetty 通过JNDI配置数据源(暂略)
分享到:
评论

相关推荐

    jetty快速入门与嵌入使用

    jetty快速入门与嵌入使用,简单、易懂,轻松学习!

    jetty 入门实例

    jetty 超轻松入门,按步奏就可以学习,下载就可以运行

    java后端源码-dwb:Dojo1-DojoWebBuilder

    java原始源码Dojo Web Builder Dojo Web Builder 为 dojo 构建系统提供了一个 Web 界面,允许用户仅使用他们...快速入门,使用较旧的 Dojo 版本 $ mvn -Ddojo.source=/some/path/to/dojo-1.5-source -Ddojo.version=1.

    JettyTest.rar

    JettyTest.rar中介绍了jetty的入门案例,可以快速上手jetty,不好勿喷

    springboot-demo-helloworld-jetty.rar

    # SpringBoot的特点为基于Spring的开发提供更快的入门体验开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,...

    GeoServer开发手册系列

    快速入门 6 取出源代码 7 由Maven构建 7 由Maven生成Eclipse工程文件 9 导入模块进Eclipse 9 在Eclipse中运行GeoServer 12 访问GeoServer首页 13 Maven指南 13 安装Maven 13 运行Maven 13 构建 13 跳过测试 14 离线...

    openshift-sonatype-nexus-jetty:Openshift Sonatype Nexus DIY 墨盒

    快速入门:从 GitHub 部署 在 Openshift 应用程序选项卡下,单击立即Create your first application now链接或Add Application按钮。 创建一个Do-It-Yourself 0.1应用程序。 选择您的公共 URL 后,粘贴 GitHub ...

    spring5-hibernate5-with-spring-security

    配置Maven 如果尚未这样做,则必须在测试快速入门之前先 。2.使用Web配置文件启动JBoss WildFly 打开命令行,然后导航到JBoss服务器目录的根目录。 下面显示了使用Web配置文件启动服务器的命令行: For Linux: JBOSS...

    轻量级JavaWeb框架Fast-FrameWork.zip

    快速入门 1. 必备环境 Git 环境搭建 Maven 环境搭建 2. 下载 fast-framework 项目及 sample 案例 git clone https://github.com/JeffLi1993/fast-framework.git 3. ...

    samplewar

    可以使用一个目标来构建和部署该示例: mvn -Pf8-local-deploy当示例在fabric8中运行时,您可以使用OpenShift客户端工具检查状态列出所有正在运行的吊舱: oc get pods然后找到运行此快速入门的Pod

    jacklyn-app:Jacklyn入门应用程序

    Jacklyn Codebase Starter-Java应用程序该入门程序提供了一个项目模板,用于使用Jacklyn Codebase构建应用程序,该程序将在JVM中作为Java可执行文件运行。 在Java 7、8、9和10上运行。嵌入式Jetty服务器用于处理所有...

    maven学习资源整理

    官方文档:apache-maven Maven快速入门 《Maven权威指南》中文版 Better_Builds_With_Maven(英文版)

    RestApiService_java:在使用Java的嵌入式Jetty服务器上使用Jersey的REST Api Web服务

    它从Spring平台的角度出发,以便新老用户都能快速找到所需的信息。 Spring Boot的主要目标是: 为所有Spring开发提供根本上更快且可广泛访问的“入门”体验。 开箱即用,但随着需求开始偏离默认值,很

    newcrawler:使用Java的免费Web抓取工具

    NewCrawler快速入门 Linux 在Centos / Fedora服务器上安装软件包: x86 curl -fsSL | SH x64 curl -fsSL | SH 在Ubuntu / Debian服务器上安装软件包: x86 curl -fsSL | SH x64 curl -fsSL | SH 在Centos...

    easyweb:网络框架

    将spring托管的bean注入到easyweborm: 提供基于nutz的ORM框架,和Easyweb web无缝集成apps: 提供的demo等appdocs: 相关设计说明文档快速入门初始化Easyweb.initialize()常见初始化时机:如果使用了spring模块,则...

    beacon-mirror:一个 Google Glass Mirror API 应用程序,用于参与和分享来自 Beacon Crawl http 的照片

    建议使用 Apache Maven 和 Tomcat 7 来运行此 Java 应用程序(而不是 Jetty,正如 Google 在其快速入门中推荐的那样)。 这部分是因为应用程序的 HTTPS/SSL 要求。 要部署,请确保从与 pom.xml 文件相同的

    Grails1.1中文文档

    一个内嵌的 Jetty 容器被配置用来快速重载应用 Spring 容器内建的依赖注入技术 基于 Spring 的 MessageSource 核心概念的国际化 (i18n) 支持 基于 Spring 的抽象事务概念的事务服务层 所有这些都非常易于使用,...

    tus-java-server:在Java服务器环境中用于接收tus v1.0.0文件上传的库

    快速入门和示例tus-java-server库仅取决于Java Servlet API 3.1和某些Apache Commons实用程序库。 这意味着(从理论上来说)您可以在任何现代Java Web应用程序服务器(例如Tomcat,JBoss,Jetty)上使用此库。默认...

    演示2

    它是学习入门的快速阅读,而不是有关如何设计应用程序的示例。 请注意,此示例使用并要求Java 8才能运行。 从命令行运行示例 $ mvn jetty:run 打开 在IntelliJ IDEA 14中导入 这些说明已在IntelliJ IDEA 14 CE上...

    devops_l

    它是学习入门的快速阅读,而不是有关如何设计应用程序的示例。 请注意,此示例使用并要求Java 8才能运行。 从命令行运行示例 $ mvn jetty:run 打开 在IntelliJ IDEA 14中导入 这些说明已在IntelliJ IDEA 14 CE上...

Global site tag (gtag.js) - Google Analytics