Jetty 是一个开源的servlet容器, 它为基于Java的web内容,例如JSP和servlet提供运行环境。
Jetty以其高效、小巧、可嵌入式等优点深得人心,尤其是启动速度Tomcat 6简直望尘莫及。
Jetty作为可选的servlet容器只是一个额外的功能,而它真正出名是因为它是作为一个可以嵌入到其他的Java代码中的servlet容器而设计的。这就是说,开发小组将Jetty作为一组Jar文件提供出来,因此你可以在你自己的代码中将servlet容器实例化成一个对象并且可以操纵这个容器对象。
可以提供给客户一个自己具有启动,停止以及管理功能的应用程序:Jetty对于普通的HTTP服务(没有servlet)只需要350k的内 存,这使得可以将其用在智能设备中。你可以提供基于web的控制面板并且具有Java web应用的所有功能而不用担心那些独立的容器所带来的压力。
一、在java project中添加jetty(直接copy官网中下载的文件)
1、下载 http://dist.codehaus.org/jetty/jetty-6.1.14/jetty-6.1.14.zip
2、新建一个java project (jettytest)
3、在工程目录下建jetty目录,然后再在jetty目录下新建etc(存放配置文件),lib(存放jetty的jar包),logs(存放web日志),webapps(存放多个或者一个web工程)四个目录
4、在JETTY_HOME/lib 和 JETTY_HOME/lib/jsp-2.1目录(如果没有JSP页面则可以不需要)下的所有jar包
core-3.1.1.jar,ant-1.6.5.jar,jetty-6.1.14.jar,jetty-util-6.1.14.jar,jsp-2.1.jar,jsp-api-2.1.jar,servlet-api-2.5-6.1.14.jar
5、从JETTY_HOME/ect中拷贝如下文件jetty.xml,webdefault.xml,realm.properties到新建工程的etc目录下
6、修改jetty.xml的内容,让其指定到webdefault.xml、webapps目录、realm.properties、logs目录的具体位置,默认是在工程的最外层目录,由于这两是放到jetty目录下面了,所以需要修改对应的目录位置。
<Call name="addLifeCycle"> <Arg> <New class="org.mortbay.jetty.deployer.WebAppDeployer"> <Set name="contexts"><Ref id="Contexts"/></Set> <Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webapps</Set> <Set name="parentLoaderPriority">false</Set> <Set name="extract">true</Set> <Set name="allowDuplicates">false</Set> <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set> </New> </Arg> </Call> <Set name="UserRealms"> <Array type="org.mortbay.jetty.security.UserRealm"> <Item> <New class="org.mortbay.jetty.security.HashUserRealm"> <Set name="name">Test Realm</Set> <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set> <Set name="refreshInterval">0</Set> </New> </Item> </Array> </Set> <Ref id="RequestLog"> <Set name="requestLog"> <New id="RequestLogImpl" class="org.mortbay.jetty.NCSARequestLog"> <Set name="filename"><SystemProperty name="jetty.logs" default="./logs"/>/yyyy_mm_dd.request.log</Set> <Set name="filenameDateFormat">yyyy_MM_dd</Set> <Set name="retainDays">90</Set> <Set name="append">true</Set> <Set name="extended">false</Set> <Set name="logCookies">false</Set> <Set name="LogTimeZone">GMT</Set> </New> </Set> </Ref>
7、在webapps目录下,新建一个目录manager(相当于是一个web工程的名称),然后再在这个目录下添加一个a.jsp文件(jetty会预编译jsp为java文件,最终会编译为class文件,需要导入JETTY_HOME/lib/jsp目录下的jar包)
8、添加一个启动jetty的java文件
package hb.jetty; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import org.mortbay.jetty.Server; import org.mortbay.jetty.handler.DefaultHandler; import org.mortbay.xml.XmlConfiguration; import org.xml.sax.SAXException; public class JettyServer { public static void main(String[] args) { Server server = new Server(8080); server.setHandler(new DefaultHandler()); XmlConfiguration configuration = null; try { configuration = new XmlConfiguration(new FileInputStream("D:\\JavaProject\\jettytest\\jetty\\etc\\jetty.xml")); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (SAXException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } try { configuration.configure(server); server.start(); } catch (Exception e) { e.printStackTrace(); } } }
9、在地址栏中输入http://localhost:8080/manager/,就能够显示出添加的jsp文件
如何在jetty中添加servlet
跟着上面的步骤来
1、在manger目录中添加WEB-INF目录,然后再在里面添加一个web.xml文件,里面的内容可以根据webdefault.xml文件中的内容拷贝过来,然后做相关的修改
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>myweb</display-name> <filter> <filter-name>filter2</filter-name> <filter-class>hb.jetty.Filter2</filter-class> </filter> <filter-mapping> <filter-name>filter2</filter-name> <url-pattern>/filter/*</url-pattern> </filter-mapping> </web-app>
2、在地址栏总输入如下内容 http://localhost:8080/manager/filter/
目录解构图
二、不使用配置文件设置jetyy的工程目录(配置文件用java代码说明)
import org.mortbay.jetty.Server; import org.mortbay.jetty.webapp.WebAppContext; public class JettyServer2 { public static void main(String[] args) throws Exception { //获取工程的根目录 String relativelyPath=System.getProperty("user.dir"); System.out.println(relativelyPath); Server server = new Server(8080); WebAppContext context = new WebAppContext(); context.setContextPath("/manager"); // context.setDescriptor("D:/JavaProject/jettytest/jetty/webapps/manager/WEB-INF/web.xml"); // context.setResourceBase("D:/JavaProject/jettytest/jetty/webapps/manager"); context.setDescriptor(relativelyPath + "/jetty/webapps/manager/WEB-INF/web.xml"); context.setResourceBase(relativelyPath + "/jetty/webapps/manager"); context.setParentLoaderPriority(true); server.setHandler(context); server.start(); server.join(); } }