微服務:
傳輸協議基本都是http,數據序列化,協議層目前protocol buffer,Json, 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 }
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來完成的。
Handler在Jetty中是一個非常重要的東西,Jetty內部實現了一些Handler,可以分為一下幾類:
1.協調Handler:負責將request路由到其他Handler的Handler(如: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 }
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 }
包掃描方式 使用jersey 注解包掃描類PackageNamesScanner