1.传统的JEE Web Server

传统的JEE中,如果我们想要部署一个Web Application,我们需要首先安装一个Container Server,如JBoss,WebLogic,Tomcat等。在安装这些Container Server作为我们的开发或者部署环境时,我们还需要注意配置的一致性。

配置好Container Server以后,如果我们想开发一个Web Application,我们先吭哧吭哧写好web.xml配置文件,其实大部分时间我们也不会自己写,都是东抄抄西抄抄。然后再开始写servlet部分的代码什么的。最后把代码打包成war/ear包,部署到container中跑起来。如果你运气好,程序运行正常,那还好。如果出现了bug,那你还需要吭哧吭哧的重新部署,把Remote Debug起起来。反复这样,直到正确为止。

 在传统的server中提供了过多的功能,不管你是写一个Hello World的例子,还是做一个很复杂的应用,一大堆的功能都摆在那里。而在进行redeploy的时候,还可能出现PermGem这样的问题。

 这不禁让我们产生了一个疑问:难道我们就不能像写一个Main函数一样写一个Web Server吗?不能像启动一个普通的jar包一样启动Web应用吗?

2.Jetty Embedded Server

  

  Don't deploy your application into Jetty, deploy Jetty in your application. -- Jetty

使用Jetty Embedded Server,不再需要繁琐的Container Server,你需要的只是一个Jetty的jar包。一个最简单的java Web Server如下:

public class SimpleServer {
    public static void main(String[] args) throws Exception {
        final Server server = new Server(8080);
        server.start();
        server.join();
    }
}

Server类是由Jetty Embedded Server提供的,启动一个Server,有它就足够了。我们要运行一个Server,debug一个Server都变得简单了很多。

进一步定义一个Handler用来处理请求:

public class SimpleServer {
    public static void main(String[] args) throws Exception {
        final Server server = new Server(8080);
        server.setHandler(new HelloHandler());
        server.start();
        server.join();
    }
}

class HelloHandler extends AbstractHandler {
       @Override
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
       baseRequest.setHandled(true);
        response.getWriter().println("Hello, your request path is " + target);
        }
}

这个可以用于处理一个Handler的情况,当有多个Handler的时候,需要定义Context或者Handler Collection。这里就不再深入展示了更多的可以参考下面提供的网址。总的来说,可以看见Embedded Server是一种更轻量级的部署方案,同时也是一种更轻量级的开发方案。

参考:https://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty

3.更多

正是因为Jetty Embedded Server提供了一种更轻量级的解决方案,所以很多快速开发框架都采用了Jetty,而不是传统的如Tomcat,JBoss等Server容器。如果有兴趣,可以了解如下开发工具:

  SimpleWeb4j:https://github.com/ybonnel/SimpleWeb4j,在Embedded Jetty上再做了一次封装,更容易的进行开发,同时提供了如REST Resource的定义借口。

  Dropwizard:http://dropwizard.codahale.com/,这个就不说了,没看过的自己都去看下吧。

可能有人会觉得说,用这个用那个其实都差不多。其实不然,用Embedded Jetty Server是一种更精益的方法,你仅仅使用你需要的,这样的Web开发方法更轻,更灵活。也需要问,更轻更灵活有什么用?好问题,如果我不是很懒的话,后面的博客应该会讲。

转载于:https://www.cnblogs.com/riasky/p/3465152.html

