jetty快速构建应用内服务

来源:互联网 发布:usb接口测试软件 编辑:程序博客网 时间:2024/05/24 01:49

我们是否会有这样的烦恼,在PC应用中需要开放HTTP接口供浏览器访问,自己实现HTTP协议很麻烦,使用如Tomcat的Web容器又感觉小题大做,那么jetty就是一个不错的选择,jetty既可以独立作为Web容器运行,又可以直接嵌入我们的应用,可以快速的构建出应用内的服务。
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
使用jetty,我们需要添加相关的包,使用maven可以方便我们组织包,我们只需要在maven中添加:

<dependency>    <groupId>org.eclipse.jetty</groupId>    <artifactId>jetty-server</artifactId>    <version>7.6.11.v20130520</version></dependency><dependency>    <groupId>org.eclipse.jetty</groupId>    <artifactId>jetty-servlet</artifactId>    <version>7.6.11.v20130520</version></dependency><dependency>    <groupId>org.eclipse.jetty</groupId>    <artifactId>jetty-webapp</artifactId>    <version>7.6.11.v20130520</version></dependency><dependency>    <groupId>junit</groupId>    <artifactId>junit</artifactId>    <version>4.12</version>    <scope>test</scope></dependency>

上面的配置我们可以按需配置,如果我们需要使用Servlet,则需要添加jetty-servlet,如果需要使用war程序,则需要添加jetty-webapp,需要注意的是,如果war中包含jsp,我们还需要jsp相关的包,详情可访问:http://www.eclipse.org/jetty/documentation/current/framework-jetty-osgi.html#_using_jsps。

添加完所需包后,直接上测试代码:

package com.jianggujin.jetty;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.eclipse.jetty.server.Handler;import org.eclipse.jetty.server.NCSARequestLog;import org.eclipse.jetty.server.Server;import org.eclipse.jetty.server.handler.ContextHandler;import org.eclipse.jetty.server.handler.IPAccessHandler;import org.eclipse.jetty.server.handler.RequestLogHandler;import org.eclipse.jetty.server.handler.ResourceHandler;import org.eclipse.jetty.servlet.ServletContextHandler;import org.eclipse.jetty.servlet.ServletHandler;import org.eclipse.jetty.servlet.ServletHolder;import org.eclipse.jetty.webapp.WebAppContext;import org.junit.Test;public class JettyServer{   private final int SERVER_PORT = 80;   public Handler initResourceHandler()   {      ResourceHandler handler = new ResourceHandler();      handler.setResourceBase("web");      handler.setWelcomeFiles(new String[] { "welcom.html" });      return handler;   }   public Handler initIPAccessHandler()   {      IPAccessHandler handler = new IPAccessHandler();      handler.addBlack("127.0.0.1");      handler.setHandler(initResourceHandler());      return handler;   }   public Handler initRequestLogHandler()   {      RequestLogHandler handler = new RequestLogHandler();      NCSARequestLog requestLog = new NCSARequestLog("web/log.txt");      handler.setRequestLog(requestLog);      handler.setHandler(initResourceHandler());      return handler;   }   public Handler initContextHandler()   {      ContextHandler handler = new ContextHandler("/context");      handler.setHandler(initResourceHandler());      return handler;   }   public Handler initServletHandler()   {      ServletHandler handler = new ServletHandler();      handler.addServletWithMapping(new ServletHolder(new MyServlet()), "/*");      return handler;   }   public Handler initServletContextHandler()   {      ServletContextHandler handler = new ServletContextHandler();      handler.addServlet(new ServletHolder(new MyServlet()), "/*");      return handler;   }   public Handler initWebAppContext()   {      WebAppContext webapp = new WebAppContext();      webapp.setContextPath("/");      webapp.setWar("web/test.war");      return webapp;   }   @Test   public void server()   {      Server server = new Server(SERVER_PORT);      try      {         server.setHandler(initWebAppContext());         server.start();         server.join();      }      catch (Exception e)      {         e.printStackTrace();      }   }   public class MyServlet extends HttpServlet   {      private static final long serialVersionUID = 1L;      protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException      {         response.setContentType("text/html");         response.setStatus(HttpServletResponse.SC_OK);         response.getWriter().println("<h1>MyServlet</h1>");      }   }}

测试的时候,我们可以更换server()测试方法中使用的handler来查看不同handler的效果。

0 0
原创粉丝点击