1

Eclipse と JBoss 6.2 で Spring MVC を使用してサンプル コード ベースをセットアップしています。

しかし、 http://localhost:8080/rest/simple/mainで「404」を取得します

以下のような Jboss ログ:

2015-07-29 11:51:27,356 エラー [controller.simpleController] (http-/0.0.0.0:8080-1) 要求を取得

2015-07-29 11:51:27,391 WARN [org.springframework.web.servlet.PageNotFound] (http-/0.0.0.0:8080-1) URI [/rest/WEB-INF/ビュー/main.jsp] 'dispatcher' という名前の DispatcherServlet 内

ディレクトリ :

>rest-server-simple
 > -src
  > -main
     -java
      -config
         -InitConfig.java
         -ServletConfig.java
      -controller
         -simpleController.java
  > -webapp
   > -WEB-INF
       -jboss-web.xml
       >views
        -main.jsp

初期構成:

public class InitConfig implements WebApplicationInitializer {
  @Override
  public void onStartup(ServletContext servletContext) throws ServletException {
  AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
  ctx.register(ServletConfig.class); 
  ServletRegistration.Dynamic registration = servletContext.addServlet("dispatcher",new DispatcherServlet(ctx));
  registration.setLoadOnStartup(1);
  registration.addMapping("/*");  }}

サーブレット構成:

@Configuration
@EnableWebMvc  
@ComponentScan(basePackages ="controller")
public class ServletConfig {
  @Bean
  public InternalResourceViewResolver internalResourceViewResolver() {  
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();  
    viewResolver.setPrefix("/WEB-INF/views/");  
    viewResolver.setSuffix(".jsp"); 
    return viewResolver;  
  }
}

jboss-web.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<jboss-web>  
    <context-root>/rest</context-root>  
</jboss-web>

シンプルコントローラー:

@Controller
@RequestMapping(value = "/simple")
public class simpleController {

  private static final Logger logger = LoggerFactory.getLogger(simpleController.class);
  @RequestMapping(value = "/main", method = RequestMethod.GET)
  public String hello(){
    logger.error("get request");
    return "main";
  }
}
4

1 に答える 1

3
registration.addMapping("/*");

に変更します

registration.addMapping("/");

と の間には違いが/*あり/ます。
/*は、すべてのリクエストが によって処理されることを示します。この場合、 aなどDispatcherServletの取得も に転送されます。そのため、コントローラが a をリクエストすると、実際にはマッピングされたものを探しますが、jsp.../abc.xyzDispatcherviewRequestMapping/WEB-INF/views/main.jsp

/を持たないリクエストのみpathinfo i.e /rest/simple/mainが によって処理されることをコンテナに伝えますDispatcherServlet

更新#1

うーん..つまり、なしでjboss AS 7オーバーライドするのが好きではないことがわかったので、ロガーで何も取得していないため、ロガーで何も取得していません。確認したい場合は、後に次を追加してくださいdefault servlet/web.xml404DispatcherurladdMapping("/*");

 System.out.println("registration.getMappings() = " + registration.getMappings());

両方で正常に動作するTomcat >= 7.0.15WildFly、両方をチェックしました。

1.マッピングをからまたは 以外のものに 変更しJBoss7ます。 2. 構成を に切り替えます。そこで初期化し、Annotated クラスを `contextConfigLocation として渡す必要があります。 REFはこちら
DispatcherServlet/*.htmDefaultServlet Mapping
web.xmlDispatcherServlet

于 2015-07-29T05:17:23.747 に答える