下载jetty-6.1.19.zip
注意:新版本的好多对象和方法都跟旧版本不一样,现在网上大多是以前的版本的例子,我的例子是最新版本的例子。
以我的经历来看,搞清楚导入那些jar包是非常重要的,是成功的关键,
首先是这三个jar包,它是jetty支持自身语法的jar包
jetty-6.1.19.jar
jetty-util-6.1.19.jar
servlet-api-2.5-20081211.jar
后面还要jar包,咱们等遇到问题在导入。
启动一个简单的jetty服务器的代码:
.....
import java.io.File;
import java.io.IOException;
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.NCSARequestLog;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.ContextHandlerCollection;
import org.mortbay.jetty.handler.DefaultHandler;
import org.mortbay.jetty.handler.HandlerCollection;
import org.mortbay.jetty.handler.RequestLogHandler;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;
public class SimpleHttpServer {
Server server;
int port;
final int DEFAULTPORT = 8080;
Connector connector = new SelectChannelConnector();
HandlerCollection handlers = new HandlerCollection();
ContextHandlerCollection contexts = new ContextHandlerCollection();
RequestLogHandler requestLogHandler = new RequestLogHandler();
WebAppContext context;
public SimpleHttpServer() throws IOException{
initialize(null,0,null,null);
}
public SimpleHttpServer(File webAppDir, int port,String host, File logFile) throws IOException {
initialize(webAppDir,port,host,logFile);
}
protected void initialize(File webAppDir, int port,String host, File logFile) throws IOException {
webAppDir = webAppDir == null ? new File(new File("").getAbsoluteFile(), "WebRoot")
: webAppDir;
server = new Server();
this.port = port==0? DEFAULTPORT:port;
connector.setPort(this.port);
if(host!=null&&host.length()>1)connector.setHost(host);
server.setConnectors(new Connector[] { connector });
handlers.setHandlers(new Handler[] { contexts, new DefaultHandler(),
requestLogHandler });
context = new WebAppContext(contexts, webAppDir
.getAbsolutePath(), "/");
server.addHandler(handlers);
//jetty日志
logFile = logFile == null ? new File(new File("").getAbsoluteFile(),
"jetty.log") : logFile;
logFile.createNewFile();
NCSARequestLog requestLog = new NCSARequestLog(logFile
.getAbsolutePath());
requestLog.setExtended(false);
requestLogHandler.setRequestLog(requestLog);
server.setSendServerVersion(true);
}
public void start() throws Exception{
if(this.server!=null)
this.server.start();
}
public static void main(String[] args) throws Exception {
SimpleHttpServer server = new SimpleHttpServer(null,8080,null,null);
server.start();
}
}
.....
当然,这只是我用到得jetty的功能,它还有更方便但也更复杂的XML配置启动方式,在这里不便叙述。
在用main函数启动这段代码时日志文件会显示:
NO JSP Support for /test, did not find org.apache.jasper.servlet.JspServlet
这是由没有jspServlet这个类的jar包引起的,而这些jsp的jar包在jetty-6.1.19.zip中都有,
但它有两种:jsp2.0和jsp2.1
在这里要注意一下如果用jsp2.1最好用jdk1.5及或以上版本,否则当打开jsp页面时会抛出异常:
FATAL: Exception initializing page context
java.lang.VerifyError: (class: org/apache/jasper/runtime/PageContextImpl, method: getELResolver signature: ()Ljavax/el/ELResolver;) Incompatible argument to function
at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:157)
..............................................
..............................................
所以若不想见到这个异常最好直接选择jsp2.0的jar。
然而jsp2.0的jar比较多,会让程序显得很乱。
当把jsp2.0(2.1)中的jar包都导入后,嵌入式jetty所需的jar包就都导完整了。
这时就能正常的访问每一个jsp页面了。