0

我们有一个带有控制器的 Spring MVC 应用程序:

@Controller("/app")

@Controller("/app/page1")

@Controller("/app/page2")

我们有 AppInitializer:

public class AppInitializer implements WebApplicationInitializer {

  @Override
  public void onStartup(ServletContext servletContext) throws ServletException {
    WebApplicationContext context = getContext();

    DispatcherServlet servlet = new DispatcherServlet(context);
    ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet1", servlet);
    dispatcher.setLoadOnStartup(1);
    dispatcher.addMapping("/app/*");
  }

  private AnnotationConfigWebApplicationContext getContext() {
    ... prepare app context
  }
}

运行此应用程序时,我们可以访问

http://localhost:8080/app

http://localhost:8080/app/page1导致错误

警告:在名称为“DispatcherServlet1”的 DispatcherServlet 中找不到具有 URI [/app/page1] 的 HTTP 请求的映射

http://localhost:8080/app/page2导致错误

警告:在名称为“DispatcherServlet1”的 DispatcherServlet 中找不到具有 URI [/app/page2] 的 HTTP 请求的映射

我们可以通过像这样向 DispatcherServlet 添加严格映射来解决这个问题

DispatcherServlet servlet = new DispatcherServlet(context);
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet1", servlet);
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/app", "/app/page1", "/app/page2");

并且所有页面都可以正常工作:

http://localhost:8080/app

http://localhost:8080/app/page1

http://localhost:8080/app/page2

但问题是我们每次添加新页面时都需要添加到 DispatcherServlet 的映射。例如要添加第 3 页,我们需要创建控制器

@Controller("/app/page3")

添加调度程序 servlet 映射 dispatcher.addMapping("/app", "/app/page1", "/app/page2", **"/app/page3"**);

我们真的很想避免这最后一步。

dispatcher.addMapping("/app/*");将是理想的,但正如我上面提到的它不起作用。

知道我们缺少什么吗?

4

1 回答 1

0

您可以像这样进行映射:

@Controller
@RequestMapping("/app/products")
public class ProductController implements Serializable {...}
于 2016-01-05T14:50:46.983 回答