使用jetty做webserver大体可分为3步:首先配置webserver,如指定起始页是哪个文件等,然后利用jetty写一个server,放在某一个类的main()方法里,最后用shell脚本启动这个main()方法。但实际启动webserver的过程则正好相反,用户首先运行shell脚本,这个脚本运行一个java的main()方法,这个方法里定义了配置文件在什么地方,首先启动哪个页面。下面按照运行顺序分别说明这三个步骤。 运行启动脚本 脚本应该是一个bat(on windows)或者sh(on unix)文件,下面是一个bat示例:
"%JAVA_HOME%\bin\java" -javaagent:%GODU_HOME%\WebRoot\WEB-INF\lib\spring\org.springframework.instrument-3.0.4.RELEASE.jar -Xms256m -Xmx512m -Dfile.encoding=GBK -Dservice_name=goduweb -Djava.awt.Window.locationByPlatform=true -cp %JARS% com.boco.godu.web.server. SimpleJettyServer 8080
实际上就是在%JARS%指定的所有jar包里搜索名为SimpleJettyServer的类,运行其main方法,且带一个参数8080; 写启动类 下面是一个类main()方法内容:
public static void main(final String[] args) throws Exception {
if(args.length>0){
try{
port= Integer.parseInt(args[0]);
}catch(NumberFormatException e){
throw new Exception("web端口设置出错!");
}
}
Server server = new Server();
SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(port);
connector.setThreadPool(new QueuedThreadPool(150));// 设置服务线程数量
server.addConnector(connector);
WebAppContext context = new WebAppContext();
context.setContextPath("/godu");
context.setDescriptor("WebRoot/WEB-INF/web.xml");
context.setResourceBase("WebRoot");
context.setConfigurationDiscovered(true);
server.setHandler(context);
server.start();
}
其中"Server server = new Server();"中的Server类的全名是org.eclipse.jetty.server.Server,因此最后"server.start()"启动的就是一个jetty服务器,这种jetty服务器的特点是运行在启动它的shell(windows上是bat)命令进程中,当这个进程被关闭时,相应的webserver也就不存在了; 配置webserver 从第二步中可以看出,server的配置信息放在了"WebRoot/WEB-INF/web.xml"中,这个文件中有如下一段:
这就定义了当用户在浏览器里输入服务器IP地址并回车后,初始页面是WebRoot文件夹下的index.jsp文件;