首页 > springmvc内置jetty启动问题

springmvc内置jetty启动问题

错误

相关代码

启动类

package com.xxx.channel.riskcontrol;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.ResourceServlet;

public class Launcher {

    public static final int PORT = 81;
    public static final String CONTEXT = "/";

    private static final String DEFAULT_WEBAPP_PATH = "src/main/resources";

    /**
     * 创建用于开发运行调试的Jetty Server, 以src/main/webapp为Web应用目录.
     */
    public static Server createServerInSource(int port, String contextPath) {
        Server server = new Server();
        // 设置在JVM退出时关闭Jetty的钩子。
        server.setStopAtShutdown(true);

        WebAppContext webContext = new WebAppContext(DEFAULT_WEBAPP_PATH, contextPath);
        ContextLoaderListener listener = new ContextLoaderListener();
        webContext.setInitParameter("contextConfigLocation", "classpath:business-xxxx.xml,classpath*:xx-context.xml,classpath*:xx-context.xml, classpath*:xxx.xml,classpath*:xxxxxx.xml,classpath*:xxxxxx.xml");
    
//        webContext.setInitParameter("contextConfigLocation", "mvc-config.xml");

        webContext.setResourceBase(DEFAULT_WEBAPP_PATH);
        webContext.addEventListener(listener);

        ServletHolder holder=new ServletHolder(new ResourceServlet());
        webContext.addServlet(holder, "/resources/*");
        holder = new ServletHolder(new DispatcherServlet());
        holder.setInitParameter("contextConfigLocation", "classpath:mvc-config.xml");
        webContext.addServlet(holder, "/");
        
        holder=new ServletHolder(new DefaultServlet());
        webContext.addServlet(holder, "*.html");
        
        

        webContext.setDescriptor("src/main/webapp/WEB-INF/web.xml");
        // 设置webapp的位置

//        webContext.setClassLoader(Thread.currentThread().getContextClassLoader());
//        webContext.setErrorHandler(null);
//        webContext.addServlet(new ServletHolder(new DispatcherServlet(context)), "/*");

        server.setHandler(webContext);
        return server;
    }

    /**
     * 启动jetty服务
     * 
     * @param port
     * @param context
     */
    public void startJetty(int port, String context) {
        final Server server = Launcher.createServerInSource(PORT, CONTEXT);
        try {
            server.stop();
            server.start();
            server.join();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(-1);
        }
    }

    public static void main(String[] args) {
        new Launcher().startJetty(81, "");
    }
}

探索

找了很多例子,最终怀疑是jetty配置springmvc上下文加载配置文件,不对,查询官网也没一个合适的例子,我是仿照这个例子:https://github.com/bkielczewski/example-... ,我和他的不同点在于他是通过注解去配置文件,而我这里是多个xml文件,有没相关经验者,提供下这段代码该如何写,让jetty正确加载spring配置文件,初始化spring的servlet。并且可以运行 java -jar xx.jar运行这个项目。谢谢了~~相关敏感字用xxx代替了,另外还想问下,有没更好的内置jetty启动方法,一个jar包搞定,不需要容器。

【热门文章】
【热门文章】