在开发Java web项目时候,可以在项目中嵌入Jetty服务的方式来运行web程序。

  由于最近开发web项目,自己使用的是比较旧的eclipse不支持导入tomcat来运行项目,于是就学习了下使用项目中Jetty来运行项目。

  • 采用Jetty Plugin

      在pom文件中引入Jetty Plugin配置即可:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>

    <build>

    1. <plugins>
    2. <plugin>
    3. <groupId>org.apache.maven.plugins</groupId>
    4. <artifactId>maven-compiler-plugin</artifactId>
    5. <version>3.1</version>
    6. <configuration>
    7. <source>1.7</source>
    8. <target>1.7</target>
    9. <encoding>${project.build.sourceEncoding}</encoding>
    10. </configuration>
    11. </plugin>
    12. <plugin>
    13. <groupId>org.mortbay.jetty</groupId>
    14. <artifactId>jetty-maven-plugin</artifactId>
    15. <version>8.1.15.v20140411</version>
    16. <configuration>
    17. <webAppSourceDirectory>src/main/webapp</webAppSourceDirectory>
    18. <scanIntervalSeconds>10</scanIntervalSeconds>
    19. <webAppConfig>
    20. <contextPath>/web</contextPath> //你自己的工程名称
    21. </webAppConfig>
    22. <connectors>
    23. <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
    24. <port>8080</port>
    25. <maxIdleTime>60000</maxIdleTime>
    26. </connector>
    27. </connectors>
    28. <contextHandlers>
    29. <contextHandler implementation="org.eclipse.jetty.webapp.WebAppContext">
    30. <resourceBase>${project.parent.basedir}/src/main/webapp</resourceBase>
    31. <contextPath>/web</contextPath>
    32. </contextHandler>
    33. </contextHandlers>
    34. </configuration>
    35. </plugin>
    36. </plugins>
    37. </build>

    运行时候只要maven build->输入jetty:run即可。

    这种插件方式运行的项目不支持@ServerEndpoint websocket功能,不知道是不是我这种方式使用问题还是什么,知道的指导下。我下面自制JettyServer就可以支持websocket,目前我开发的时候采用的方式。

  • 自制Jetty服务类

      这种方式可以支持websocket,如果项目中需要使用到可以试试这种。

      首先pom.xml引入jetty的依赖:

    1. <dependency>
    2. <groupId>org.eclipse.jetty.aggregate</groupId>
    3. <artifactId>jetty-all</artifactId>
    4. <version>9.2.14.v20151106</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>javax.servlet</groupId>
    8. <artifactId>javax.servlet-api</artifactId>
    9. <version>3.1.0</version>
    10. </dependency>
    11. <dependency>
    12. <groupId>org.eclipse.jetty</groupId>
    13. <artifactId>jetty-jsp</artifactId>
    14. <version>9.2.15.v20160210</version>
    15. </dependency>

     接下来自己写一个JettyServer类:我自己的完整代码如下

    1. import javax.websocket.server.ServerContainer;
    2.  
    3. import org.eclipse.jetty.server.Server;
    4. import org.eclipse.jetty.webapp.WebAppContext;
    5. import org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer;
    6. import org.json.JSONObject;
    7.  
    8. import com.web.test.MyWebSocket;
    9.  
    10. public class JettyServer {
    11. public static void main(String[] args) {
    12. int port = 8080;
    13. Server server = new Server(port);
    14. WebAppContext webAppContext = new WebAppContext("webapp","/web");
    15.  
    16. webAppContext.setDescriptor("webapp/WEB-INF/web.xml");
    17. webAppContext.setResourceBase("src/main/webapp");
    18. webAppContext.setDisplayName("web");
    19. webAppContext.setClassLoader(Thread.currentThread().getContextClassLoader());
    20. webAppContext.setConfigurationDiscovered(true);
    21. webAppContext.setParentLoaderPriority(true);
    22.  
    23. server.setHandler(webAppContext);
    24. System.out.println(webAppContext.getContextPath());
    25. System.out.println(webAppContext.getDescriptor());
    26. System.out.println(webAppContext.getResourceBase());
    27. System.out.println(webAppContext.getBaseResource());
    28.  
    29. try {
    30. ServerContainer wscontainer = WebSocketServerContainerInitializer.configureContext(webAppContext);
    31. // Add WebSocket endpoint to javax.websocket layer
    32. wscontainer.addEndpoint(MyWebSocket.class); //这行是如果需要使用websocket就加上,不需要就注释掉这行,mywebsocket是自己写的websocket服务类
    33.  
    34. server.start();
    35. } catch (Exception e) {
    36. e.printStackTrace();
    37. }
    38. System.out.println("server is start, port is "+port+"............");
    39. }
    40.  
    41. }

    运行项目就只要运行这个main函数即可。

    假如正式发布需要放到tomcat里运行,需要把下面这个依赖去掉,tomcat和下面的依赖不兼容,会报错(javax.servlet.ServletException: Not running on Jetty, JSR-356 support unavailable)

    这种方式运行项目可以在开发的时候用用

    1. <dependency>
    2. <groupId>org.eclipse.jetty.aggregate</groupId>
    3. <artifactId>jetty-all</artifactId>
    4. <version>9.2.14.v20151106</version>
    5. </dependency>

