分模块开发时,Jetty为何不能加载META-INF中的资源文件?

新手上路,请多包涵

1、开发环境:eclipse + Maven + Jetty9(嵌入式) + JDK8 + servlet3.0
2、实现过程:将js、css等静态资源文件封装到模块Jar包的META-INF/resources中,希望利用servlet3的特性,可以直接被Web访问到,实现各模块的静态文件单独部署的目的。
3、目前的情况是替换成Tomcat8环境确实可以,说明模块的Jar包应该没有问题。但在Jetty9环境无法访问,个人怀疑还是我的Jetty封装部分存在问题。
4、原来使用的Jetty8无法实现,所以才换成Jetty9,依然如此。
5、想有过经验的答友提供援助,嵌入式的Jetty9如何才能支持在WEB端直接访问到JAR包中的META-INFO/resource下的静态资源文件

6、我的Jetty封装:

/**
 * 嵌入式Jetty封装
 * @author netwild
 *
 */
public class MyJetty {

    private static Log log = Log.getLog(MyJetty.class);

    private Server server;
    private WebAppContext handler;
    
    private String host = "127.0.0.1";
    private Integer port = 80;
    private String webAppDir = "src/main/webapp";
    private String contextPath = "/";
    
    private boolean running = false;

    public MyJetty() {
    }

    public MyJetty(String host, Integer port, String webAppDir, String contextPath) {
        this.host = host;
        this.port = port;
        this.webAppDir = webAppDir;;
        this.contextPath = contextPath;
    }

    /**
     * 启动服务
     * @return
     */
    public boolean start() {
        if (!running) {
            try {
                initServer();
                server.start();
                running = false;
                log.info("EServer启动成功!");
            } catch (Throwable ex) {
                log.info("EServer启动失败!");
                log.error(ex.toString(), ex);
                stop();
                return false;
            }
        }
        return true;
    }

    /**
     * 初始化服务
     */
    private void initServer() {
        InetSocketAddress address = new InetSocketAddress(host, port);
        server = new Server(address);
        server.setStopAtShutdown(true);

        handler = new WebAppContext();
        handler.setContextPath(contextPath);
        handler.setResourceBase(webAppDir);
        handler.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
        handler.setInitParameter("org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");    // webApp.setInitParams(Collections.singletonMap("org.mortbay.jetty.servlet.Default.useFileMappedBuffer", "false"));
        server.setHandler(handler);
    }

    /**
     * 停止服务
     * @return
     */
    public boolean stop() {
        if (running) {
            try {
                server.stop();
                running = false;
                log.info("EServer停止成功!");
            } catch (Exception ex) {
                log.info("EServer停止失败!");
                log.error(ex.toString(), ex);
                return false;
            }
        }
        return true;
    }

}
阅读 3.1k
1 个回答

据我所知, jetty没有相关的实现, 用tomcat7以上的版本吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题