[置顶] Embedded Server:像写main函数一样写Web Server相关推荐

  1. Python 为什么没有 main 函数?为什么我不推荐写 main 函数?

    毫无疑问 Python 中没有所谓的 main 入口函数,但是网上经常看到一些文章提"Python 的 main 函数"."建议写 main 函数"-- 有些人 ...

  2. linux 为什么 c语言,为什么C程序里一定要写main函数

    为什么C程序里一定要写main函数 一. 学习过程 编写程序f.c: 对其进行编译,正常通过,再对其进行连接,出现错误: 显示的出错信息为: 翻译成中文是:在c0s模块没有定义符号'_main'. 那 ...

  3. 为什么c程序里一定要写main函数

    一. 学习过程 编写程序f.c: 对其进行编译,正常通过,再对其进行连接,出现错误: 显示的出错信息为: 翻译成中文是:在c0s模块没有定义符号'_main'. 那么这个错误信息可能与文件c0s.ob ...

  4. C语言必须写main函数?最简单的 Hello world 你其实一点都不懂!

    我们在刚写程序的时候,第一个都是 hello world,而在这里,完整的代码就是: 我们打眼一看,其实很简单,就是引入头文件,写一个主函数,然后输出一句话,但是当我们编译出来ELF的时候,我们使用工 ...

  5. 写的函数符号表里没有_你有没有想过,C语言 main 函数到底为啥这么写?

    但凡是学过C语言的人,都知道要先写main函数,然而很多时候我们看到的main函数却各有差异,这究竟是为啥?哪种是对的呢?今天我们就来聊聊main函数. 那么main函数一共有多少个版本呢? 1.ma ...

  6. char怎么比较_C语言的 main 函数到底怎么写才是对的?

    相信各位对C语言中的 main 函数大家都再熟悉不过了,这是你学习C语言首先就要学习的东西,但是我看过很多人写的代码包括我的一些读者在main函数的写法方面版本很多,今天就跟大家聊一聊main函数到底 ...

  7. C语言 main 函数到底为啥这么写?

    但凡是学过C语言的人,都知道要先写main函数,然而很多时候我们看到的main函数却各有差异,这究竟是为啥?哪种是对的呢?今天我们就来聊聊main函数. 那么main函数一共有多少个版本呢? 1.ma ...

  8. C/C++:写代码时将数组放在main函数里面还是外面的区别

    刚开始学习的时候一直习惯起手先写main函数,然后变量什么的都写在main函数里面,也一直没有什么问题 但是开始系统性的做题的时候,发现基本上讲竞赛代码的书和博客都将数组写在main函数的外面.如果一 ...

  9. 别再写 main 方法测试了,太 Low!这才是专业 Java 测试方法!

    欢迎关注方志朋的博客,回复"666"获面试宝典 作者:Richard_Yi 来源:juejin.cn/post/6844903936869007368 前言 "If yo ...

最新文章

  1. MyBatis构建sql时动态传入表名以及字段名
  2. 【Python 爬虫】 2、HTTP基本原理
  3. c语言机器人编程软件,Coconut编程机器人软件官方版下载_Coconut编程机器人软件 v1.3.4官方版 - Win7旗舰版...
  4. [BZOJ1087][SCOI2005]互不侵犯King
  5. mysql数据库建设网站,网站设计与建设-MySQL数据库【松柏书屋】
  6. c++ const static
  7. Star sky CodeForces - 835C
  8. ssm使用全注解实现增删改查案例——DeptMapperImpl
  9. PHP的抽象类与接口
  10. 若依前端table中如何显示图片?
  11. Webb.WAVE项目开发体会与心得
  12. 【codevs1282】约瑟夫问题
  13. Redis集群生产环境高可用方案实战过程
  14. 经济学原理_宏观经济学,微观经济学合集 N.格里高利·曼昆PDF
  15. 专利基本知识及撰写要求
  16. java 上传附件_java 上传附件实现方法
  17. Pytorch3D环境血泪安装史
  18. 图扑 Web SCADA 零代码组态水泥生产工艺流程 HMI
  19. 深入了解Elasticsearch存储
  20. 举例:在从库上备份,到主库上恢复

热门文章

  1. CodeVs天梯钻石Diamond题解
  2. linux7删除网卡文件,CentOS 7下删除virbr0网卡信息
  3. JAVA数组、算法、递归
  4. Python入门-try-except
  5. 保存最大的前20项暴力--Heritage of skywalkert
  6. iis php日志查看工具,教你如何查看IIS日志
  7. UnityShader24:最简单的屏幕后处理例子
  8. Codeforces Round #162 (Div. 2): D. Good Sequences(DP)
  9. bzoj 3356: [Usaco2004 Jan]禁闭围栏(扫描线+树状数组)
  10. bzoj 3374: [Usaco2004 Mar]Special Serial Numbers 特殊编号