簡體   English   中英

碼頭嵌入式Javalite Web應用程序

[英]jetty embedded javalite web app

我正在嘗試使用javalite activeweb生成一個Jetty 9.4.8嵌入式webapp,它是一個基於ServletFilter的框架。

我使用webappContextHandler開發了一個服務器主服務器,但我總是得到該異常:

2018-03-07 18:28:54 DEBUG AbstractLifeCycle:177 - STARTED @2308ms default@5c13d641==org.eclipse.jetty.servlet.DefaultServlet,jsp=null,order=0,inst=false
2018-03-07 18:28:54 DEBUG ServletHolder:664 - Servlet.init org.eclipse.jetty.servlet.DefaultServlet@6e75aa0d for default
2018-03-07 18:28:54 INFO  ServletHolder:621 - unavailable
java.lang.NullPointerException
    at org.eclipse.jetty.servlet.DefaultServlet.getInitParameter(DefaultServlet.java:376)
    at org.eclipse.jetty.servlet.DefaultServlet.getInitBoolean(DefaultServlet.java:385)
    at org.eclipse.jetty.servlet.DefaultServlet.init(DefaultServlet.java:182)
    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:665)
    at org.eclipse.jetty.servlet.ServletHolder.initialize(ServletHolder.java:423)
    at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:760)
    at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:348)
    at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1515)
    at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1477)
    at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:785)
    at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:261)
    at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:545)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:133)
    at org.eclipse.jetty.server.Server.start(Server.java:418)
    at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:107)
    at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:113)
    at org.eclipse.jetty.server.Server.doStart(Server.java:385)
    at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
    at app.server.Server.main(Server.java:80)
2018-03-07 18:28:54 DEBUG ServletHandler:764 - EXCEPTION 

我實際的替代方法是使用webappcontext,但我嘗試使用其他類型的處理程序:

     public static void main(String[] args) throws Exception {

            server = new org.eclipse.jetty.server.Server(8000);
            WebAppContext contextHandler = new WebAppContext();

        contextHandler.setContextPath("/");
        contextHandler.setWar("target/classes/WEB-INF");
        FilterHolder filter = contextHandler.addFilter(org.javalite.activeweb.RequestDispatcher.class, "/",  EnumSet.of(DispatcherType.REQUEST));
        filter.setInitParameter("exclusions", "css,images,js,ico,woff,svg,png");
        filter.setInitParameter("root_controller", "home");

        //session
        final DefaultSessionIdManager idmgr = new DefaultSessionIdManager(server);
        idmgr.setServer(server);
        server.setSessionIdManager(idmgr);
        JDBCSessionDataStore sessionStore = new JDBCSessionDataStore();
        DatabaseAdaptor databaseAdaptor = new DatabaseAdaptor();
        databaseAdaptor.setDatasource(dataSource);
        sessionStore.setDatabaseAdaptor(databaseAdaptor);
        SessionHandler sessionHandler = new SessionHandler();
        DefaultSessionCache cacheSession = new DefaultSessionCache(sessionHandler);
        sessionHandler.setSessionCache(cacheSession);
        cacheSession.setSessionDataStore(sessionStore);
        sessionHandler.setSessionIdManager(idmgr);
        contextHandler.setHandler(sessionHandler);

        server.setHandler(contextHandler);

        try {
            server.start();
            server.dumpStdErr();
            server.join();
            System.out.println("finalling main");
        } catch (Exception t) {
            t.printStackTrace();
        } finally {
            if (dataSource != null && !dataSource.isClosed()) {
                dataSource.close();
            }
            if (server != null && server.isRunning()) {
                server.setStopTimeout(10);
                server.stop();
            }
            System.out.println("finalled");
        }

    }

有任何想法嗎?

我真正的專家是:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>BeLoyal</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>


<build>
    <resources>
        <resource>
            <directory>src/main/webapp</directory>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.4.1.v20170120</version>
            <configuration>
                <reload>manual</reload>
                <scanIntervalSeconds>10000</scanIntervalSeconds>
                <systemProperties>
                    <systemProperty>
                        <name>activejdbc.log</name>
                        <value></value>
                    </systemProperty>
                    <systemProperty>
                        <name>active_reload</name>
                        <value>true</value>
                    </systemProperty>
                    <systemProperty>
                        <name>activeweb.log.request</name>
                        <value>true</value>
                    </systemProperty>
                </systemProperties>

            </configuration>
        </plugin>
        <plugin>
            <groupId>org.javalite</groupId>
            <artifactId>activejdbc-instrumentation</artifactId>
            <version>2.0</version>
            <executions>
                <execution>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>instrument</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>


    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>2.7.8</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.javalite</groupId>
        <artifactId>activeweb</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.35</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.24</version>
    </dependency>  
    <dependency>
        <groupId>com.sun</groupId>
        <artifactId>tools</artifactId>
        <version>1.7.0</version>
        <scope>system</scope>
        <systemPath>${java.home}/../lib/tools.jar</systemPath>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-webapp -->
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-webapp</artifactId>
        <version>9.4.8.v20171121</version>
    </dependency>

</dependencies>

歡迎建議

編輯1:

實際上我嘗試:

 ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
    contextHandler.setContextPath("/");
    contextHandler.setHandler(sessionHandler);

    ServletHandler servletHandler = new ServletHandler();
    FilterHolder filter = servletHandler.addFilter("org.javalite.activeweb.RequestDispatcher", "/", EnumSet.of(DispatcherType.REQUEST));
    filter.setInitParameter("exclusions", "css,images,js,ico,woff,svg,png");
    filter.setInitParameter("root_controller", "home");

    HandlerCollection collectionHandler = new HandlerCollection(servletHandler,contextHandler);

    server.setHandler(collectionHandler);

異常消失,但是在調用網頁自由標記時說找不到模板,因為servletcontext為null

看起來您在此行中有錯別字:

contextHandler.setWar("target/classes/WEB-INF");

它需要指向戰爭文件的根目錄。

請參閱: http : //www.eclipse.org/jetty/documentation/9.3.x/embedding-jetty.html

您也可以將Jetty源加載到調試器中(它是開源的,您知道:)),然后查看出了什么問題。

更新:

我花了10分鍾時間和7行代碼來完成此操作。 請在此處查看示例: https : //github.com/javalite/activeweb-simple/blob/master/src/main/java/app/Main.java

最終我實現了。

我在以下網站發布示例:

https://github.com/devMls/base_embedded_jetty

因為它是否可以幫助某人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM