2016-10-11 9 views
0

私の究極の目標は、複数のサーブレット(MVC用とWebServices用)を同時に実行できるようにすることです。残念ながら、サーブレットマッピングがroot( "/")以外の場合、サーブレットをコントローラにルーティングすることはできません。Spring JavaConfigディスパッチャーサーブレットをroot以外のものにマップする方法

次のURLがコントローラを起動するとは思っていましたが、そうではありません。

http://localhost:8080/Sandbox/Page/Test 

私は正常に動作-it URLからのservlet-mappingから '/ページ'、および '/ページ' を削除した場合。

http://localhost:8080/Sandbox/Test 

ウェブ初期化子

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return null; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class[] { WebApplicationConfiguration.class }; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/Page/" }; 
    } 

    @Override 
    protected String getServletName() { 
     return "dispatcher"; 
    } 
} 

WebApplicationConfiguration

@EnableWebMvc 
@EnableAspectJAutoProxy(proxyTargetClass = true) 
@Configuration 
@ComponentScan(basePackages = {"com.myapp.sandbox.business", 
           "com.myapp.sandbox.page", 
           "com.myapp.sandbox.utility"}) 
public class WebApplicationConfiguration extends WebMvcConfigurerAdapter { 

    /** 
    * Defines a {@link ViewResolver} as a Spring managed bean. 
    * 
    * @return the viewResolver 
    */ 
    @Bean 
    public ViewResolver viewResolver() { 

     final InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
     resolver.setPrefix("/WEB-INF/page"); 
     resolver.setSuffix(".jsp"); 

     return resolver; 
    } 

    /** 
    * Registers resource handlers with Spring. 
    * 
    * @param registry the {@link ResourceHandlerRegistry} 
    */ 
    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 

     registry.addResourceHandler("/view/**").addResourceLocations("/view/"); 
    } 
} 

TestController

私はあなたが

return new String[] { "/Page/" }; 

と最初の文字を使用するので、あなたの問題は、これらのライン

resolver.setPrefix("/WEB-INF/page"); 

であることを考える

答えて

0

は貴様あります。

+0

あなたは詳しく説明できますか?サーブレットマッピングはInternalResourceViewResolverに関連していますか? – Mostfoolish

0

これは少し非直観的であるが、ここではあなたのヒットhttp://localhost:8080/Sandbox/Page/Testたときに何が起こっているかである。/Page/DispatcherServletにマッピングされているので

  1. は、要求に対処するためのタスクが正しくサーブレットにあなたを与えています欲しいです。
  2. DispatcherServletに入ると、元のリクエストがハンドラを見つけるために使用されます。これを行うにあたり、にマップされているControllerと比較されているのは/Page/Testです。 2は一致していない、したがって、サーバは404

更新コントローラが/Page/Testにマッピングされると予想されるとして、あなたのコードが動作するはずで応答します。

関連する問題