java读取jar包中metainf_如何才能在Jetty中访问Jar包中META-INF/resources下的静态资源?...

注:问题与JFinal本身无关,只是想在这里寻找答案。

开发环境:eclipse + Maven + Jetty9 + JDK8 + servlet3.0

实现过程:将js、css等静态资源文件封装到模块Jar包的META-INF/resources中,希望利用servlet3的特性,可以直接被Web访问到,实现各模块的静态文件单独部署的目的。

目前的情况是替换成Tomcat8环境确实可以,说明Maven生成的模块Jar包应该没有问题。但在Jetty9环境无法访问,个人怀疑还是我的Jetty封装部分存在问题。

注:原来使用JFinal默认的Jetty8无法实现,所以才换成Jetty9,依然如此。

下面附上我的Jetty9封装:import java.net.InetSocketAddress;

import org.eclipse.jetty.server.Server;

import org.eclipse.jetty.webapp.WebAppContext;

import com.jfinal.log.Log;

/**

* 嵌入式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("MyJetty启动成功!");

} catch (Throwable ex) {

log.info("MyJetty启动失败!");

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("MyJetty停止成功!");

} catch (Exception ex) {

log.info("MyJetty停止失败!");

log.error(ex.toString(), ex);

return false;

}

}

return true;

}

}

你可能感兴趣的:(java读取jar包中metainf_如何才能在Jetty中访问Jar包中META-INF/resources下的静态资源?...)