zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    linux下mysql命令大全
    Linux 随记
    Linux服务器部署系列之八—Sendmail篇
    Linux服务器部署系列之六—远程管理篇
    ubuntu简易教程(如何使用noi linux)
    51nod1254 最大子段和 V2 DP
    [HAOI2007]理想的正方形 st表 || 单调队列
    [LG1886]滑动窗口 单调队列
    [51nod1791] 合法括号子段 DP
    [51nod1503]猪和回文 DP
  • 原文地址:https://www.cnblogs.com/dyh004/p/10642407.html
Copyright © 2011-2022 走看看