2012-01-30 65 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

相关问题