设为首页 收藏本站
查看: 2565|回复: 0

[经验分享] Jersey +jetty 实现微服务(一)

[复制链接]

尚未签到

发表于 2017-3-1 08:52:59 | 显示全部楼层 |阅读模式
  微服务:
  传输协议基本都是http,数据序列化,协议层目前protocol buffer,Json, xml,Java序列化,最多使用Json。实现以上二点并不难,spring 就可以,但spring 的初衷是为了搞一套简化web开发,微服务最大特点,快速开发,持续交付,快速部署,
  Jersey+Jetty ,正是符合这个特点。
  Jersey:
  Jersey RESTful 框架是开源的RESTful框架, 实现了 JAX-RS 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发。
    


DSC0000.gif DSC0001.gif


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来完成的。
  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实现
     DSC0002.png
  





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
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348577-1-1.html 上篇帖子: jetty加载spring-context容器源码分析 下篇帖子: Jetty 的工作原理以及与 Tomcat 的比较
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表