Grizzly 2.3.11 - CLStaticHttpHandler - 在jar中打包时无法读取资源文件夹下的index.html

时间:2014-05-22 16:46:09

标签: maven jersey-2.0 grizzly

我想在jar中托管静态网页。所以我使用Maven来打包包含一个带有index.html网页的文件夹的java项目。我的代码:

server = GrizzlyHttpServerFactory.createHttpServer(baseUri, resourceConfig, start);
server.getServerConfiguration().addHttpHandler();new CLStaticHttpHandler(Server.class.getClassLoader(), myfolder/), /mysite)

当我在IDE中访问http://localhost:8080/mysite/时,处理程序能够读取index.html。但是如果我使用mvn包并运行jar文件,http://localhost:8080/mysite/不起作用,除非我在浏览器中指定http://localhost:8080/mysite/index.html以使其工作。网页文件夹位于src/main/resources下,打开jar时位于根路径下。

非常感谢你!

补充:要重现这一点,您可以通过编写pom.xml来创建Maven项目并添加类似

的内容
<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>simple-service</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>simple-service</name>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.glassfish.jersey</groupId>
                <artifactId>jersey-bom</artifactId>
                <version>${jersey.version}</version>
                <type>pom</type>
                <scope>import</scope>     
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>

            <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-grizzly2-servlet</artifactId>
            <version>${jersey.version}</version>
        </dependency>

        <dependency>
      <groupId>com.wordnik</groupId>
      <artifactId>swagger-jersey2-jaxrs_2.10</artifactId>
      <scope>compile</scope>
      <version>1.3.4</version>
    </dependency>

    <dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-moxy</artifactId>
            <version>${jersey.version}</version>
        </dependency>

</dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <inherited>true</inherited>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <properties>
        <jersey.version>2.6</jersey.version>
        <grizzly.version>2.3.11</grizzly.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
</project>

并创建一个服务器,如:

final ResourceConfig rc = new ResourceConfig();
        rc.register(new LoggingFilter(Logger.getLogger(Main.class.getName()), true));
        return GrizzlyHttpServerFactory.createHttpServer(new URI(BASE_URI), rc);

        server.getServerConfiguration()
            .addHttpHandler(new CLStaticHttpHandler(ServletSimple.class.getClassLoader(), "statichtmlfolder/"), "/ui/" );

        System.out.println(String.format("Jersey app started with WADL available at " + "%sapplication.wadl\nHit enter to stop it...", BASE_URI));
        System.in.read();
        server.shutdown();

statichtmlfolder是一个包含index.html下所有/src/main/resources/文件的文件夹。我们在这里使用Jersey2。并使用mvn package将代码打包到jar文件,转到target文件夹,然后运行java -cp dependency/*:api-server-1.0.26-SNAPSHOT.jar com.example.Main。我们可以看到statichtmlfolder位于jar文件的根目录下。

1 个答案:

答案 0 :(得分:1)

该错误已在Grizzly 2.3.13中修复 https://java.net/jira/browse/GRIZZLY-1687