jetty

18 篇文章 10 订阅
16 篇文章 0 订阅


java容器


java容器很很多,tomcat、jetty、jboss、resin、weblogic、webspere等等。

有收费的,也有开源免费的,性能可能是有些许差异的,理论上,收费的应该比免费的,性能要要一些。

但是,用开源免费的来做巨大访问量的(比如千万PV)应用,也是毫无问题的,当前我们所处的技术浪潮,性能的瓶颈一般都在数据库上,在硬盘的访问上,而不是网络请求和响应。

已知互联网公司使用的java容器:

jetty:google、美团

tomcat:yougou.com


jetty官网:http://www.eclipse.org/jetty/

jetty源码:git clone https://github.com/eclipse/jetty.project.git

关于tomcat的博客:http://blog.csdn.net/puma_dong/article/details/21875253

Jetty 的工作原理以及与 Tomcat 的比较

Google App Engine转向了Jetty


jetty日志


jetty的日志记录


本周遇到一个jetty日志的问题,看jetty的request.log日志中,我们post过来的参数没有记录,google了好久,没有答案,于是把jetty源码下载下来,看了看日志这部分:jetty-server/src/main/resource/org/eclipse/jetty/server/NCSARequestLog.java,发现日志中关于参数相关的日志,只记录了request.getUri(),也就是说只有get的参数才能记录到日志里面去,post的参数都不会记录到日志里面。

相关帖子:

http://wiki.eclipse.org/Jetty/Tutorial/RequestLog


启动过程中一个日志输出的问题


启动过程中,jetty的INFO级别及以上的日志,会打印到IDE控制台(比如Eclipse),突然有一天,日志不再打印到IDE控制台,而是到某个地方后,重定向到了logs/jetty.log.2015-06-10,如图:




开始发现这个日志和mms-boot-0.8.jar中的配置一致,截图如下:




所以把问题的原因定义为:jetty定义的重定向,对于控制台的输出重定向到了文件(实际jetty8.xml仅仅是对System.out/error进行了重定向)。

后来了解到,其他的项目也是同样的启动方式,没有这个问题。

于是重新查原因,对比hotel-campaigns和hotel-cms的日志的不同,开始时有“先入为主”的思维定势,潜意识相信是jetty8.xml再捣鬼,所以对比两个项目的依赖mms的版本、及执行jetty8.xml处的日志,修改log4j.xml配置文件进行多种办法的尝试,没有找出问题。

结合下午发现的log4j.xml配置文件不生效,可以确定:IDE启动hotel-campaigns项目时,对于slf4j的实现,用了logback,为什么突然用了logback呢?


结合pom.xml,可以看到:




于是exclusions 这个jar,问题解决。


参考文章:

http://www.slf4j.org/codes.html#multiple_bindings

http://www.slf4j.org/manual.html


嵌入式Jetty和RunJettyRun插件


使用RunJettyRun插件,项目运行正常,截图如下:


使用嵌入式方式运行,打不出启动成功的标记,截图如下:


开始尝试解决问题:

1、由于“springmvc”是web.xml里面关于SpringMVC的servlet,尝试把SpringMVC相关的内容都去掉,依然没有打出启动成功的日志

2、尝试着访问了一下antispider-server提供的Thrift服务和Web服务,结果都是正常的,很是疑惑,这个时候怀疑:RunJettyRun插件(这相当于Jetty容器)和Bootstrap(这相当于Jetty内嵌),对于SpringMVC或者Web项目的处理方式,有很大不同,导致没有正常启动完毕。

评:这实际是由于对Jetty理解不深刻,胡乱猜忌Jetty了,如果作为容器和嵌入式,有很大的差别,这简直是不可想象的。

由于没有解决问题,结合Bootstrap源码,关注以上图示中的“第一点”和“第二点”

第一点:这一点没啥好说的,就是src/main/resource下没有config.properties,对于结果没有影响,期间经历一个小插曲,hotel-campaigns-web项目,没有config.properties文件,也没打这行日志,经查是因为依赖的sinai.client里面有config.properties

第二点:这一点因为使用RunJettyRun插件时没有这个日志,所以被高度怀疑,差异了一些资料,但是依然没有解决

http://stackoverflow.com/questions/22938689/info-no-spring-webapplicationinitializer-types-detected-on-classpath

http://stackoverflow.com/questions/16321819/no-spring-webapplicationinitializer-types-detected-on-classpath

http://steveliles.github.io/setting_up_embedded_jetty_8_and_spring_mvc_with_maven_and_no_xml.html

http://hitmit1314.iteye.com/blog/1315816

3、万不得已,新建一个单纯的aitispider-test项目,使用Bootstrap运行,并逐渐增加antispider-server的配置文件,终于在一步增加log4j.xml时,问题重现,找出原因:


4、"org"中,“ERROR”以下级别的日志被过滤了,用RunJettyRun插件,启动成功,是oejs包打印的,所以能显示;而用嵌入式Jetty,启动成功是org包打的,所以被过滤掉了,截图如下:


5、故事到此就结束了,但这个经历,加深了对嵌入式Jetty的理解:服从一套规范,实现一组标准,帮我们实现高效的Web通讯。如果写过ServerSocket通讯程序,会对嵌入式Jetty更深入的了解。


另外一个没有微观佐证的问题,关于Maven解决冲突的方式:


对于,这个问题,我使用准确告诉maven使用版本的方式解决(这是最标准、明确的方式,本身对于pom.xml就应该进行准确的定义,不应该依赖Maven自定义的方式帮我们解决冲突):


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值