2012-01-30 64 views
2

我想創建一個輕量級,自包含的使用sparkmicroramework(http://www.sparkjava.com/readme.html)的webservice。我需要使用多部分表單(我想同時接收文件和一些鍵值數據)。在servlet內部以編程方式調用過濾器(使用jetty/spark創建)?

Jetty(Spark所依賴的)提供了一個MultiPartFilter過濾器,它有助於處理多部分數據,但我不明白如何在代碼中使用該過濾器。

我需要以編程方式執行此操作,因爲此服務不會作爲巨型java安裝的一部分進行部署,而是要支持python應用程序。

我的代碼是沿着這些線路:

public class Transcoder { 

    static Base64 base64 = new Base64(); 

    public static void main(String[] args) { 

     org.apache.log4j.BasicConfigurator.configure(); 

     post(new Route("/convert") { 
      @Override 
      public Object handle(Request request, Response response) /*throws Exception, Docx4JException*/{ 

       //I want to do something like this: 
       new_request = new MultiPartFilter().process_my_request(request); 
       /* work with altered request*/ 
     }); 

    } 

} 

這可能嗎?

+0

我不明白爲什麼你想要以編程方式調用過濾器。將功能重構爲可以被過濾器和非web應用程序代碼調用的非過濾器類是否更有意義? – 2012-01-30 13:22:22

+0

@DaveNewton:正如問題中提到的,我沒有創建過濾器。我寧願按原樣使用代碼,而不是理解其內部,並重構爲非過濾器。 – Marcin 2012-01-30 13:33:45

+0

我不知道這是多麼可能;它們不返回響應,它們依賴於過濾器鏈等。重構功能位比建立請求處理鏈更容易。 – 2012-01-30 14:02:37

回答

1

我沒有加載Jetty(或Spark)的源代碼,但是我只是在查看Spring源代碼,發現一個名爲MultipartResolver的接口,它有一個方法resolveMultipart,它看起來像它會做你想做的/需要。我也不會驚訝地發現,在實施碼頭類似的命名接口類:

public interface MultipartResolver { 
/* Parse the given HTTP request into multipart files and parameters, 
* and wrap the request inside a 
* {@link org.springframework.web.multipart.MultipartHttpServletRequest} object 
* that provides access to file descriptors and makes contained 
* parameters accessible via the standard ServletRequest methods. 
* .... 
*/ 
MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException; 

注意Commons-FileUpload包還提供了一套很好utitilies執行所需的相同類型的過程中,而無需重新工作碼頭過濾器。

+0

謝謝!只有我需要進入java的信息,完成這項工作,然後再次出去;) – Marcin 2012-01-30 15:09:54

相關問題