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)
--------------------------------------------------------------------------------

Jfinal初次尝试及Jetty使用相关问题的更多相关文章

  1. 孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录

    孤荷凌寒自学python第五十二天初次尝试使用python读取Firebase数据库中记录 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数 ...

  2. 孤荷凌寒自学python第五十一天初次尝试使用python连接Firebase数据库

    孤荷凌寒自学python第五十一天初次尝试使用python连接Firebase数据库 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库服 ...

  3. 微信小程序开发初次尝试-----实验应用制作(一)

    初次尝试微信小程序开发,在此写下步骤以做记录和分享. 1.在网上找了很多资料,发现这位知乎大神提供的资料非常全面. 链接 https://www.zhihu.com/question/50907897 ...

  4. 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试

    20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...

  5. 初次尝试使用jenkins+python+appium构建自动化测试

    初次尝试使用jenkins+python+appium构建自动化测试 因为刚刚尝试使用jenkins+python+appium尝试,只是一个Demo需要很多完善,先记录一下今天的成果,再接再厉 第一 ...

  6. 孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库

    孤荷凌寒自学python第五十七天初次尝试使用python来连接远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第三天.感觉这个东西学习起来还是那么困 ...

  7. 初次尝试python爬虫,爬取小说网站的小说。

    本次是小阿鹏,第一次通过python爬虫去爬一个小说网站的小说. 下面直接上菜. 1.首先我需要导入相应的包,这里我采用了第三方模块的架包,requests.requests是python实现的简单易 ...

  8. Docker Compose + Traefik v2 快速安装, 自动申请SSL证书 http转https 初次尝试

    前言 昨晚闲得无聊睡不着觉,拿起服务器尝试部署了一下Docker + Traefik v2.1.6 ,以下是一些配置的总结,初次接触,大佬勿喷. 我的系统环境是 Ubuntu 18.04.3 LTS ...

  9. Windows下CRF++进行中文人名识别的初次尝试

    语料来自1998年1月份人民日报语料 1 语料处理 1.1 原始语料数据格式 语料中,句子已经被分词好,并且在人名后以“/”标注了“nr”表示是人名,其他非人名的分词没有进行标注 1.2 CRF++要 ...

随机推荐

  1. 走进JavaWeb技术世界7:Tomcat中的设计模式

    . 门面设计模式 门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中.Standard Wrapper 到 ServletConfig 封装中.Appli ...

  2. PHP操作文件常用函数

    [获取文件信息的函数] basename($path[,扩展名]) 返回文件路径中去掉路径后的文件名称."/root/a.txt"输出a.txt;带上.txt输出a. dirnam ...

  3. osg::NodeVisitor example

    [0]osg::Group [1]osg::MatrixTransform [1] osg::MatrixTransform [1]osg::MatrixTransform [2] osg::Geod ...

  4. Javescript——API连接 && json数据处理(待续)

    原文链接1:How to Connect to an API with JavaScript 原文链接2:How to Use the JavaScript Fetch API to Get JSON ...

  5. python高级知识

    网络udp socket的作用 进程指的是:运行的程序以及运行时用到的资源这个整体称之为进程 socket(简称 套接字) 是最通用的进程间通信的一种方式 创建socket import socket ...

  6. LeetCode_121. Best Time to Buy and Sell Stock

    121. Best Time to Buy and Sell Stock Easy Say you have an array for which the ith element is the pri ...

  7. (八)Centos之文件搜索命令locate

    一.文件搜索命令locate locate优点是 搜索速度快 ,缺点是只能按文件名搜索: 1.1 新建一个文件   1.2 更新数据库 locate命令搜索的是 /var/lib/mlocate 下的 ...

  8. WIN 10 看不到SAMBA共享的硬盘

    1.SMB1.0/CIFS协议默认被关闭了,之前的勒索病毒就是用的这个协议的漏洞,所以你去“启动和关闭windows功能”下手动勾选启用SMB1.0/CIFS协议 2.管理员身份执行 sc.exe c ...

  9. jQuery插件—获取URL参数

    做的项目中需要用到通过JS获取GET参数,上网找了一下,找到如下插件: 例如 当前你的URL是: http://www.xxx.com/index.php?test=1&kk=2 //如果想获 ...

  10. css 命名规范参考[转]

    命名空间 另外最好的实践就是当命名你的类名的时候,使用命名空间前缀来进行分类.这些前缀会在你的命名前添加一组字符,但是这个值能立刻标记每一个类的目的,在你看 HTML 或者样式的时候是很需要的.我使用 ...