带嵌入式jetty的Servlet 3.0文件上传(@MultipartConfig)

时间:2013-05-27 02:30:20

标签: java jetty embedded-jetty

使用jetty嵌入时,即注册这样的servlet:

ServletContextHandler context = new ServletContextHandler(server, "/", false, false);

s = new UploadServlet(jee);
context.addServlet(new ServletHolder(s), "/upload");

MultipartConfig注释似乎不受尊重。如何在Servlet 3.0下注册支持文件上传的URL?反向工程Jetty代码显示它必须是这样的,但什么是“多”???

ServletHolder sh = new ServletHolder(new UploadServlet(jee));
Object multi;
sh.getRegistration().setMultipartConfig(new MultipartConfigElement(multi));
context.addServlet(sh, "/upload");

2 个答案:

答案 0 :(得分:1)

MultipartConfigElement实际上有多个构造函数。一个采用MultipartConfig注释的实例。其他选项仅将位置或所有可用选项作为参数。所以使用所有默认值的最简单的可能性是

sh.getRegistration().setMultipartConfig(new MultipartConfigElement(""));

答案 1 :(得分:0)

雅各

目前仅在WebAppContexts上支持使用Jetty处理注释,并且仅在启用注释处理时才支持。 jetty-9 doco在这里讨论如何为具有独立码头的Web应用程序启用注释:http://www.eclipse.org/jetty/documentation/current/annotations.html

因此,将ServletContextHandler转换为WebAppContext,并使用以下列表调用setConfigurationClasses():

    "org.eclipse.jetty.webapp.WebInfConfiguration",
    "org.eclipse.jetty.webapp.WebXmlConfiguration",
    "org.eclipse.jetty.webapp.MetaInfConfiguration",
    "org.eclipse.jetty.webapp.FragmentConfiguration",
    "org.eclipse.jetty.webapp.JettyWebXmlConfiguration",
    "org.eclipse.jetty.annotations.AnnotationConfiguration"

并确保类路径上与注释处理相关的jar文件 - 来自jetty发行版,它们是: javax.annotation-1.1.0.v201108011116.jar org.objectweb.asm-3.1.0.v200803061910.jar