几年前,如果你不用EJB,很多人都用IDE+tomcat插件做web开发。 现在越来越多人使用jetty了。这不是简单地用Jetty替换tomcat,巧妙的地方在于我们可以直接用main函数在IDE里启动Jetty. 这样,你不需要配置IDE的server。不同于IDE+tomcat插件的方式需要两个project,web app和server project. 使用下面介绍的方式你只有一个java project就行. 开发环境更简单,debug也更方便,不需要remote debug的方式,jetty非常快,可以明显提高开发效率。

参考了网上的一些文章,整理了一下。本文以Eclipse作为IDE。最后有可以运行的示例代码下载,非常简单。

1. 建立Java project(不必是dynamic web project), 取个名字,比如jetty

2. 建立jetty目录及其子目录如图所示。 所有文件都可以在最后的附件里找到。略作一点说明:webdefault.xml通常不需要你改。它是web.xml之外的一个配置文件,配置一些公共属性。web app的文件,jsp之类的都放在web目录下。web.xml和index.jsp都是示例性质最简单的。lib目录下需要放一些jetty的jar包,也一样在附件里有

p_w_picpath

webapp内嵌的jetty容器启动类  org.mortbay.jetty.Server

package jetty;
   2:
   3: import org.mortbay.jetty.Connector;
   4: import org.mortbay.jetty.Server;
   5: import org.mortbay.jetty.nio.SelectChannelConnector;
   6: import org.mortbay.jetty.webapp.WebAppContext;
   7:
   8: public class OneWebApp
   9: {
  10:     public static void main(String[] args) throws Exception
  11:     {
  12:         String jetty_home = "jetty";
  13:         int port = 8020;
  14:
  15:         Server server = new Server();
  16:
  17:         Connector connector=new SelectChannelConnector();
  18:         connector.setPort(port);
  19:         server.addConnector(connector);
  20:
  21:         WebAppContext webapp = new WebAppContext(jetty_home + "/web", "/jetty");
  22:         webapp.setDefaultsDescriptor(jetty_home+"/etc/webdefault.xml");
  23:
  24:         server.setHandler(webapp);
  25:
  26:         server.start();
  27:         //server.join();
  28:     }
 }
 可以run这个java文件,然后在浏览器里访问http://localhost:8020/jetty看结果。
(FEP的启动方式)BAT文件中:
@echo on

java -classpath ./WEB-INF/classes;./WEB-INF/lib/jetty-6.1.14.jar;./WEB-INF/lib/jetty-util-6.1.14.jar;./WEB-INF/lib/servlet-api-2.5-6.0.2.jar cn.wadata.hdc.fep.jetty.JettyServer ./WEB-INF/conf/application.properties

pause


入口:
public class JettyServer {
 public static void main(String[] args) throws Exception {

 Properties props = new Properties();
 if(args.length > 0 && args[0]!= null) {
 props.load(new FileInputStream(args[0]));
 }

 int httpPort = Integer.valueOf(props.getProperty("HED.FEP.HTTP_PORT").trim());
 
 // Jetty HTTP Servlet Server.
 Server server = new Server();
 QueuedThreadPool threadPool = new QueuedThreadPool();
 // 设置线程池
 threadPool.setMaxThreads(500);
 server.setThreadPool(threadPool);
 // 设置连接参数
 Connector connector = new SelectChannelConnector();
 // 设置监听端口
 connector.setPort(httpPort);
 // 为服务设置连接器
 server.setConnectors(new Connector[] { connector });
 WebAppContext context = new WebAppContext();
 // 访问的路径
 context.setContextPath("/fep");
 // 启动的位置
 context.setWar(".");
 server.addHandler(context);
 server.setStopAtShutdown(true);
 server.setSendServerVersion(true);
 server.start();
 // 将服务添加到连接池中
 server.join();
 }
}
// 设置在JVM退出时关闭Jetty。server.setStopAtShutdown(true);   System.exit(0);
在线文档查看:
http://www.boyunjian.com/javadoc/org.apache.servicemix.bundles/org.apache.servicemix.bundles.jetty/6.1.26_4/_/org/mortbay/jetty/security/SslSocketConnector.html