将jetty嵌入到应用中的简单案例

  前面说过jetty最普遍的应用是能够方便的嵌入到应用程序中,而不是做为应用服务器,下面就用最简单的demo来演示一个最简单的应用html

  一、下载并导入依赖前端

  首先应该创建一个普通的java项目,而后把依赖包导进去java

  关于依赖包的获取,第一种方式是将前面下载的jetty服务器中lib目录中的jar包导入便可web

  另外是在jetty下载页面上,上面是jetty服务器的下载连接,下面能够看到程序包的下载入口:编程

  

  选择第一个Jetty-9进去,会看到9.x的不少版本,点进去下载最新的:后端

  

  下载下来以后,将plugins中的java包加入到项目classpath便可api

  二、写一个demo浏览器

  首先编写一个处理器来处理web发过来的请求,TestController.java,代码以下:服务器

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;

public class TestController extends AbstractHandler {

    @Override
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        System.out.println(target);
        response.setContentType("text/html; charset=utf-8");
        request.setCharacterEncoding("utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        baseRequest.setHandled(true);
        PrintWriter out = response.getWriter();
        if(target.equals("/favicon.ico")) {
            System.out.println("1");
            out.println("404");
        } else {
            System.out.println("2");
            out.print("<h3>hello jetty!</h3>");
            if(request.getParameter("name") != null) {
                out.print(request.getParameter("name"));
            }
        }
    }

}

  准确来讲这里得Controller应该是Handler,必须继承于AbstractHandler,而且重写handle方法来处理请求,能够看到这里能够直接使用Servlet的api,默认状况下jetty请求完毕之后会后台有一个/favicon.ico的请求,虽然不影响前端显示,可是为了防止后端重复处理,因此在这里进行了一次过滤eclipse

  Handler写完以后,而后写一个入口的服务来加载Handler而且启动服务,这里是JettyService.java

import org.eclipse.jetty.server.Server;

public class JettyService {
    public static void main(String[] args) throws Exception {
        Server server = new Server(8989);
        server.setHandler(new TestController());
        server.start();
        server.join();
    }
}

  这样一个简单的demo就写完了,直接运行main方法启动服务

  

  而后打开浏览器访问:http://127.0.0.1:8989/?name=jetty能够看到下面结果

  

  事实上这里输入/xxx?name=xxx均可以被拦截,由于target是后台获得的,因此能够针对不一样的请求执行不一样的处理

  后台能够看到以下输出:

  

  能够看到嵌入jetty编程是很是简单和灵活的,这里只是一个最简单的案例,实际生产中还要使用不少高级的编程方式和配置