1. 程式人生 > >eclipse 項目中嵌入jetty

eclipse 項目中嵌入jetty

重復 ips sed images test path hand auth color

  Jetty是一個提供HHTP服務器、HTTP客戶端和javax.servlet容器的開源項目,Jetty 目前的是一個比較被看好的 Servlet 引擎,它的架構比較簡單,也是一個可擴展性和非常靈活的應用服務器,它有一個基本數據模型,這個數據模型就是 Handler,所有可以被擴展的組件都可以作為一個 Handler,添加到 Server 中,Jetty 就是幫你管理這些 Handler。

  最近工作中需要在項目中集成jetty,由於之前從來沒有用過jeety,所以耗費了我多半天的時間去學習,基本實現了jetty嵌入集成,我自己搭建了一個簡單的springMvc框架,簡單實現了controller請求跳轉jsp頁面的小功能,這裏springMvc的創建就不在這裏敘述了。不會的可以去網上上查找資料。項目結構如下:

  技術分享

  首先在項目中導入相應的jar包,如下:

   jetty-all-8.1.17.v20150415.jar
   servlet-api.jar
   ant-1.6.5.jar
   core-3.1.1.jar
   jsp-2.1.jar
   jsp-api-2.1.jar
   ant-xmltask.jar
   jetty-util-6.1.9.jar

  其次創建一個入口方法用於啟動 jetty,代碼如下:

/**
 * 以內置Jetty模式啟動Web應用
 * 提示:請以debug as java application的方式啟動
 */
public
class AOS { /** * 啟動內置服務器 * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { AOSServer aosServer = new AOSServer(); aosServer.setWebContext("/testjetty"); //項目啟動的上下文名稱 aosServer.setPort(10010); //服務的端口號 aosServer.start(); //啟動服務 } }

  最後編寫具體的jetty啟動方法,代碼如下:

/**
 * <b>基於Jetty的嵌入式Servlet容器</b>
 *
 * @author atom.wu
 * @date 2008-06-06
 * @since 1.0
 */
public class AOSServer {

    private static Logger log = LoggerFactory.getLogger(AOSServer.class);

    /**
     * 監聽端口, 缺省為80
     */
    private int port = 80;

    /**
     * 應用上下文, 缺省為/(無上下文)
     */
    private String webContext = "/";

    public AOSServer() {

    }
    /**
     * 構造Server實例
     *
     * @param pWebContext
     * @param pPort
     */
    public AOSServer(String pWebContext, int pPort) {
        setWebContext(pWebContext);
        setPort(pPort);
    }

    public int getPort() {
        return port;
    }

    /**
     * 監聽端口, 缺省為80
     *
     * @param port
     */
    public void setPort(int port) {
        this.port = port;
    }

    public String getWebContext() {
        return webContext;
    }

    /**
     * 應用上下文, 缺省為/(無上下文)
     *
     * @param webContext
     */
    public void setWebContext(String webContext) {
        this.webContext = webContext;
    }
    

    /**
     * 啟動Jetty容器
     */
    public void start() throws Exception {
        long start = System.currentTimeMillis();
        final String webRoot = System.getProperty("user.dir") + "/WebContent"; //工程路徑
        Server server = new Server();
        // 設置在JVM退出時關閉Jetty的鉤子。
        server.setStopAtShutdown(true);
        SelectChannelConnector connector = new SelectChannelConnector();
        //disable nio cache to unlock the css and js file when running
        connector.setUseDirectBuffers(false);
        // 解決Windows下重復啟動Jetty居然不報告端口沖突的問題.
        connector.setReuseAddress(false);
        connector.setPort(port);
        server.setConnectors(new Connector[]{connector});
        WebAppContext context = new WebAppContext();
        context.setResourceBase("WebContent");
        context.setContextPath(webContext);
        //設置表單提交大小 (缺省值:200000)
        context.setMaxFormContentSize(10000000);
        context.setParentLoaderPriority(true);
        //針對jetty使用jstl的特殊設置,掃描tld文件。指定哪些jar中可能含有tld。
        context.setAttribute("org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern", ".*/.*jsp-api-[^/]*\\.jar$|.*/.*jsp-[^/]*\\.jar$|.*/.*taglibs[^/]*\\.jar$|.*/.*jstl[^/]*\\.jar$");
        server.setHandler(context);
                
        boolean isSuccess = true;
        try {
            server.start();
        } catch (BindException e) {
            isSuccess = false;
        } catch (Exception e) {
            isSuccess = false;
        } finally{
            String msg = "sa-web啟動成功";
            String supportMsg = " ";
            if ( !isSuccess) {
                msg = "sa-web啟動失敗";
                log.error(msg);
                msg = msg + supportMsg;
                System.out.println(msg);
                System.exit(0);
            }else {
                Toolkit toolkit = Toolkit.getDefaultToolkit();
                Clipboard clipboard = toolkit.getSystemClipboard();
                webContext = webContext.equals("/") ? "" : webContext;
                String webUrl = "http://localhost";
                if (port == 80) {
                    webUrl = webUrl + webContext;
                }else {
                    webUrl = webUrl + ":" + port + webContext;
                }
                StringSelection stringSel = new StringSelection(webUrl);
                clipboard.setContents(stringSel, null);
                long alltime = System.currentTimeMillis() - start;
                msg = msg + "[" + alltime + "毫秒]" + " >> " + webUrl + supportMsg;
                System.out.println(msg);
                server.join(); //線程阻塞
            }
        }
    }

  啟動jetty 服務。

技術分享

瀏覽器打開地址:

技術分享

  

eclipse 項目中嵌入jetty