2015-05-15 4 views
3

Извините, я все еще новичок в GWT. Я заметил, что когда мой проект вырос, объявлениями сервлетов для rpc в файле web.xml являются многие, многие и многие. Для одного * ServiceImpl класса, мы должны определить в web.xml, какКак минимизировать объявления сервлета для gwt-rpc в web.xml?

<servlet> 
    <servlet-name>greetServlet</servlet-name> 
    <servlet-class>com.my.testing.server.GreetingServiceImpl</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>greetServlet</servlet-name> 
    <url-pattern>/testing/greet</url-pattern> 
</servlet-mapping> 

В случае если есть 30 * ServiceImpl класса, они могут принять около 200 линий в web.xml для вызовов удаленных процедур. Итак, я хотел бы знать

  1. Является ли web.xml файлом единственное место для объявления сервлетов rpc?
  2. Есть какие-то пропуски декларативных стилей (я имею в виду через аннотации «@» и т. Д.)?
+0

http://codyburleson.com/2013/03/23/define-a-servlet-using-java-annotations/ –

ответ

3

GWT работает довольно хорошо без этих деклараций в web.xml, с помощью аннотаций:

/* 
* this is your server-side rpc-implementation 
*/ 
@WebServlet(name = "YourService", urlPatterns = {"/path/to/yourservice"}) 
public class YourServiceImpl extends RemoteServiceServlet implements YourService { 

    public void doSomething() { 
    //some code 
    } 
} 

/* 
* this is the corresponding rpc-interface 
*/ 
@RemoteServiceRelativePath("path/to/yourservice") 
public interface YourService implements RemoteService { 

    void doSomething(); 
} 

Результирующий путь к сервлета зависит от вас структуры проекта. Если ваш проект развернут в вашем корневом каталоге серверов, вы найдете там свой сервлет (с указанным вами путем: urlPatterns). Однако, если вы развернули свой проект под своим собственным URI, вам придется добавить его к urlPattern.

+0

Спасибо за ваш ответ. Но я пока не поймаю. Как объявить с ** @ WebServlet **? Как насчет моих сервисов, классов ServiceAnync, ServiceImpl? Можете ли вы поддержать меня примером кода? – Cataclysm

+0

Я всегда получаю 404. Где поставить ** @ WebServlet **? – Cataclysm

+1

Что такое версия web.xml? По мере того как я recal, оно должно быть над 3.0 для использования аннотаций – Heisenberg

2

Если вы используете Guice, этот случай можно легко решить, используя ServletModule. В этом модуле вы можете программно определить (и проверить в JUnit) все ваши сервлеты и фильтры RPC.

Пример:

public class WebModule extends ServletModule { 

    @Override 
    protected void configureServlets() { 
    // configure filters 
    filter("/*").through(CacheControlFilter.class); 
    filter("/*").through(LocaleFilter.class); 

    // bind XSRF servlet 
    bind(XsrfTokenServiceServlet.class).in(Singleton.class); 
    serve("/gwt/xsrf").with(XsrfTokenServiceServlet.class); 

    // configure servlet mapping 
    serve("path/to/servlet").with(LoginServiceImpl.class); 
    } 
} 
Смежные вопросы