將jetty嵌入到應用中的簡單案例


  前面說過jetty最廣泛的應用是可以方便的嵌入到應用程序中,而不是作為應用服務器,下面就用最簡單的demo來演示一個最簡單的應用

  1、下載並導入依賴

  首先應該建立一個普通的java項目,然后把依賴包導進去

  關於依賴包的獲取,第一種方式是將前面下載的jetty服務器中lib目錄中的jar包導入即可

  另外是在jetty下載頁面上,上面是jetty服務器的下載鏈接,下面可以看到程序包的下載入口:

  

  選擇第一個Jetty-9進去,會看到9.x的很多版本,點進去下載最新的:

  

  下載下來之后,將plugins中的java包加入到項目classpath即可

  2、寫一個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的請求,雖然不影響前端顯示,但是為了防止后端重復處理,所以在這里進行了一次過濾

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM