• Jfinal初次尝试及Jetty使用相关问题


    Jetty介绍

    1. 使用

    • 参考上面文档,但是有些更新:
    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)
    --------------------------------------------------------------------------------
    
  • 相关阅读:
    网络设备操作命令
    "Realtek PCIe GBE Family Controller"网卡抓带Vlan Tag的包
    ubuntu16.04 samba 配置
    readelf -s 命令‘symbol’名字显示不全
    APUE Unix环境高级编程读书笔记
    Jmeter之文件上传
    百度去广告chrome插件
    zookeeper的安装与使用
    spring中bean获取工具
    关于maven的一些记录
  • 原文地址:https://www.cnblogs.com/drawnkid/p/8074930.html
Copyright © 2020-2023  润新知