2013-03-19 1 views
0

В настоящее время я следующие web.xml конфигурации:Отображение сервлета Spring-mvc, возможно ли иметь «/» для сервлета 1 и «/ server /» для сервлета 2?

<servlet> 
    <servlet-name>Website</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Website</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>Server</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Server</servlet-name> 
    <url-pattern>/server/</url-pattern> 
</servlet-mapping> 

Что касается двух примеров контроллеров:

@Controller 
public class ApiRequests { 
    protected final Logger logger = Logger.getLogger(ApiRequests.class); 

    @RequestMapping(value = "api.json", produces = {"application/json"}, method = RequestMethod.GET) 
    @ResponseBody 
    public String handleActionJson(final HttpServletRequest request){ 
     return "{test: 'blaat'}"; 
    } 
} 

И

@Controller 
@RequestMapping("/") 
public class IndexController { 
    @RequestMapping("*.html") 
    public void showIndex(){ 

    } 
} 

Теперь моя проблема заключается в том, что, когда я пытаюсь вызвать/server/api.json url, сервер не даст ответ json, вместо этого он вызывает следующую ошибку:

PageNotFound:1108 - No mapping found for HTTP request with URI [/WorldDefense/server/api.json] in DispatcherServlet with name 'Website' 

Что в основном означает его попытку поиска /server/api.json в сервлете веб-сайта вместо сервера serlvet, что касается моего вопроса: можно ли заставить эту установку работать? (So ​​/ сервер/для сопоставления сервлета сервера и все другие комбинации URL для сервлета веб-сайта)

Редактировать 1 Я обновил код, чтобы отразить изменения, как это было предложено Costi Ciudatu, но он по-прежнему не Работа. Я удалил @RequestMapping ("/ server") и теперь имеет только @RequestMapping в методе handleActionJson. И в результате этих ошибок:

10:57:26,046 WARN PageNotFound:1108 - No mapping found for HTTP request with URI [/WorldDefense/server/server/api.json] in DispatcherServlet with name 'Website' 
10:57:40,509 WARN PageNotFound:1108 - No mapping found for HTTP request with URI [/WorldDefense/server/api.json] in DispatcherServlet with name 'Website' 

Отображение согласно журналу TOMCAT:

сервера сервлет

11:03:49,655 INFO RequestMappingHandlerMapping:178 - Mapped "{[/api.json],methods=[GET],params=[],headers=[],consumes=[],produces=[application/json],custom=[]}" onto public java.lang.String com.world2.worlddefense.server.controllers.ApiRequests.handleActionJson(javax.servlet.http.HttpServletRequest) 
11:03:50,125 INFO RequestMappingHandlerMapping:178 - Mapped "{[/api.json],methods=[GET],params=[],headers=[],consumes=[],produces=[application/json],custom=[]}" onto public java.lang.String com.world2.worlddefense.server.controllers.ApiRequests.handleActionJson(javax.servlet.http.HttpServletRequest) 

Сайт-сервлетов

11:03:50,380 INFO RequestMappingHandlerMapping:178 - Mapped "{[//*.html],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public void com.world2.worlddefense.website.controllers.IndexController.showIndex() 
11:03:50,381 INFO RequestMappingHandlerMapping:178 - Mapped "{[/login],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.world2.worlddefense.website.controllers.TempTestController.showTest() 

ответ

1

Вы можете определить несколько DispatcherServlet сек в том же web.xml и назовите их по своему усмотрению. Однако отображение сервлетов не должно отражаться в @RequestMapping ваших контроллеров. Ваши контроллеры всегда сопоставляются с путями относительно отображения сервлетов; в вашем случае, я думаю, вы могли бы получить ответ JSON, если вы попробовали /WorldDefence/server/server/api.json ...

Если вы хотите, чтобы разные контроллеры были связаны с двумя диспетчерами, вам нужно только убедиться, что правильные контроллеры загружены в соответствующий контекст приложения: Website-servlet.xml и Server-servlet.xml в случае, если вы придерживаетесь этого соглашения.

Короче говоря, ваше сопоставление для ApiRequests должно быть '/', а не '/ server', и этот контроллер должен быть включен только в контекст диспетчера сервера.

В качестве побочного примечания, поскольку 3.2.x расширение .json обрабатывается ContentNegotiationManager, поэтому ваш контроллер должен вернуть некоторый объект домена, который будет прозрачно маршалирован механизмом Spring HttpMessageConverter и, таким образом, сможет создавать типы носителей кроме JSON, без каких-либо усилий.

+0

См. Обновленный вопрос, он все еще вызывает у меня проблемы. Кроме того, контроллеры сервера и веб-сайта загружаются в свой собственный контекст приложения (Website-servlet.xml и Server-servlet.xml) –