Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 扩展org.eclipse.equinox.http.registry.servlet不起作用_Java_Eclipse_Maven_Servlets_Osgi - Fatal编程技术网

Java 扩展org.eclipse.equinox.http.registry.servlet不起作用

Java 扩展org.eclipse.equinox.http.registry.servlet不起作用,java,eclipse,maven,servlets,osgi,Java,Eclipse,Maven,Servlets,Osgi,我正在尝试对org.eclipse.equinox.http.registry.servlet扩展点进行servlet扩展,但无法使其正常工作。我试着写下我的过程,这样也许有人能告诉我我做错了什么或我没有做什么:) 因此,首先我制作了一个带有默认servlet的jetty服务器 这是我最初的pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i

我正在尝试对org.eclipse.equinox.http.registry.servlet扩展点进行servlet扩展,但无法使其正常工作。我试着写下我的过程,这样也许有人能告诉我我做错了什么或我没有做什么:)

因此,首先我制作了一个带有默认servlet的jetty服务器

这是我最初的pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>myserver</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>myserver</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <bundle.symbolicName>myserver</bundle.symbolicName>
        <bundle.namespace>com.example</bundle.namespace>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>4.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
            <version>8.1.10.v20130312</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <executions>
                    <execution>
                        <id>bundle-manifest</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>manifest</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <manifestLocation>META-INF</manifestLocation>
                    <instructions>
                        <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
                        <Bundle-Version>${pom.version}</Bundle-Version>
                        <Bundle-Activator>${bundle.namespace}.myserver.App</Bundle-Activator>
                        <Import-Package>
                            org.osgi.framework,
                            javax.servlet,
                            javax.servlet.http,
                            org.eclipse.jetty.server,
                            org.eclipse.jetty.servlet
                        </Import-Package>
                        <Require-Bundle>
                        </Require-Bundle>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
这是我的servlet:

package com.example.myserver;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorldServlet extends HttpServlet {

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("Hello from HelloWorldServlet");
    }
}
然后,我使用以下捆绑包启动配置:

javax.servlet,
org.apache.felix.gogo.command,
org.apache.felix.gogo.runtime,
org.apache.felix.gogo.shell,
org.eclipse.equinox.console,
org.eclipse.jetty.continuation,
org.eclipse.jetty.http,
org.eclipse.jetty.io,
org.eclipse.jetty.security,
org.eclipse.jetty.server,
org.eclipse.jetty.servlet,
org.eclipse.jetty.util,
org.eclipse.osgi
现在当我输入url
http://localhost:8080/test
然后一切正常,我的hello文本出现

现在我尝试用org.eclipse.equinox.http.registry.servlet的扩展做同样的事情

以下是我的工作:

1) 在pom.xml下添加org.eclipse.equinox.http.registry以要求捆绑包

2) 打开清单,选择扩展选项卡,单击添加,选择org.eclipse.equinox.http.registry.servlets扩展点,添加,在扩展详细信息下将类com.example.myserver.HelloWorldServlet和/test2作为别名

生成了以下plugin.xml:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.equinox.http.registry.servlets">
      <servlet
            alias="/test2"
            class="com.example.myserver.HelloWorldServlet">
      </servlet>
   </extension>

</plugin>
然后,当我运行配置时,我得到一个警告:
!消息包“myserver”中的扩展和扩展点被忽略。捆绑包未标记为singleton。

。。。因此,在pom.xml中,我改为:

<Bundle-SymbolicName>${bundle.symbolicName};singleton:=true</Bundle-SymbolicName>
${bundle.symbolicName};单例:=true
。。。再次运行,没有错误,一切看起来都很好

如果我运行
http://localhost:8080/test
一切正常。 如果我运行
http://localhost:8080/test1
我收到一个未找到的错误

也许我没做什么?
我希望我没有讲太多细节,但我真的希望有人能帮我解决这个问题。谢谢!:)

您放错地方了,因为描述了alias=“/test2”,并且 试一试


在第一个示例中,应该使用

,先使用server.start(),然后使用server.join()。我相信join()会阻止调用线程,直到服务器关闭。在BundleActivator启动方法中,这是一件非常糟糕的事情。。。你窃取了启动程序的线程,实际上会阻止OSGi框架正常启动。谢谢你的支持,我删除了join,但问题仍然存在。你能看到我的代码或工作流程还有什么问题吗?不太清楚,但我不熟悉这个扩展点。然而,我想知道你为什么要用一个扩展点来做这件事?这似乎比仅仅将Servlet作为服务发布和使用Felix bundleOk要做的工作多得多,我已经开始工作了。看来我真的做错了什么事(而且很愚蠢:)。我根本不需要自己启动jetty服务器。以下是帮助我的教程:。只需注意,最后提到的org.mortbay.jetty bundle已更改为org.eclipse.jetty。无论如何,据我所知,其中一个包以某种方式为我启动了jetty服务器,我所要做的就是编写一个扩展并指向我的servlet。jetty服务器的具体启动方式/位置我不知道,但我会尽力找出答案。我不知道这是否只是一个打字错误,所以我只把它作为评论发布。
org.eclipse.equinox.http.registry
org.eclipse.osgi.service,
org.eclipse.osgi.services,
org.eclipse.equinox.common,
org.eclipse.equinox.registry,
javax.xml
<Bundle-SymbolicName>${bundle.symbolicName};singleton:=true</Bundle-SymbolicName>