Jfinal初次嘗試及Jetty使用相關問題

Jetty介紹

echo $JETTY_HOME
/Users/aliyun/Downloads/softwoare/jetty-distribution-9.4.7.v20170914
ali-2cf0ee28bc54:jetty aliyun$ java -jar $JETTY_HOME/start.jar
ERROR : Nothing to start, exiting ...

Usage: java -jar $JETTY_HOME/start.jar [options] [properties] [configs]
       java -jar $JETTY_HOME/start.jar --help  # for more information
ali-2cf0ee28bc54:jetty aliyun$ pwd
/Users/aliyun/code/web/jetty
ali-2cf0ee28bc54:jetty aliyun$ JETTY_BASE=/Users/aliyun/code/web/jetty/
ali-2cf0ee28bc54:jetty aliyun$ java -jar $JETTY_HOME/start.jar
ERROR : Nothing to start, exiting ...

Usage: java -jar $JETTY_HOME/start.jar [options] [properties] [configs]
       java -jar $JETTY_HOME/start.jar --help  # for more information
ali-2cf0ee28bc54:jetty aliyun$ java -jar $JETTY_HOME/start.jar --add-to-startd=http,deploy
WARN  : --add-to-startd is deprecated! Instead use: --create-startd --add-to-start=http,deploy
MKDIR : ${jetty.base}/start.d
INFO  : webapp          transitively enabled, ini template available with --add-to-start=webapp
INFO  : server          transitively enabled, ini template available with --add-to-start=server
INFO  : security        transitively enabled
INFO  : servlet         transitively enabled
INFO  : http            initialized in ${jetty.base}/start.d/http.ini
INFO  : deploy          initialized in ${jetty.base}/start.d/deploy.ini
MKDIR : ${jetty.base}/webapps
INFO  : Base directory was modified
ali-2cf0ee28bc54:jetty aliyun$
建議使用:
Instead use: --create-startd --add-to-start=http,deploy

2. Jfinal使用問題

  • 接觸Jfinal框架的時候發現它依賴的都是比較舊的類庫,由於我本機上大部分mvn類庫都有,不想佔用電腦空間不想加載多種版本的類庫了,因此更新了一下maven依賴。不明白爲何Jfinal沒有更新一些類庫,須要的同窗能夠參考如下問題來本身修改Jfinal的依賴和代碼。
  • 使用發現的異常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/nio/SelectChannelConnector
  • 緣由時Jfinal依賴的jetty版本是8.1.8,我本機已經有的依賴是9.2.7.v20150116版本,故從新fork了jfinal的源代碼,pull了新分支發如今類com.jfinal.server.JettyServer中使用了9.2.7版本中沒有的類org.eclipse.jetty.server.nio.SelectChannelConnector,參考別的jetty使用代碼,修改server啓動時配置端口的地方便可,去掉已經沒有的依賴。還發現jfinal主線是java1.6的版本,,有一些地方提示代碼有錯,如沒有加@Override,異常處理等。因而修改了一些IDE報錯,從新編譯發佈了jfinal的包,纔好用。
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I
  • javax-servlet-api-3.1.0版本的類庫裏確實沒有該方法,使用mvn dependency:tree來查看當前依賴,發現是jfinal中velocity-tools依賴了servlet2.3版本,以下:而我本機又沒有新的依賴,因此在maven中去掉該版本依賴:
+- org.apache.velocity:velocity-tools:jar:2.0:provided
[INFO] |  +- commons-beanutils:commons-beanutils:jar:1.7.0:provided
[INFO] |  +- commons-digester:commons-digester:jar:1.8:provided
[INFO] |  +- commons-chain:commons-chain:jar:1.1:provided
[INFO] |  +- commons-logging:commons-logging:jar:1.1:provided
[INFO] |  |  \- javax.servlet:servlet-api:jar:2.3:provided
[INFO] |  +- commons-validator:commons-validator:jar:1.3.1:provided

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-tools</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
    <exclusions>
        <exclusion>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 參考基礎教程Jfinal教程手冊,使用Jfinal來寫一個簡單的web應用。與使用django的體驗相似,沒有spring繁雜的配置,幾行代碼就能夠。如今spring-boot等也在向一個main函數啓動應用的簡化方向演化。
  • 使用maven package來打包應用。在輸出的target目錄下運行main方法,便可實現。
  • 運行成功結果:
ali-2cf0ee28bc54:jfinal-web-1.0.0-RELEASE aliyun$ java -cp WEB-INF/lib/*:WEB-INF/classes/ top.hunaner.JfinalApplication
Starting JFinal 3.3
2017-12-20 17:02:16.036:INFO::main: Logging initialized @293ms
Starting scanner at interval of 5 seconds.
Starting web server on port: 8006
2017-12-20 17:02:16.197:INFO:oejs.Server:main: jetty-9.2.7.v20150116
2017-12-20 17:02:16.462:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
2017-12-20 17:02:16.607:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@59494225{/,file:/Users/aliyun/Documents/GitHub/hello-world/code/jfinal/project/jfinalTest/target/jfinal-web-1.0.0-RELEASE/,AVAILABLE}
//注意這裏說明了jfinal項目的地址,與單獨使用jetty一致。
2017-12-20 17:02:16.641:INFO:oejs.ServerConnector:main: Started ServerConnector@55b9ae50{HTTP/1.1}{0.0.0.0:8006}
2017-12-20 17:02:16.642:INFO:oejs.Server:main: Started @901ms
Starting Complete. Welcome To The JFinal World :)
Before method invoking
After method invoking

JFinal action report -------- 2017-12-20 17:02:28 ------------------------------
Url         : GET /hello
Controller  : top.hunaner.controller.HelloController.(HelloController.java:1)
Method      : index
Interceptor : top.hunaner.interceptor.LogInterceptor.(LogInterceptor.java:1)
--------------------------------------------------------------------------------
相關文章
相關標籤/搜索