2013-05-27 1 views
2

При использовании встроенного молы, т.е. регистрация сервлета, как это:Servlet 3.0 загрузить файл (@MultipartConfig) с вложенным причалом

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

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

Лобового MultipartConfig аннотации, кажется, не будет соблюдаться. Как регистрировать URL-адреса, поддерживающие загрузку файлов в Servlet 3.0? Обратное проектирование кода Jetty показывает, что это должно быть что-то вроде этого, но что такое «multi» ???

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

ответ

0

Jacob,

обработки аннотаций с Jetty в настоящее время поддерживается только на WebAppContexts, а затем и только если обработка аннотаций включена. В DOCO переговоры о включении аннотаций для веб-приложений с автономным причалу здесь Пристань-9: 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" 

и убедитесь, что банки аннотации обработки связанной на вашем пути к классам - от причала дистрибутива это: javax.annotation-1.1.0.v201108011116.jar org.objectweb.asm-3.1.0.v200803061910.jar

Янв

+0

Спасибо. Я проверил ссылку в вашем сообщении, но я ничего не видел о «разрешении» аннотаций для встроенного причала, только для автономной пристани. – Jacob

+0

@Jacob здесь [пример использования встроенного Jetty с аннотациями сервлета 3.0] (https://github.com/jetty-project/embedded-servlet-3.0/blob/master/src/test/java/com/company/foo /EmbedMe.java). –

1

MultipartConfigElement фактически имеет несколько конструкторов. Один принимает экземпляр аннотации MultipartConfig. Остальные принимают только местоположение или все доступные параметры в качестве параметров. Таким образом, самая легкая возможность использования всех значений по умолчанию будет

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