8 years 4 months ago - 8 years 4 months ago#2517by sanco
sanco created the topic: jersey servlet and webcontext handler
Hello. I want to add web service to project using jersey. I used the below code for this.
ResourceConfig config = new ResourceConfig();
config.packages("jettyjerseytutorial");
ServletHolder servlet = new ServletHolder(new ServletContainer(config));
final ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContext.setContextPath("/");
//При необходимости иметь сервлет, добавляяем их в обработчики вот так
servletContext.addServlet(new ServletHolder(new HelloServlet()), "/hell");
/*
// поддержка расширяемости плагинами. На будующее, пото если понадобится приделаю сервлеты как плагины
for (final IChangeCustomerStateEvent event : ServiceLoader.load(IChangeCustomerStateEvent.class)) {
QLog.l().logger().info("Вызов SPI расширения. Описание: " + event.getDescription());
try {
event.change(this, state, newServiceId);
} catch (Throwable tr) {
QLog.l().logger().error("Вызов SPI расширения завершился ошибкой. Описание: " + tr);
}
}
*/
final HandlerList handlers = new HandlerList();
// Важный момент - поряд следования хандлеров
// по этому порядку будет передоваться запрос, если он еще не обработан
// т.е. с начала ищется файл, если не найден, то урл передается на исполнение команды,
// в комаедах учтено что урл для вебсокета нужно пробросить дальше, его поймает хандлер вебсокетов
//handlers.setHandlers(new Handler[]{resource_handler, new CommandHandler(), qWebSocketHandler});
handlers.setHandlers(new Handler[]{resource_handler, new CommandHandler(), servletContext});
// Загрузка war из папки
String folder = "./www/war/";
QLog.l().logger().info("Загрузка war из папки " + folder);
final File[] list = new File(folder).listFiles((File dir, String name) -> name.toLowerCase().endsWith(".war"));
if (list != null && list.length != 0) {
for (File file : list) {
final String name = file.getName().substring(0, file.getName().lastIndexOf(".")).toLowerCase();
QLog.l().logger().debug("WAR " + name + ": " + file.getAbsolutePath());
final WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/" + name);
webapp.setWar(file.getAbsolutePath());
handlers.addHandler(webapp);
}
}
jetty.setHandler(handlers);
After adding this code I can use my web serivce. But I could not load the plugins under war folder. The log shows that server succesfully load all war files under www/war folder but when I want to load on browser it shows nothing. for example i download QSmartboard plugin and put under www/war folder and start the server. Server load this plugin but when I try to open on browser but nothing load http:/localhost:8081/qsmartboard. can program run webserver and webcontextapp at the same port
sanco replied the topic: jersey servlet and webcontext handler
i found the reason. Last week i updated all jetty libs to latest version. Somehow zk framework not compability with jetty last version so downgrade jetty libs version and now both jersey web service and jetty webappcontext work without any problem