• OSGI嵌入jetty应用服务器


    1、搭建osgi基础环境,参考:https://www.cnblogs.com/dyh004/p/10642383.html

    2、引入jetty相关的依赖包

    修改jetty启动端口

    3、com.kszsa.osgi.hello这个bundle中,引入相关的依赖

    4、准备静态页面

    jetty.html内容如下

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>jetty说明</title>
    </head>
    <body>
    <h2>这是jetty使用说明</h2>
    <font color="green">//用来注册诸如表态页面等等</font><br>
    registerResources(String alias, String name, HttpContext context) <br><br>
    
    <font color="green">//用来注册servlet类</font><br>
    registerServlet(String alias, Servlet servlet, Dictionary initparams, HttpContext context)
    </body>
    </html>

    5、注册静态资源,修改Activator.java

    package com.kszsa.osgi.hello;
    
    import org.osgi.framework.BundleActivator;
    import org.osgi.framework.BundleContext;
    import org.osgi.framework.ServiceReference;
    import org.osgi.service.http.HttpContext;
    import org.osgi.service.http.HttpService;
    
    public class Activator implements BundleActivator {
    
        private static BundleContext context;
        private HttpService service;
    
        static BundleContext getContext() {
            return context;
        }
    
        /**
         * 启动bundle
         */
        public void start(BundleContext bundleContext) throws Exception {
            Activator.context = bundleContext;
            ServiceReference serviceReference = bundleContext
                    .getServiceReference(HttpService.class.getName());
            service = (HttpService) bundleContext.getService(serviceReference);
    
            // 注册
            HttpContext httpContext = service.createDefaultHttpContext();
            
            // 用来注册诸如表态页面等等
            // 设置别名,所有对"/osgi"映射到"web"目录
            service.registerResources("/osgi", "/webpage", httpContext);
            
        }
    
        /**
         * 停止bundle
         */
        public void stop(BundleContext bundleContext) throws Exception {
    
            service.unregister("/osgi");
    
            Activator.context = null;
        }
    
    }

    6、启动osgi项目,查看结果,访问http://127.0.0.1:8090/osgi/jetty.html

    说明静态资源访问成功。

    7、注册servlet资源,新建servlet

    package com.kszsa.osgi.servlet;
    
    import java.io.BufferedWriter;  
    import java.io.IOException;  
    import java.io.OutputStreamWriter;  
      
    import javax.servlet.ServletException;  
    import javax.servlet.http.HttpServlet;  
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
      
    import org.osgi.framework.BundleContext;  
      
    public class PrintNameServlet extends HttpServlet{  
          
        private static final long serialVersionUID = -9080875068147052401L;  
          
        private BundleContext context;  
          
        public PrintNameServlet(BundleContext context) {  
            super();  
            this.context = context;  
        }  
      
        @Override  
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
                throws ServletException, IOException {  
            doGet(req, resp);  
        }  
          
        @Override  
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
                throws ServletException, IOException {  
              
            resp.setCharacterEncoding("UTF-8");  
              
            String name = req.getParameter("name");  
            System.out.println(name);  
              
            String s = "Hello,world!";  
            StringBuilder sb = new StringBuilder();  
            sb.append("<html><title>Response</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />");  
            sb.append("<body>");  
            sb.append(s);  
            sb.append("</body></html>");  
              
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(resp.getOutputStream(),"UTF-8"));  
            bw.write(sb.toString());  
            bw.flush();  
            bw.close();  
        }  
      
    }  

    8、修改修改Activator.java,注册servlet

    package com.kszsa.osgi.hello;
    
    import org.osgi.framework.BundleActivator;
    import org.osgi.framework.BundleContext;
    import org.osgi.framework.ServiceReference;
    import org.osgi.service.http.HttpContext;
    import org.osgi.service.http.HttpService;
    
    import com.kszsa.osgi.servlet.PrintNameServlet;
    
    public class Activator implements BundleActivator {
    
        private static BundleContext context;
        private HttpService service;
    
        static BundleContext getContext() {
            return context;
        }
    
        /**
         * 启动bundle
         */
        public void start(BundleContext bundleContext) throws Exception {
            Activator.context = bundleContext;
            ServiceReference serviceReference = bundleContext
                    .getServiceReference(HttpService.class.getName());
            service = (HttpService) bundleContext.getService(serviceReference);
    
            // 注册
            HttpContext httpContext = service.createDefaultHttpContext();
    
            // 用来注册诸如表态页面等等
            // 设置别名,所有对"/osgi"映射到"web"目录
            service.registerResources("/osgi", "/webpage", httpContext);
            
            // 注册servlet
            // 设置servlet别名,'/osgi/print"映射到servlet的实现
            service.registerServlet("/osgi/print", new PrintNameServlet(
                    bundleContext), null, httpContext);
    
        }
    
        /**
         * 停止bundle
         */
        public void stop(BundleContext bundleContext) throws Exception {
    
            service.unregister("/osgi");
    
            Activator.context = null;
        }
    
    }

    9、重启osgi,访问http://127.0.0.1:8090/osgi/print

    参考地址:https://liugang594.iteye.com/blog/1328050

  • 相关阅读:
    WCF中关于可靠会话的BUG!!
    控制并发访问的三道屏障: WCF限流(Throttling)体系探秘[下篇]
    《天使之恋》,一部重口味的纯美爱情电影
    一个关于解决序列化问题的编程技巧
    [转]Design Rules for ModelViewPresenter
    你知道Unity IoC Container是如何创建对象的吗?
    只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题
    使命必达: 深入剖析WCF的可靠会话[原理揭秘篇](上)
    回调与并发: 通过实例剖析WCF基于ConcurrencyMode.Reentrant模式下的并发控制机制
    如何编写没有Try/Catch的程序
  • 原文地址:https://www.cnblogs.com/dyh004/p/10642407.html
Copyright © 2020-2023  润新知