嵌入式jetty的使用

 

下载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服务器的代码:
.....

package com.waysoft.server; 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页面了。

你可能感兴趣的:(文字&记号)