嵌入式Jetty应用程序

时间:2013-01-28 10:25:50

标签: java jetty

我是Jetty的新手。我创建了一个应用程序,我在其中嵌入了jetty Web容器。当我从eclipse运行应用程序时,它运行完美,没有任何问题。但是,当我使用所有必需的库导出项目并从命令行运行它时,我无法像以前在eclispe中那样访问index.jsp网页。这是运行jetty Web容器的文件。

public class JettyServer {

// The folder containing all the .jsp files
private final static String WEB_ROOT = "src/WebContent";

// Instance of the Jetty server
private final static Server SRV = new Server();

// Context Path
private final static String CONTEXT_PATH = "/smpp";

// Logging 
private final static org.slf4j.Logger logger = LoggerFactory.getLogger(JettyServer.class);

/**
 * @param args
 * @throws ConfigurationException 
 */
public static void main(String[] args) throws ConfigurationException {
    logger.info("Initializing Web Server......");

    // Servlet Context
    final ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);

    // Set the security constraints
    context.setContextPath(CONTEXT_PATH);
    context.setResourceBase(WEB_ROOT);

    context.setClassLoader(Thread.currentThread().getContextClassLoader());

    context.addServlet(DefaultServlet.class, "/");
    context.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");

    String [] welcomeFiles = {"index.jsp"};
    context.setWelcomeFiles(welcomeFiles);
    // Set the .jsp servlet handlers
    final ServletHolder jsp = context.addServlet(JspServlet.class, "*.jsp");
    jsp.setInitParameter("classpath", context.getClassPath());

    // Session Manager
    SessionHandler sh = new SessionHandler();       
    context.setSessionHandler(sh);

    /* Http Request Handlers */
    context.addServlet(HttpRequestProcessor.class, "/HttpHandler");

    // Server configuration setup
    // Connector setup
    //  We explicitly use the SocketConnector because the SelectChannelConnector locks files
    Connector connector = new SocketConnector();
    connector.setHost("localhost");
    connector.setPort(Integer.parseInt(System.getProperty("jetty.port", new PropertiesConfiguration("smpp-config.properties").getString("http_port").trim())));
    connector.setMaxIdleTime(60000);

    JettyServer.SRV.setConnectors(new Connector[] { connector });
    JettyServer.SRV.setHandler(context);
    JettyServer.SRV.setAttribute("org.mortbay.jetty.Request.maxFormContentSize", 0);
    JettyServer.SRV.setGracefulShutdown(5000);
    JettyServer.SRV.setStopAtShutdown(true);

    logger.info("Starting Jetty Web Container....");
    try{
        JettyServer.SRV.start();
    } 
    catch(Exception ex){
        logger.error("Jetty Web Container failed to start [CAUSE : " + ex.getMessage() + "]");
        return;
    }


    logger.info("Jetty Web Container running....");
    while(true){
        try{
            JettyServer.SRV.join();
        }
        catch(InterruptedException iex){
            logger.error("Jetty Web Container interrupted [CAUSE : " + iex.getMessage() + "]");
        }
    }       
}   
}

代码格式正确

2 个答案:

答案 0 :(得分:1)

您在context.setResourceBase("src/WebContent");中使用相对路径会导致问题。

context.setResourceBase(String)使用完整且绝对的URI引用。

请注意,您可以使用以下URI方案:fileftpjar,甚至http

答案 1 :(得分:0)

而不是这个

final ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);

你能用吗?

WebAppContext root = new WebAppContext();

以及代码的其余部分为例:

String webappDirLocation = "src/Webcontent/";

Server server = new Server(8080);


root.setContextPath(CONTEXT_PATH);
root.setDescriptor(webappDirLocation + "/WEB-INF/web.xml");
root.setResourceBase(webappDirLocation);

root.setParentLoaderPriority(true);

server.setHandler(root);