需求:把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 (".WebContentWEB-INFlib*.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包拷贝到项目中,再启动,果然成功。
http://akunamotata.iteye.com/blog/1331229早看到这个文章就不用这么麻烦了。