java - 如何在 Grizzly 中设置默认索引页

标签 java grizzly

目前在我的应用程序中,如果我转到http://localhost:8181/index.htm,它效果很好,如果我转到http://localhost:8181 > 我收到 404 错误。我如何告诉 Grizzly 默认加载 index.htm 页面?

    final HttpServer server = HttpServer.createSimpleServer(".", 8181);

    WebappContext ctx = new WebappContext("Socket", "/");

    //enable annotation configuration
    ctx.addContextInitParameter("contextClass", "org.springframework.web.context.support.AnnotationConfigWebApplicationContext");
    ctx.addContextInitParameter("contextConfigLocation", "com.production");

    //allow spring to do all of it's stuff
    ctx.addListener("org.springframework.web.context.ContextLoaderListener");

    //enable web socket support
    final WebSocketAddOn addon = new WebSocketAddOn();
    for (NetworkListener listener : server.getListeners()) {
        listener.registerAddOn(addon);

        //if false, local files (html, etc.) can be modified without restarting the server
        listener.getFileCache().setEnabled(false);
    }

    //add jersey servlet support
    ServletRegistration jerseyServletRegistration = ctx.addServlet("JerseyServlet", new ServletContainer());
    jerseyServletRegistration.setInitParameter("com.sun.jersey.config.property.packages", "com.production.resource");
    jerseyServletRegistration.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
    jerseyServletRegistration.setLoadOnStartup(1);
    jerseyServletRegistration.addMapping("/api/*");

    //add atmosphere servlet support
    AtmosphereServlet atmosphereServlet = new AtmosphereServlet();
    AtmosphereFramework f = atmosphereServlet.framework();

    ReflectorServletProcessor r = new ReflectorServletProcessor();
    r.setServletClassName("com.sun.jersey.spi.spring.container.servlet.SpringServlet");

    f.addAtmosphereHandler("/socket/*", r);

    ServletRegistration atmosphereServletRegistration = ctx.addServlet("AtmosphereServlet", atmosphereServlet);
    atmosphereServletRegistration.setInitParameter("org.atmosphere.websocket.messageContentType", "application/json");
    atmosphereServletRegistration.setInitParameter("com.sun.jersey.config.property.packages", "com.production.resource");
    atmosphereServletRegistration.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
    //atmosphereServletRegistration.addMapping("/socket/*");
    atmosphereServletRegistration.setLoadOnStartup(1);

    //serve static assets
    StaticHttpHandler staticHttpHandler = new StaticHttpHandler("src/main/web");
    server.getServerConfiguration().addHttpHandler(staticHttpHandler, "/");

    //deploy
    logger.info("Deploying server...");
    ctx.deploy(server);

最佳答案

您没有提及您使用的 grizzly 版本,但从 2.2.19 开始:

http://grepcode.com/file/repo1.maven.org/maven2/org.glassfish.grizzly/grizzly-http-server/2.2.19/org/glassfish/grizzly/http/server/StaticHttpHandler.java

看起来如果您将 index.htm 更改为 index.html,默认页面应该可以正常工作。

如果没有或者由于某种原因您无法更改文件名,您可以简单地扩展 StaticHttpHandler 并覆盖 handle 方法以使其执行您想要的操作。

关于java - 如何在 Grizzly 中设置默认索引页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15976015/

相关文章:

Java 在已启动的线程上运行更多代码

java - 找不到媒体类型=应用程序/json 的 MessageBodyWriter

java - Jersey 2.2 : ContainerResponseFilter and ContainerRequestFilter never get executed

java - JPanel 仅显示添加的第一个自定义 JComponent

java - 当 WebMvcAutoConfiguration$EnableWebMvcConfiguration 只需要一个 entityManager 时如何在 Spring Boot 中进行 Multi-Tenancy

java - java正则表达式中查找String中的字段

spring - NoSuchMethodError : com. sun.jersey.core.reflection.ReflectionHelper.getOsgiRegistryInstance()Lcom/sun/jersey/core/osgi/OsgiRegistry;

java - Grizzly 嵌入式服务器 + Jersey 服务 + Servlet 过滤器

java - html 服务器 grizzly+jersey(.jar 存档中的 .html)

java - 序列化和反序列化以及将内部写入文件然后读取它们并将它们传递给构造函数之间的区别