2015-05-26 34 views
0

我已經開始使用嵌入式Jetty服務器來啓動一些第三方WAR。 於是我就用WebAppContext:Jetty以編程方式將Web片段添加到Web上下文

Server server = new Server(port); 
WebAppContext ctx = new WebAppContext(); 
ctx.setContextPath("/samplePath"); 
ctx.setWar(<PATH_TO_WAR>); 
server.setHandler(ctx); 
server.start(); 
server.join(); 

此代碼的工作(我省略了異常處理簡潔這裏的緣故),但現在我想添加一些功能,而我要離開完整的戰爭(我的意思是,不要提取變化並再次壓縮)。 我的功能應該包括一些定製的SSO解決方案的整合,應增加以下內容:

  • 一個語境收聽
  • 一個Filter
  • 應該由這些過濾器和監聽
  • 讀一些背景帕拉姆變量定義

,因爲它不是由我們的團隊開發的,我不能改變這個SSO解決方案,我們寧願把它作爲一個第三方。

所以我認爲將所有這些添加到帶有web-fragment的模塊將是最好的方法。

我的問題是:什麼是使Jetty的Web上下文'知道'這個網頁片段的最佳方式是什麼?一個工作代碼段將是巨大的:)

當然,如果還有比這個web片段一個更好的選擇,我會很高興知道

碼頭的版本我目前使用的是(從我的POM .xml):9.2.10.v20150310

非常感謝!

+0

一個快速的問題,你有一個運行的Web應用程序,您需要包括幾個'servlet的class'不影響戰爭檔案正確嗎? –

+0

是的,確切地說。我不想僅添加servlet。我需要添加過濾器,上下文監聽器和上下文路徑變量。 –

回答

0

這裏是你可以指定一個web應用程序的方式以及過濾

import java.io.IOException; 
import java.util.EnumSet; 

import javax.servlet.DispatcherType; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.server.ServerConnector; 
import org.eclipse.jetty.server.handler.HandlerCollection; 
import org.eclipse.jetty.servlet.ServletHandler; 
import org.eclipse.jetty.webapp.WebAppContext; 

public class MultipleHandler { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     Server server = new Server(); 
     ServerConnector connectorA = new ServerConnector(server); 
     connectorA.setPort(55); 
     connectorA.setName("connA"); // connector name A 
     server.addConnector(connectorA); 
     HandlerCollection contexts = new HandlerCollection(); 
     server.setHandler(contexts); 
     // A WebApp 
     WebAppContext appA = new WebAppContext(); 
     appA.setContextPath("/samplePath"); 
     appA.setWar("<warFilePath>"); 
     appA.setVirtualHosts(new String[] { "@connA" }); // connector name A 
     contexts.addHandler(appA); 

     //Filter handler 
     ServletHandler handler = new ServletHandler(); 
     handler.addFilterWithMapping(DoWork.class, "/filter", 
       EnumSet.of(DispatcherType.REQUEST)); 
     contexts.addHandler(handler);  

     try { 
      server.start(); 
      server.join(); 
     } catch (Throwable t) { 
      t.printStackTrace(System.err); 
     } 

    } 


    public static class DoWork implements Filter { 

     @Override 
     public void destroy() { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { 
      System.out.print("Request filtered"); 

     } 

     @Override 
     public void init(FilterConfig arg0) throws ServletException { 
      // TODO Auto-generated method stub 

     } 

    } 

} 
+0

對不起,但這並沒有幫助我。過濾器不是問題,因爲它可以通過調用addFilter來設置WebAppContext。與此不同,我無法找到添加ContextFilter和Context Parameter變量的方式。因此,這個問題。不能接受這個答案,對不起 –

+0

雅。如果你沒有看到它,http://stackoverflow.com/questions/19530806/java-jetty-how-to-add-filter-to-embedded-jetty –

+0

謝謝,是的,我還沒有看到這個,但Jetty的API使用java.util.EventListener,它沒有實現javax.servlet.ServletContextListener,因此我無法從該偵聽器的方法訪問servlet上下文。我正在尋找解決方案,允許我將Web fragement jar放在文件系統的某個文件夾中,jetty會用它用來加載戰爭的類加載器加載它。 –

相關問題