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/ 的 HTTP 请求的映射视图/main.jsp] 在 DispatcherServlet 中,名称为 'dispatcher'

目录 :

>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("/*");  }}

Servlet 配置:

@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("/");

/*和之间有区别/。表示每个请求都
/*将由 处理DispatcherServlet,在这种情况下,检索 ajsp或类似etc的内容也.../abc.xyz将转发给DispatcherviewRequestMapping/WEB-INF/views/main.jsp

/告诉容器只有那些没有的请求pathinfo i.e /rest/simple/main才会被DispatcherServlet.

更新#1

嗯.. 我发现jboss AS 7不喜欢覆盖default servlet/没有web.xml,因此你仍然得到404,甚至没有在记录器上得到任何东西,原因很简单,Dispatcher它永远不会映射到任何url. 如果您想检查,只需在之后添加以下内容addMapping("/*");

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

它适用于Tomcat >= 7.0.15WildFly已检查两者。

要使其正常工作,JBoss7有几个选项:
1.DispatcherServlet将映射从/to更改为*.htmDefaultServlet Mapping.
2. 将您的配置切换到web.xml。您将必须在DispatcherServlet那里进行初始化并将带注释的类作为`contextConfigLocation 传递。 在这里查看 REF

于 2015-07-29T05:17:23.747 回答