jetty反编译
‘壹’ eclipse怎么设置编译时不编译某个类表的文件 jetty的服务器
1,查看project --> Build Automatically有没有选中?如果没有,勾上以后,clean一下,重启eclipse。
2,查看你的lib里面有没有不用的(多余)jar包,看你的.classpath文件中有没有错误的路径.
3,这是最重要的一点,有problems视图中查看有没有关于本项目的错误信息,一般都会有这样的话:
The project cannot be built until build path errors are resolved
然后下面提示unbound classpath, 一般在.classpath中删除这些path就可以了
=================================
今天突然发现eclipse不自动编译文件了。立即网络搜了一下,按照网上所说的也做了,但是仍然不管用。
没办法自己在那儿瞎弄,意外发现在项目右键菜单的[Properties->java Build Path]中出现如下提示:
Build path entry is missing: /InfoMirrorServer/js
这时才想到自己昨天好像是不小心建错了文件夹,然后立即把他删掉了。难道是这个的原因?我猜想eclipse肯定是在那个文件
中记录了这个信息。于是在项目中显示所有文件,看到了一个带星号的未提交文件:.classpath
不用问,多半就是他了。打开一看,在第二行就有这么一句:
源文件是这样的:
。。。
于是立即将第二行删除,保存。哈哈,问题解决!
个人猜想eclipse在编译时读取该文件,执行第二行时发现js文件夹不存在,因此抛出异常不往下执行了才导致
的无法编译。
以上是个人遇到的一种无法编译的情况的解决方法,拿出来跟大家分享。
============================
总结的关于eclipse不编译类的问题
1. 确保 Project -> Build Automatically 已经被选上.
2. 如果选上了,也不好使, 使用这一招: Project -> Clean..-> 选第2个Clean pjoject selected below, 选中项目, 点击 "OK"
3.删除现在的项目,提前设置好编译文件输出路径,重新导入源文件,设置eclipse为保存时编译,然后在保存的时候就可以自动编译了
4.如果项目里引了某个不用的jar包,而那个包又被你删了,就会出现不报错但怎么也编译不出来class文件的情况,可以把所有包都删除,然后一个一个的再引入(需要的),不要一下子把所有包都引入来,没用的可能会引起不良后果.
5. 想删掉某个class文件重新生成,删除class文件后,但classes目录下的文件夹被其它程序打开,比如Total Commander。此时编译也不会通过,在problems下可能会提示“con''t delete classes ……”。关掉其它程序重新编译即可。
6.还有种情况是remove掉 JRE System Library,重新导入即可编译。但是什么原因导致的还不清楚。
7.把build path中所有包都remove掉。然后又add jars,add libraries把需要的加进去,居然又开始编译了。。。
8.Project -> Properties -> Java Build Path -> Source-> WebRoot/WEB-INF/classes
然后重新点击build工程即可自动编译。
9.再就是最重要的要看工程下面是否缺少了work目录,由于CVS控制时不把work加如版本,所以checkout后没有这个目录,要手工加上有的工程就能自动编译了
‘贰’ 如何选择Tomcat和Jetty
概括一下 Tomcat 和 Jetty 两者最大的区别。大体来说,Tomcat 的核心竞争力是 成熟稳定 ,因为它经过了多年的市场考验,应用也相当广泛,对于比较复杂的企业级应用支持得更加全面。也因为如此,Tomcat 在整体结构上比 Jetty 更加复杂,功能扩展方面可能不如 Jetty 那么方便。
而 Jetty 比较年轻,设计上更加 简洁小巧 ,配置也比较简单,功能也支持方便地扩展和裁剪,比如我们可以把 Jetty 的 SessionHandler 去掉,以节省内存资源,因此 Jetty 还可以运行在小型的嵌入式设备中,比如手机和机顶盒。当然,我们也可以自己开发一个 Handler,加入 Handler 链中用来扩展 Jetty 的功能。值得一提的是,Hadoop 和 Solr 都嵌入了 Jetty 作为 Web 服务器。
从设计的角度来看,Tomcat 的架构基于一种多级容器的模式,这些容器组件具有父子关系,所有组件依附于这个骨架,而且这个骨架是不变的,我们在扩展 Tomcat 的功能时也需要基于这个骨架,因此 Tomcat 在设计上相对来说比较复杂。当然 Tomcat 也提供了较好的扩展机制,比如我们可以自定义一个 Valve,但相对来说学习成本还是比较大的。而 Jetty 采用 Handler 责任链模式。由于 Handler 之间的关系比较松散,Jetty 提供 HandlerCollection 可以帮助开发者方便地构建一个 Handler 链,同时也提供了 ScopeHandler 帮助开发者控制 Handler 链的访问顺序。
说了一堆理论,你可能觉得还是有点抽象,接下来我们通过一个实例,来压测一下 Tomcat 和 Jetty,看看在同等流量压力下,Tomcat 和 Jetty 分别表现如何。需要说明的是,通常我们从吞吐量、延迟和错误率这三个方面来比较结果。
首先用 Spring Boot 默认的 Tomcat 作为内嵌式 Web 容器,经过一轮压测后,将内嵌式的 Web 容器换成 Jetty,再做一轮测试,然后比较结果。为了方便观察各种指标,在本地开发机器上做这个实验。
我们会在每个请求的处理过程中休眠 1 秒,适当地模拟 Web 应用的 I/O 等待时间。JMeter 客户端的线程数为 100,压测持续 10 分钟。在 JMeter 中创建一个 Summary Report,在这个页面上,可以看到各种统计指标。
第一步,压测 Tomcat。启动 Spring Boot 程序和 JMeter,持续 10 分钟,以下是测试结果,结果分为两部分:
第二步,我们将 Spring Boot 的 Web 容器替换成 Jetty,具体步骤是在 pom.xml 文件中的 spring-boot-starter-web 依赖修改下面这样:
编译打包,启动 Spring Boot,再启动 JMeter 压测,以下是测试结果:
下面我们通过一个表格来对比 Tomcat 和 Jetty:
从表格中的数据我们可以看到:
当然由于测试场景的限制,以上数据并不能完全反映 Tomcat 和 Jetty 的真实能力。但是它可以在我们做选型的时候提供一些参考:如果系统的目标是资源消耗尽量少,并且对稳定性要求没有那么高,可以选择轻量级的 Jetty;如果你的系统是比较关键的企业级应用,建议还是选择 Tomcat 比较稳妥。
最后用一句话总结 Tomcat 和 Jetty 的区别:Tomcat 好比是一位工作多年比较成熟的工程师,轻易不会出错、不会掉链子,但是他有自己的想法,不会轻易做出改变。而 Jetty 更像是一位年轻的后起之秀,脑子转得很快,可塑性也很强,但有时候也会犯一点小错误。
‘叁’ android使用org.eclipse.jetty.server中的server
这句错误提示后面还有很多吧,查看一下,确定一下是否还有别的jar没引入,也许org.eclipse.jetty.server.jar还有相关的jar包。
‘肆’ Maven如何不编译而直接启动Jetty中上次编译好的项目
使用maven jetty 插件,并不会打成war包然后部署到jetty。。。
它是以嵌入式方式运行,jetty 直接监控某个运行目录,当文件发生变化时,如果新编译了修改的文件,它会作出相应的加载,这非常适合增量开发。
‘伍’ is only available on Java 1.5 and highe
1. eclipse 下载安装
这个就是最新版本就行,没啥特殊的,安装完毕,写个HelloWorld能跑就行
2. 安装配置运行jetty
下载最新版本jetty,解压缩就行
3. 安装eclipse的jetty插件
eclipse integration plugin,地址如下,各种安装,eclipse market,配置说明都在这里(最省事的安装就是从eclipse market页面直接拖拽install按钮到eclipse界面)
http://eclipse-jetty.github.io/installation.html
4. 配置jdk
因为要支持jsp,因此需要包含java编译器的运行时jre,普通的jre是不包含编译功能的,因此,需要在eclipse->window->preferences->java->installed jre中添加jdk目录下的jre
5. 新建web项目
这个跟着eclipse的向导走就行了,没啥特殊的(编译时的jre,用啥都无所谓)
6. 运行含有jsp的web项目
第一次,需要run configuration
左边的Jetty Webapp选择添加
第一个标签WebApp,按照自己项目的实际目录填写就好,默认是按照maven项目目录规范来的,如果找不到,会报错,run按钮无法点击
第三个标签Options,Use Jetty at path ,选择jetty解压缩目录就行,插件会自行检测jetty版本
第五个标签JRE,这里选择的是jetty运行时的jre,需要选择JDK的jre,alternate JRE选择前面设置的就可以
这些都设置好了之后,应该就可以run了
常见的错误
1. no jsp support,用了这个插件,一般不会遇到这个问题,jetty默认启动不支持jsp,需要配置,用了这个插件在Options标签可以随意选择,这个问题就不是问题了(No JSP support. Check that JSP jars are in lib/jsp and that the JSP option has been specified to start.jar)
2. full jdk required,这个是JRE标签里的jre/javaw,不是JDK里的,导致运行时出问题,这个可以通过console的输出和console的标题来检查(There is an error in invoking javac. A full JDK (not just JRE) is required)
3. ClassNotFound,这个问题有可能是因为缺少依赖的包,还有可能是因为你的Lib里jar太多了,比如混入了tomcat,jetty其它版本的jar,导致jetty初始化某些logger,servlet接口的时候,找的不是当前jetty里的实现,而是那些乱七八糟jar依赖的实现,然后找不到了。根据情况,先把乱七八糟的jar干掉,然后在一点点添加。