注:问题与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;
}
}