[置顶] Embedded Server:像写main函数一样写Web Server

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起起来诊断错误。当不能一次就完全定位问题时,你不得不反复进行这个操作。大量的时间都浪费在了,漫长的重启等待中。

  同时,不管你是写一个Hello World,还是做一个很复杂的网站,传统的Container都提供了一大堆的功能摆在那里,不管你用还是不用。


 上面的种种问题,不免会吓到一个初学者,也不免让一个有经验人的人觉得琐碎,这不禁让我们产生了一个疑问:

  难道我们就不能像写一个Main函数一样写一个Web Server吗?难道我们就不能像启动一个普通的jar包一样启动Web应用吗?


2.Jetty Embedded Server

  [置顶] Embedded Server:像写main函数一样写Web Server_第1张图片

  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提供的。可以看到,当使用Jetty的Embedded Server这种方式启动一个Server时,我们只需要在IDE中像运行一个main函数一样运行它就行了。当我们需要Debug我们的程序时,我们也不需要特殊的Remote Debug,也只是需要像Debug一般的main函数一样debug就行了。

    我们写Java的Web Server似乎回到了我们开始学习java的纯真年代。


    怎样让我们的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/,这个就不说了,没看过的自己都去看下吧。可以看看下一篇博客《Dropwizard:用Java轻轻的写一个RESTful Service》

  可能有人会觉得说,用这个用那个其实都差不多。其实不然,用Embedded Jetty Server是一种更精益的方法,你仅仅使用你需要的,这样的Web开发方法更轻,更灵活。

  

  可能你会问,更轻更灵活有什么用?我就是要整个莽的!

  当然我不能直接说你太粗鲁了,如果我不是很懒的话,后面的博客应该会讲。


你可能感兴趣的:(java,Web,server,server,embedded,jetty,Dropwizard)