jetty快速构建应用内服务

我们是否会有这样的烦恼,在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值