1. 程式人生 > >使用jetty作為內嵌伺服器啟動專案

使用jetty作為內嵌伺服器啟動專案

需求:把jetty作為內嵌的一個伺服器,直接啟動,web專案不用部署在應用伺服器中。在網上搜索了一些資料,參照後,都沒有成功,經過3天的研究,終於搞定了,記錄在此,以備查詢。

最開始用的jetty8.1,沒成功,後又下載7.6,仍然沒有成功,最後使用了jetty7.0後成功。對於8.1和7.6後來沒有再試,應該是一樣的步驟,有興趣或者有時間容後再試。

步驟:

1、首先下載jetty的jar包。

我下載的是jetty-all-7.0.2.v20100331.jar,servlet-api-2.5.jar。

參照網上的一個資料。

http://search.maven.org,  輸入 jetty-all-,搜尋,然後找到版本-7.0.2.v20100331的jar下載。

說明:直接從jetty官網上下載jetty的jar包應該是一樣的。我之所以下載這個,是因為之前用8.1版本jar包時候的總是提示server沒有start這個方法,因為當時不曉得是jar包的問題還是其他什麼問題,所以只好更換jar包進行重新測試。

2、寫啟動檔案。

MyServer.java

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.webapp.WebAppContext;

public class MyServer {
	public static void main(String[] args) throws Exception {
		Server server = new Server();

		Connector connector = new SelectChannelConnector();
		connector.setPort(8080);

		server.setConnectors(new Connector[] { connector });

		WebAppContext webAppContext = new WebAppContext("WebContent","/myProject");

		//webAppContext.setContextPath("/");
		webAppContext.setDescriptor("WebContent/WEB-INF/web.xml");
		webAppContext.setResourceBase("WebContent");
		webAppContext.setDisplayName("myProject");
		webAppContext.setClassLoader(Thread.currentThread().getContextClassLoader());
		webAppContext.setConfigurationDiscovered(true);
		webAppContext.setParentLoaderPriority(true);
		server.setHandler(webAppContext);
		System.out.println(webAppContext.getContextPath());
		System.out.println(webAppContext.getDescriptor());
		System.out.println(webAppContext.getResourceBase());
		System.out.println(webAppContext.getBaseResource());

		try {
			server.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("server is  start");
	}
}

3、直接在MyServer.java上點選右鍵,run as  -java application

4、在web.xml裡面定義一個起始頁面,比如index.jsp.

5、在webcontent下建立這個index.jsp檔案。

6、在瀏覽器內輸入:http://localhost:8080/myProject。

ok,可以看到這個jsp檔案了。

就是如此的簡單。

總結:

1、剛開始做的時候,參照網上的一些資料,在spring的配置檔案裡,加入了一堆jetty的<bean>設定,其實完全沒有必要。

2、最開始啟動成功後,訪問html檔案可以成功,但是訪問action總提示不存在,應該是路徑的問題,後檢視jetty的文件,加入了

webAppContext.setClassLoader(Thread.currentThread().getContextClassLoader());
這句話很重要,是定位class檔案位置的。

3、專案檔名的加入,需要

webAppContext.setContextPath("專案名");

否則的話,訪問的時候就沒有專案名稱了。

 目前需要寫個bat檔案,用於雙擊執行服務。

qidong.bat

echo off
@set LOCALCLASSPATH=./WebContent/WEB-INF/classes/
@for %%i in (".\WebContent\WEB-INF\lib\*.jar") do call "setpath.bat" %%i


set CLASSPATH=%LOCALCLASSPATH%;%CLASSPATH%
echo on
java -Dxport="%1"  -Xmx512m com.jetty.MyServer %2 %3 %4

setpath.bat
@set LOCALCLASSPATH=%LOCALCLASSPATH%;%1

啟動後,訪問瀏覽器,報

HTTP ERROR 500

Problem accessing /cipoa/common/error/500code.jsp. Reason:

    JSP support not configured
Powered by Jetty://

異常。

但是在eclipse裡啟動訪問是正常的。

在網上搜是沒有加入jetty對jsp支援的jar包,需要下載15m版本的jar包。

下載到這個15m的jar包後,將其中jsp資料夾下的jar包拷貝到專案中,再啟動,果然成功。