`
chyou1988
  • 浏览: 7186 次
社区版块
存档分类
最新评论

jetty使用

 
阅读更多

引入jetty依赖

<dependency>
        <groupId>org.eclipse.jetty.aggregate</groupId>
        <artifactId>jetty-webapp</artifactId>
        <version>${jetty.version}</version>
        <scope>test</scope>
</dependency>
<dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-jsp</artifactId>
        <version>${jetty.version}</version>
        <scope>test</scope>
</dependency>

 

配置maven jetty插件

<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
<configuration>
	<scanIntervalSeconds>10</scanIntervalSeconds>
	<stopPort>9966</stopPort>  
       	<stopKey>foo</stopKey>
	<useTestClasspath>true</useTestClasspath>
	<webAppConfig>
		<contextPath>/${project.artifactId}</contextPath>
	</webAppConfig>
	<connectors>  
            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">  
                <port>8088</port>  
                <maxIdleTime>60000</maxIdleTime>  
            </connector> 
        </connectors> 
        <systemProperties>
		<systemProperty>
			<name>spring.profiles.active</name>
			<value>development</value>
		</systemProperty>
	</systemProperties> 
</configuration>
</plugin>

( 1 )配置 Jetty 容器(支持所有 goals )

<connectors> :可选参数,配置org.eclipse.jetty.server.Connector( Jetty 端口监听器)列表,如果不指定该参数,将会连接默认的 8080 端口。
<jettyXml> :可选参数,指定 Jetty 配置文件的路径
<scanIntervalSeconds>:可选参数,配置 Web 应用扫描的暂停时间, Web 应用扫描如果发现修改了程序,会自动重新部署。该参数默认值为 0 ,即不启动热部署
<systemProperties>:可选参数,设置插件执行时的系统参数,比如上面的配置示例中指定了 spring 的 profile 为development,如果不设置该参数,就需要配置 maven 与 spring 的 profile 一致,同时在 mvn 命令中增加 -P development选项,或者直接在 spring 配置文件中设置spring.profiles.active为development
<systemPropertiesFile>:可选参数,设置系统参数配置文件的位置,将会批量执行其中的系统参数配置
<loginServices>:可选参数,配置org.eclipse.jetty.security.LoginService实现类的列表。
<requestLog>:可选参数,配置请求日志接口:org.eclipse.jetty.server.RequestLog的实现类,配置请求日志的处理格式 

( 2 )配置 Web 应用程序(不支持run-forked、stop两个 goals )
<webApp>:从jetty6.1.6rc0起使用webAppConfig, web 应用程序配置根节点
<contextPath>:设置 web 应用程序的 context 路径,默认情况下,它被设置成该项目的pom.xml的<artifactId>
<descriptor>:设置 web 应用程序主配置文件 web.xml 的路径,默认该配置文件位于 WEB-INF 目录下
<defaultsDescriptor>:设置先于 web.xml 执行的webdefault.xml配置文件的路径
<overrideDescriptor>:设置在 web.xml 读取之后执行的配置文件,使用该参数可以覆盖或增加 web.xml 中的配置
<tempDirectory>: Web 应用的临时目录, Jetty 可以在此目录编译 jsp 文件或者复制 jar 包,默认路径为${project.build.outputDirectory}/tmp
<baseResource>:指定 Web 应用静态资源所在的路径,默认路径为src/main/webapp
<resourceBases>:指定多个 Web 应用静态资源所在的路径,使用逗号分隔
<baseAppFirst>:可选参数,默认值为 true ,控制是否可以在 Web 应用的原始资源之前或之后叠加多个 war 包
<jettyEnvXml>:可选参数,指定jetty-env.xml配置文件的路径
<containerIncludeJarPattern>:jetty-8.1.x之后的版本可以使用,可选参数,配置加载到 Jetty 容器 Classloader 中的 Jar 包的路径或匹配模式,符合条件的 jar 包将会被检测META-INF、资源、 tld 和类的继承关系
<webInfIncludeJarPattern>:jetty-8.1.x之后的版本可以使用,可选参数,配置加载到 Web 应用程序的 Classloader (WEB-INF classpath )中的 Jar 包的路径或匹配模式,符合条件的 jar 包将会被检测META-INF、资源、 tld 和类的继承关系
<contextXml>:可选参数,指定context xml配置文件的路径

嵌入式jetty

package org.springside.examples.quickstart;
    
    import java.io.File;
    import java.net.URL;
    import java.security.ProtectionDomain;
    
    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.webapp.WebAppContext;
    
    /**
     * Main Class for standalone running.
     *
     * @author calvin
     */
    public class Main {
    
        public static void main(String[] args) throws Exception {
    
            String contextPath = "/";
            int port = Integer.getInteger("port", 8080);
    
            Server server = createServer(contextPath, port);
    
            try {
                server.start();
                server.join();
            } catch (Exception e) {
                e.printStackTrace();
                System.exit(100);
            }
        }
    
        private static Server createServer(String contextPath, int port) {
            // use Eclipse JDT compiler
            System.setProperty("org.apache.jasper.compiler.disablejsr199", "true");
    
            Server server = new Server(port);
            server.setStopAtShutdown(true);
    
            ProtectionDomain protectionDomain = Main.class.getProtectionDomain();
            URL location = protectionDomain.getCodeSource().getLocation();
    
            String warFile = location.toExternalForm();
            WebAppContext context = new WebAppContext(warFile, contextPath);
            context.setServer(server);
    
            // 设置work dir,war包将解压到该目录,jsp编译后的文件也将放入其中。
            String currentDir = new File(location.getPath()).getParent();
            File workDir = new File(currentDir, "work");
            context.setTempDirectory(workDir);
    
            server.setHandler(context);
            return server;
        }
    }

 this.class.getProtectionDomain().getCodeSource().getLocation()
如果直接执行.class文件那么会得到当前class的绝对路径。
如果封装在jar包里面执行jar包那么会得到当前jar包的绝对路径。

通过以上配置,已经可以在 Web 应用程序内嵌入 Jetty 容器了,但还需要注意以下几点
Maven Pom 中的 Jetty 依赖注意 scope 修改为provided,防止 Jetty 的 Jar 包被打到WEB-INF/lib中。
如果需要解析 jsp 页面,需要在依赖中加入jsp-2.1-glassfish包的引用,注意其 scope 不能设置为provided

<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jsp-2.1-glassfish</artifactId>
    <version>2.1.v20100127</version>
</dependency>

 

简单:

运行war:

    package com.google.code.garbagecan.jettystudy.sample6;  
      
    import org.eclipse.jetty.server.Server;  
    import org.eclipse.jetty.webapp.WebAppContext;  
      
    public class WebAppContextWithWarServer {  
        public static void main(String[] args) throws Exception {  
            Server server = new Server(8080);  
      
            WebAppContext context = new WebAppContext();  
            context.setContextPath("/myapp");  
            context.setWar("E:/share/test/struts2-blank.war");  
            server.setHandler(context);  
      
            server.start();  
            server.join();  
        }  
    }  

 运行webApp

    package com.google.code.garbagecan.jettystudy.sample6;  
      
    import org.eclipse.jetty.server.Server;  
    import org.eclipse.jetty.webapp.WebAppContext;  
      
    public class WebAppContextWithFolderServer {  
        public static void main(String[] args) throws Exception {  
            Server server = new Server(8080);  
      
            WebAppContext context = new WebAppContext();  
            context.setContextPath("/myapp");  
            context.setDescriptor("E:/share/test/struts2-blank/WEB-INF/web.xml");  
            context.setResourceBase("E:/share/test/struts2-blank");  
            context.setParentLoaderPriority(true);  
            server.setHandler(context);  
      
            server.start();  
            server.join();  
        }  
    }  

 

分享到:
评论

相关推荐

    Jetty使用总结

    ### Jetty使用总结 #### 一、Jetty简介与优势 Jetty是一款开源的轻量级Web服务器,它由Eclipse基金会维护。相比于其他流行的Web服务器如Tomcat,Jetty以其小巧灵活著称,体积仅有几百KB,非常适合嵌入到项目中作为...

    Java Web服务器Jetty使用手册.doc

    Java Web服务器Jetty使用手册

    Jetty9 配置使用HTTPS证书

    配置Jetty9服务器使用HTTPS证书的过程涉及多个步骤,包括申请证书、转换证书格式、以及配置Jetty服务器本身。以下详细描述这些步骤。 首先,申请证书部分通常需要借助第三方服务商,如阿里云、腾讯云等,这些服务商...

    jetty-6.1.26.zip

    6. **线程模型**:Jetty使用一种高效的线程模型,名为“Continuation”,它可以异步处理请求,避免阻塞主线程,提高服务器的并发处理能力。 7. **部署和管理Web应用**:Jetty支持多种方式部署Web应用,包括WAR文件...

    Jetty的简单使用示例

    Jetty使用Servlet容器来处理HTTP请求。首先,你需要创建一个`ServletHandler`,然后注册你的Servlet。这里假设你有一个名为`MyServlet`的Servlet: ```java ServletContextHandler context = new ...

    jetty 服务器使用

    Jetty使用多种连接器(如HTTP、HTTPS)处理网络通信。默认的HTTP连接器是NIO,可以配置为EPOLL或ASYNC。同时,Jetty的线程池管理机制允许用户自定义线程池配置,以优化性能。 7. **安全与认证** Jetty支持基本的...

    jetty的使用

    NULL 博文链接:https://szcs10138456.iteye.com/blog/1011072

    解决jetty8内存溢出版本

    3. **合理配置线程池**:Jetty使用线程池处理请求。过大的线程池可能导致内存消耗增加,而过小的线程池可能限制服务处理能力。根据服务器硬件和应用需求,合理设定线程池的最小、最大线程数及超时时间。 4. **使用...

    jetty6 指南书

    - **配置文件**:Jetty使用XML配置文件来定制服务器行为,包括Connector、Handler、Server等。 - **部署Web应用**:支持静态和动态部署,包括Servlet2.5的新特性。 6. **Jetty架构**: - **Connector**:负责...

    jetty相关所有jar包

    6. **线程池**: Jetty使用自定义的线程池设计,可以根据应用需求动态调整线程数量,以平衡资源消耗和响应速度。 7. **部署工具**: Jetty提供了方便的应用部署和管理工具,如`jetty-runner`,可以快速启动一个包含...

    jetty源代码下载

    - **线程模型**:Jetty使用自定义的线程池模型,称为`QueuedThreadPool`,它优化了并发处理,提供了良好的性能和可扩展性。 - **Servlet容器**:Jetty作为Servlet容器,支持Servlet 2.5到5.0的规范,可以托管任何...

    jetty相关

    - **线程模型**:Jetty使用了一种高效的线程池模型,确保了高并发下的性能表现。 - **零配置**:Jetty可以通过Java代码或XML配置文件进行配置,甚至可以完全不配置,即零配置启动。 - **嵌入式**:Jetty可以轻松...

    jetty-6.1.26源码

    3. **线程模型**:Jetty使用了高效的线程模型来处理并发请求。例如,`org.eclipse.jetty.util.thread`包下的`QueuedThreadPool`是Jetty的默认线程池,它优化了线程的创建和销毁,提高了服务器性能。 4. **连接器...

    jetty-6.1.2rc2.zipjetty-6.1.2rc2.zipjetty-6.1.2rc2.zipjetty-6.1.2rc2.zip

    5. **线程模型**:Jetty使用一种高效的线程模型,降低了线程创建和销毁的开销,提高了并发性能。 6. **静态文件服务**:Jetty能够快速地处理静态资源,如HTML、CSS和JavaScript文件。 7. **Servlet和Filter支持**:...

    jetty 例子, 就一个demo 还有jar

    这个压缩包文件提供的可能是一个简单的Jetty使用示例,帮助初学者理解如何在Eclipse环境中配置和运行Jetty。 首先,让我们深入了解一下Jetty。Jetty是开源的,由Eclipse基金会维护,符合Java Servlet和JSP规范。它...

    jetty指导书

    针对Jetty使用过程中常见的问题,提供详细的解答和解决方案。 --- 综上所述,Jetty是一个功能强大且灵活的Web服务器和容器,它不仅支持最新的Web技术,还提供了许多高级特性,如异步处理、高性能IO等。通过深入...

    Jetty 9.4.6 jar包

    9. **日志与监控**: Jetty使用SLF4J进行日志记录,可以与各种日志框架集成,如Logback或Log4j。同时,可以通过JMX进行服务器状态监控。 10. **版本兼容性**: Jetty 9.4.6与Java 8及更高版本兼容,确保了现代Java...

    jetty 事例

    - 线程池:Jetty使用自定义的NIO线程池进行异步I/O处理,提高并发性能。 - 配置JVM:适当调整JVM参数,如堆大小、垃圾回收策略,可以进一步提升Jetty的性能。 7. **监控与管理** - JMX支持:Jetty支持JMX(Java ...

    jetty-distribution-9.4.31.v20200723_安装包.rar

    4. **线程模型优化**:Jetty使用了一种名为“NIO2”的高效I/O模型,它减少了线程上下文切换,提高了并发处理能力。 5. **嵌入式使用**:Jetty可以很容易地被嵌入到其他Java应用程序中,无需额外的服务器进程,这...

    jetty-distribution-9.1.0.v20131115

    3. **高性能**:Jetty使用NIO(非阻塞I/O)模型,提高了并发处理能力,适用于高流量的Web应用。 4. **模块化**:Jetty的组件设计允许用户只选择需要的部分,避免了不必要的资源消耗。 5. **兼容性**:Jetty完全支持...

Global site tag (gtag.js) - Google Analytics