背景介紹,系統就是普通的javaweb系統,嵌入jetty進行啓動,方便開發和代碼調試;
maven3集成的tomcat能用,但是有一點不好,就是你改動了相關的文件過後,tomcat就會開始自己加載,多來幾次,就很影響開發效率了;
maven3集成的jetty也能用,有個比較奇怪的點,就是沒辦法設置斷點,很不利於調試;
解決辦法:在maven管理外進行配置jetty解決以上兩個環境存在的問題,正常的打包編譯和部署還是採用maven。
但是內嵌jetty的時候,遇到了問題,公司項目用的是jdk1.7,jetty版本得用8以下的,於是下載的是jetty-distribution-7.6.21,下載鏈接:https://www.eclipse.org/jetty/previousversions.html ;
直接將jetty包放到WEB-INF下的自建文件夾,然後手動將jar進行build path,
附一下項目配置截圖:
啓動文件: AjaxJettyLauncher.java
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class AjaxJettyLauncher {
public static void main(String[] args) throws Exception {
AjaxJettyLauncher jl = new AjaxJettyLauncher();
jl.run();
}
protected void run() throws Exception {
Server server = new Server(8181);
WebAppContext context = new WebAppContext();
context.setContextPath("/alotcloud");
context.setDescriptor("webapp/WEB-INF/web.xml");
context.setResourceBase("src/main/webapp");
context.setParentLoaderPriority(true);
server.setHandler(context);
context.setClassLoader(Thread.currentThread().getContextClassLoader()); //定位class文件位置
server.start();
server.join();
}
}
對AjaxJettyLauncher.java 文件進行右鍵debug as--> java application 運行即可。
啓動過程中正常,但是訪問報錯, 提示 java.err.nojdk ; 意思是jdk版本不能被識別,其實原因是jetty版本對jdk版本有要求
jetty7版本里面有兩個常用的版本,一個是jetyy7.6XX ,另外一個是jetty7.4XX,很碰巧,我用的是jdk1.7,jetty 版本7.6XX,此處內心有點波動
解決辦法:
1.升級jdk7爲1.8, 目前jdk7或8版本已經算低版本了,但是公司有公司的要求,所以大家各自取捨。
2.jetty降級,將jetty7.6 降級爲 7.4版本的。測試通過。
運氣好,我本地通過嘗試更換jdk7位jdk8過後,能解決問題,大致推測出是jetty版本和jdk版本上的差異問題,然後再尋找相關資料,針對性的去查詢資料省下不少時間。
網上也查詢過大多數的資料,比如說你的eclipse環境不能用jre,得用jdk等等之類的,都試過,對我這種情況沒有效果。
還有讓 在jetty下的start.ini中增加這個配置,org.apache.jasper.compiler.disablejsr199=true 可解決這個問題,但是我是內嵌jetty啓動項目,沒有start.ini 文件吶。不過也感謝所有在網上輸出文章的網友!