Добавить сервлет причала в dropwizard

Мне нужно добавить сервлет причала в мой уже существующий сервер, реализованный с использованием инфраструктуры dropwizard.

Чтобы быть более конкретным:

  1. У меня есть спокойный ресурс Foo, сопоставленный с URL-адресом «localhost: 8080/foo» с операциями CRUD.
  2. Теперь мне нужен сервлет причала, сопоставленный с URL-адресом «localhost: 8080/bar» и обрабатывающий все запросы к этому URL-адресу (в основном GET и POST).

Я не мог понять, как это сделать после некоторых поисков в Google. Может ли кто-нибудь дать мне направление или фрагмент? Спасибо!


person fengye87    schedule 23.04.2014    source источник
comment
Я предполагаю, что вы не можете изменить уже существующее приложение и хотите добавить еще одно приложение на этот же сервер. Если это так, не можете ли вы использовать какой-нибудь сервер переднего плана, который перенаправляет запросы к разным приложениям, работающим на разных портах?   -  person Manu Viswam    schedule 23.04.2014
comment
На самом деле у меня есть код, и я могу его изменить. Но вместо того, чтобы изменить его «много», я хочу просто реализовать сервлет и добавить его в основную функцию.   -  person fengye87    schedule 23.04.2014
comment
Я думаю, что не понимаю ваш вопрос ясно. Вы хотите направить все запросы к /bar в /foo? или эти две конечные точки выполняют совершенно разные задания, и вы просто хотите развернуть их на одном сервере.   -  person Manu Viswam    schedule 23.04.2014
comment
Последний. Существующий сервер по-прежнему будет обрабатывать запросы к '/foo', а новый сервлет будет обрабатывать запросы к '/bar'. Для удобства развертывания я хочу, чтобы они выполнялись в одном и том же процессе.   -  person fengye87    schedule 23.04.2014


Ответы (2)


Если вы используете Dropwizard 0.6.2, вы сможете сделать что-то подобное в своем методе run:

ServletBuilder builder = environment.addServlet(myServlet, "/bar");

Если вы используете Dropwizard 0.7.0, попробуйте следующее:

environment.getApplicationContext().addServlet("org.example.MyServlet", "/bar");
person condit    schedule 23.04.2014
comment
Если кого-то это волнует: второй параметр может содержать подстановочный знак, например «/bar/*», иначе сервлет будет обрабатывать запросы только к «/bar», но не к «/bar/foo». - person fengye87; 24.04.2014
comment
API версии 0.7.x также позволяет Class‹? расширяет Servlet› в качестве параметра, вам не нужно указывать FQN-String. - person Jan Galinski; 22.12.2014
comment
Похоже, это то же самое для Dropwizard 0.8.1 - person Dawngerpony; 29.04.2015

Для 0.7.0 у вас есть ServletEnvironment и несколько способов добавления сервлетов. Например:

@Override
public void run(ApplicationConfiguration configuration, Environment environment) throws Exception {
    environment.servlets().addServlet("foo", MySerlvet.class).addMapping("/bar");
}

Кстати, у вас также есть AdminEnvironment , который является расширением ServletEnvironment, и любые сервлеты, добавленные к нему таким же образом, будут доступны в /admin/bar.

person chrisjleu    schedule 22.11.2014