在 servlet 中以编程方式调用过滤器(使用码头/火花创建)?
Posted
技术标签:
【中文标题】在 servlet 中以编程方式调用过滤器(使用码头/火花创建)?【英文标题】:Invoking filter programmatically inside servlet (Created using jetty/spark)? 【发布时间】:2012-02-22 06:34:51 【问题描述】:我正在尝试使用 spark 微框架 (http://www.sparkjava.com/readme.html) 创建一个轻量级、独立的 Web 服务。我需要处理多部分表单(我想同时接收文件和一些键值数据)。
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*/
);
这可能吗?
【问题讨论】:
我无法理解您为什么要以编程方式调用过滤器。将功能重构为可以由过滤器和您的非 Web 应用程序代码调用的非过滤器类不是更有意义吗? @DaveNewton:正如问题中提到的,我没有创建过滤器。我宁愿按原样使用代码,也不愿了解其内部结构,然后重构为非过滤器。 我不知道这怎么可能;它们不返回响应,它们依赖于过滤器链等。重构功能位比设置请求处理链更容易。 【参考方案1】:我没有加载 Jetty(或 Spark)的源代码,但我只是查看 Spring 源代码并找到了一个名为 MultipartResolver
的接口,它有一个方法 resolveMultipart
,看起来可以你想要/需要什么。如果在 Jetty 中找到实现类似命名接口的类,我不会感到惊讶:
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 包还提供了一组很好的实用程序来执行您想要的相同类型的进程,而无需重新处理 Jetty 过滤器。
【讨论】:
谢谢!只是我需要进入 Java 的信息,完成工作,然后再次退出;)以上是关于在 servlet 中以编程方式调用过滤器(使用码头/火花创建)?的主要内容,如果未能解决你的问题,请参考以下文章
在 SWIFT 2.x 中以编程方式使用 NavigationController 调用 UIViewController
在 TableViewHeader 中以编程方式调用 IBAction