web项目嵌入Jetty运行的两种方式(Jetty插件和自制Jetty服务器)的更多相关文章

  1. pb对Web Service的操作可使用两种方式实现

    从PB8.0/9.0开始,就已经提供Web Service Proxy功能,能够直接进行相关程序的编写. 但是,部分老项目使用PB6.5开发 研究后发现,其实PB6.5要操作Web Service也挺 ...

  2. 基于Maven的SpringBoot项目实现热部署的两种方式

    转载:http://blog.csdn.net/tengxing007/article/details/72675168 前言 JRebel是JavaEE中比较流行的热部署插件,可快速实现热部署,节省 ...

  3. Asp.net Web API 返回Json对象的两种方式

    这两种方式都是以HttpResponseMessage的形式返回, 方式一:以字符串的形式 var content = new StringContent("{\"FileName ...

  4. 5.Maven和Eclipse整合(两种方式进行插件的安装),Maven相关设置,Eclipse下创建Maven项目

     1  第一种方式是:在连网的情况下.通过在helpàInstall下安装. 新的地址是:http://download.eclipse.org/technology/m2e/releases 2 ...

  5. vue项目中导出PDF的两种方式

    参考大家导出的方式,基本上是如下两种: 1.使用 html2Canvas + jsPDF 导出PDF, 这种方式什么都好,就是下载的pdf太模糊了.对要求好的pdf这种方式真是不行啊! 2.调用浏览器 ...

  6. springmvc+maven搭建web项目之二 通过另一种方式配置spring

    1.创建maven web项目 2. 配置pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x ...

  7. web.config中配置数据库连接的两种方式

    在ASP.NET中有两种配置数据库连接代码的方式,它们分别是 appSettings 和 connectionStrings .在使用 appSettings 和 connectionStrings ...

  8. 【IDEA】向IntelliJ IDEA创建的项目导入Jar包的两种方式

    转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 今天用IDEA,需要导入一个Jar包,因为以前都是用eclipse的,所以对这个id ...

  9. 第一个django项目-通过命令行和pycharm两种方式

    以本机环境为例,ip地址为172.20.16.148,windows平台,虚拟环境路径为d:\VirtualEnv,项目存放位置为d:\DjangoProject 命令行方式 1.进入虚拟环境创建项目 ...

随机推荐

  1. BI之ETL学习(一)kettle

    最近开始折腾数据,起源是多业务数据源需要转换到数据分析平台.这个过程需要跨机器,跨库.同时还需要将业务数据表的内容进行转换,合并,清洗等等操作. 经过多方选型,最终决定使用kettle来作为数据抽取处 ...

  2. json对象,使用 “ . ”获取值是,不能使用变量作为属性名。

    var he={'aa':"aa",'bb':'bb'}; var chun={'cc':"aa",'dd':'mm'}; c=he.aa; n=chun.c; ...

  3. 面试常考的常用数据结构与算法(zz)

    数据结构与算法,这个部分的内容其实是十分的庞大,要想都覆盖到不太容易.在校学习阶段我们可能需要对每种结构,每种算法都学习,但是找工作笔试或者面试的时候,要在很短的时间内考察一个人这方面的能力,把每种结 ...

  4. 小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping

    三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议 ...

  5. 深入理解 GCD

    前言 首先提出一些问题: dispatch_async 函数如何实现,分发到主队列和全局队列有什么区别,一定会新建线程执行任务么? dispatch_sync 函数如何实现,为什么说 GCD 死锁是队 ...

  6. Krypton Factor

    Krypton Factor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  7. cocos2d-x回收池原理

    cocos2d-x源于cocos2d-iphone,为了与Objective-c一致,cocos2d-x也采用了引用计数与自动回收的内存管理机制. 要现实自动内存回收,需继承于cocos2d-x的根类 ...

  8. C# WinForm 中ComboBox数据绑定的问题 (转)

    来自:http://blog.sina.com.cn/s/blog_5fb9e26301013wga.html C# WinForm 中ComboBox数据绑定的问题 怎样让WinForm中的Comb ...

  9. 在openshift上创建django应用

    python 3.3 + django 1.7 一.创建新应用 $ rhc app create -a mynewapp -t python-3.3 二.在新建的目录里添加git库 $ cd myne ...

  10. [辛酸历程]在Mac中使用Python获取屏幕截图

    一.起因 最近想做个小外挂玩玩,技术倒是不难,就是通过图片匹配加上一些判断方法来刷分.但是在最不起眼(却最容易出问题)的准备阶段卡住了. 为什么卡住了呢,简单说,因为我需要获取截屏的数据,所以就要找一 ...