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