黄振东 2016-05-03 01:14
浏览 1150

OSGI嵌入Http服务,报错Problem accessing/ProxyServlet

启动之后,在浏览器输入http://localhost:8080/demo/page/dictquery.html
结果如下所示


HTTP ERROR: 404

Problem accessing /demo/page/dictquery.html. Reason:

ProxyServlet: /demo/page/dictquery.html

Powered by Jetty://


初学者,不知道是哪个地方出问题了,具体的Activator的代码如下:

 public class Activator implements BundleActivator, ServiceListener {

    private static BundleContext context;

    private ServiceReference ref;

    private Servlet servlet;

    static BundleContext getContext() {
        return context;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.
     * BundleContext)
     */
    public void start(BundleContext bundleContext) throws Exception {

        context = bundleContext;

        // 创建Servlet对象
        servlet = new IndexServlet(context);

        // 向HttpService注册Servlet
        registerServlet();

        // 加入对HttpService的监听
        context.addServiceListener(this, "(objectClass=" + HttpService.class.getName() + ")");
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
     */
    public void stop(BundleContext bundleContext) throws Exception {
        try {
            // 注销Servlet
            unregisterServlet();
        } catch (Throwable t) {
            t.printStackTrace();
        }

        servlet = null;
        context = null;
        ref = null;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.osgi.framework.ServiceListener#serviceChanged(org.osgi.framework.
     * ServiceEvent)
     */
    public void serviceChanged(ServiceEvent event) {
        switch (event.getType()) {
        case ServiceEvent.REGISTERED:
            // HttpService注册到OSGi容器的时候,进行Servlet的注册
            registerServlet();
            break;

        case ServiceEvent.UNREGISTERING:
            // HttpService从OSGi容器注销的时候,注销Servlet
            unregisterServlet();
            break;
        }
    }

    /*
     * 注册Web应用
     */
    private void registerServlet() {
        if (ref == null) {
            ref = context.getServiceReference(HttpService.class.getName());
        }

        if (ref != null) {
            try {
                HttpService http = (HttpService) context.getService(ref);
                if (null != http) {
                    // 注册Servlet
                    http.registerServlet("/demo/servlet", servlet, null, null);

                    // 注册资源
                    http.registerResources("/demo/page", "/page", null);
                    System.out.println("注册成功");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /*
     * 卸载Web应用
     */
    private void unregisterServlet() {
        if (ref != null) {
            try {
                HttpService http = (HttpService) context.getService(ref);
                if (null != http) {
                    http.unregister("/demo/servlet");
                    http.unregister("/demo/page");
                    System.out.println("已卸载字典查询web模块!");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}


在线狂等,哪位大侠看见,求给小弟指点迷津,谢谢!

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 用visual studi code完成html页面
    • ¥15 聚类分析或者python进行数据分析
    • ¥15 逻辑谓词和消解原理的运用
    • ¥15 三菱伺服电机按启动按钮有使能但不动作
    • ¥15 js,页面2返回页面1时定位进入的设备
    • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
    • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
    • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
    • ¥20 腾讯企业邮箱邮件可以恢复么
    • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?