將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編程是很是簡單和靈活的,這裏只是一個最簡單的案例,實際生產中還要使用不少高級的編程方式和配置

相關文章
相關標籤/搜索