2016-10-14 5 views
13

Я создал проект eclipse maven и добавил зависимость от причала. Затем я сделал простой сервлет и класс, который запускает сервер причала. Вот что я получил до сих пор:Использование web.xml для conf программно начато jetty

package com.example.jetty; 

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.servlet.ServletContextHandler; 

public class App { 
    public static void main(String[] args) throws Exception { 
     Server server = new Server(80); 
     ServletContextHandler servletContext = new ServletContextHandler(server, "/"); 
     servletContext.addServlet(MyServlet.class, "/"); 
     server.start(); 
    } 
} 

Моя проблема заключается в том, что большинство обучающих программ, которые я вижу у web.xml для конфигурирования сервлетов и тому подобное. Я не могу найти программные способы сделать некоторые из них. Могу ли я создать web.xml и по-прежнему запускать свой причал программно и каким-то образом использовать этот web.xml для конфигурации?

Чтобы быть более конкретным, мне нужно написать true в web.xml. Я не нашел способ сделать это программно.

+0

Почему бы просто не использовать maven для выполнения этой работы? В качестве альтернативного решения можно использовать плагин Maven. https://www.eclipse.org/jetty/documentation/9.4.x/jetty-maven-plugin.html – artificerpi

+0

Хум ... Не совсем понятно для меня. Программный путь всегда отличается от декларативного. Что именно вы хотите сделать? –

+0

Чтобы быть более конкретным, мне нужно написать true в web.xml. Я не нашел способ сделать это программно. – user1985273

ответ

7

Начну с примера, который вы можете заинтересовать Если вы хотите использовать web.xml с программным способом Jetty сервера, то вы можете сделать следующее:.

WebAppContext context = new WebAppContext(); 
context.setContextPath("/myWebApp"); 
context.setExtractWAR(false); 
context.setDescriptor("/file/system/path/to/your/wab/app/WEB-INF/web.xml"); 
context.setResourceBase("/file/system/path/to/your/wab/app"); 
context.setConfigurationDiscovered(false); 

HandlerList handlerList=new HandlerList(); 
handlerList.addHandler(webAppContext); 

Server server = new Server(threadPool); 
server.setHandler(handlerList); 
server.start(); 

Что касается программно конфигурации вы можете попробуйте использовать API Servlet 3.x, который поддерживается от Jetty 8.x (текущий Jetty версии 9.x) и может быть полностью настроен программно.

+0

Благодарим вас за anwser. Правильно ли я понимаю, что мне нужна эта зависимость сервлета 3.x api, только если я хочу ее программно настроить? Вы также знаете пример того, как использовать этот api для настройки свойства, поддерживаемого асинхронным доступом? – user1985273

+0

Чтобы включить 'Servlet 3.0', вам нужно указать' version = "3.0" 'в вашем' web.xml', все остальное можно оставить пустым, поэтому вы можете поместить такой «web.xml» в путь класса, а не в файловую систему. '@ WebServlet' с параметром' asyncSupported = true' может использоваться для 'async-supported'. –

+0

[здесь] (https://github.com/jetty-project/embedded-servlet-3.1) вы можете найти пример для 'Jetty' с' Servlet 3.0' –

Смежные вопросы