zoukankan      html  css  js  c++  java
  • Jersey +jetty 实现微服务(一)

    微服务:

       传输协议基本都是http,数据序列化,协议层目前protocol bufferJson, xml,Java序列化,最多使用Json。实现以上二点并不难,spring 就可以,但spring 的初衷是为了搞一套简化web开发,微服务最大特点,快速开发,持续交付,快速部署,

       Jersey+Jetty ,正是符合这个特点。

    Jersey

        Jersey RESTful 框架是开源的RESTful框架, 实现了 JAX-RS 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service client 开发。

      

     1 @Path("/base")
     2 public class BaseServer  {
     3 
     4 
     5     @Path("/add")
     6     @GET
     7     @Produces(MediaType.TEXT_PLAIN)
     8     @Override
     9     public String add(@QueryParam("x") int x, @QueryParam("y") int y) {
    10         return "" + (x + y);
    11     }
    12 }
    View Code

    Jetty:

       Jetty 是一个开源的servlet容器,项目可以不用打成war包,可以使用jetty这样嵌入式的serlvet容器,它比tomcat更轻量 Jetty9支持最新NIO,不再支持BIO

       Jetty Server两个重要的概念一个是Handler,一个是Connector。嵌入一个jetty服务一般会有下面几步,创建Server,加载Connectors,加载handlers,加载Servlets等,启动服务start,最后加入服务器join

        一个Jetty Server可以看成由一下几部分组成,其中Connector负责接收客户端的HTTP请求,请求的处理是由Handler来完成的。

        HandlerJetty中是一个非常重要的东西,Jetty内部实现了一些Handler,可以分为一下几类:

        1.协调Handler:负责将request路由到其他HandlerHandler(如:HandlerConnection, ContextHandlerConnection

        2.过滤Handler:负责向request中设置一些参数,然后再把请求转交给其他Handler(如:HandlerWapper, ContextHandler,        SessionHandler

        3.生成Handler:负责生成响应的内容(如:ResourceHandler, ServletHandler

        HandlerWrapper,AbstractHandler Server类就是实现HandlerWrapper,其它一些自定Handler通过继承AbstractHandler实现

     

     

     1 public class HelloHandler extends AbstractHandler {
     2     public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
     3             throws IOException, ServletException {
     4         response.setContentType("text/html;charset=utf-8");
     5         response.setStatus(HttpServletResponse.SC_OK);
     6         baseRequest.setHandled(true);
     7         response.getWriter().println("<h1>Hello World1</h1>");
     8         response.getWriter().println("Request url: " + target);
     9     }
    10 
    11     public static void main(String[] args) throws Exception {
    12         Server server = new Server();
    13         ServerConnector serverConnector = new ServerConnector(server);
    14         serverConnector.setPort(8031);
    15         //ServletContextHandler servletContextHandler = new ServletContextHandler();
    16         server.setHandler(new HelloHandler());
    17         server.addConnector(serverConnector);
    18         //servletContextHandler.addServlet(new ServletHolder(new HelloHandler()),"/hello");
    19         server.start();
    20         server.join();
    21 
    22     }
    23 }
    View Code

        ServerConnector 是Jetty 9 提供NIO方式

     Jsery+Jetty如何接合

        jsery中有一个类ServletContainer,它直接从HttpServlet继承而来,直接插入Jetty ServletContextHandler.addServlet方法中。ServletContainer构造方法会要求注入一个实现Application类,这个类用来扫描包,它service方法拦截了全部请求,并把它转向Jsery对应类方法中

      

     1 private static final ResourceConfig resourceConfig = new MyResourceConfig("com.test");
     2     public static void main(String[] args) throws Exception {
     3         Server server = new Server();
     4         ServerConnector serverConnector = new ServerConnector(server);
     5         serverConnector.setPort(8012);
     6         ServletContextHandler servletContextHandler = new ServletContextHandler();
     7 
     8         ServletContainer servletContainer = new ServletContainer(resourceConfig);
     9         server.addConnector(serverConnector);
    10 
    11         servletContextHandler.addServlet(new ServletHolder(servletContainer),"/*");
    12         server.setHandler(servletContextHandler);
    13         server.start();
    14         server.join();
    15 
    16     }
    17     @Path("/add")
    18     @GET
    19     @Produces(MediaType.TEXT_PLAIN)
    20     public String add(@QueryParam("x") int x, @QueryParam("y") int y) {
    21         return "" + (x + y);
    22     }
    View Code

     包扫描方式 使用jersey 注解包扫描类PackageNamesScanner

     

  • 相关阅读:
    Enterprise Library 4.1学习笔记2数据访问程序块
    [转]Using The Silverlight DataGrid
    Enterprise Library 4.1学习笔记6加密应用程序块
    servU 7以上版本pasv端口的设置及中文乱码问题
    [转]深度解析 TypeConverter & TypeConverterAttribute
    MVC RC2中关于HtmlHelper给DropDownList设置初始选中值的问题
    [转]php5+apache2+mysql5最新环境配置
    WCF运行错误:“此集合已经包含方案 http 的地址”的解决办法
    silverlight + wcf(json格式) + sqlserver存储过程分页
    [转贴]Http 请求处理流程
  • 原文地址:https://www.cnblogs.com/shouhongxiao/p/5824961.html
Copyright © 2011-2022 走看看