【发布时间】:2016-08-30 14:15:58
【问题描述】:
我是 Spring Framework 技术的新手,我正在制作一个包含少量 Web 服务(Webstore、社交媒体网站等)的网站。我想要的是,每个 web 服务都拥有 DispatcherServlet 和自己的 ViewResolver。所以我的项目结构如下:
- 主站点 - DispatcherServlet #1 仅映射到 http://example.com(是的,我知道我可以只使用静态 html 站点,但它是用于学习目的。
- Webservice no.1 例如 Webstore - DispatcherServlet #2 仅映射到 /webstore/*
- 2 号 Web 服务,例如社交媒体网站 - DispatcherServlet #3 仅映射到 /social/*
在配置中我使用的是 Java 类,所以我所做的是:
- 首先,我创建了扩展
WebMvcConfigureAdapter的 AppConfig 类和 为主要站点视图实现ViewResolver。接下来,我创建了一个扩展AbstractAnnotationConfigDispatcherServletInitializer类的AppInitializer类,并在其中配置了 RootConfigClass 和 servlet 映射 - 其次,我遇到了问题 - 即我无法为 Dispatcher Servlet #2 创建另一个类(不能有两个扩展
AbstractAnnotationConfigDispatcherServletInitializer的类),我发现是创建将实现接口的类WebApplicationInitializer。我做到了,终于有了第二个 DispatcherServlet -
第三,我从第二点开始重复步骤,并拥有三个工作 Dispatcher Servlet(理论上...)。
我可以通过 DispatcherServlet #1 访问我的主站点
(http://example.com)我可以通过 DispatcherServlet #2 (http://example.com/webstore) 访问我的网上商店主站点
我可以通过 DispatcherServlet #3(http://example.com/social) 访问我的网络服务
但毕竟,当我创建另一个视图指向时,例如登录部分(http://example.com/webstore/login)它根本不起作用。错误表示 Dispatcher Servlet #1 无法处理映射请求,该地址应与 Dispatcher Servlet #2 绑定。我为解决这个问题所做的是将 servlet 映射的 Dispatcher Servlet #2 配置类部分从 servlet.addMapping("/webstore/"); 更改为 servlet.addMapping("/webstore/*");,我读过这不是最好的主意,但它确实有效。
当我键入控制器不处理(不存在)的地址时出现问题,例如(http://example.com/webstore/thisaddressdoesntexists),视图控制器从http://example.com/webstore 返回主默认视图,而不是 404 未找到页面。这不是我打算实施的行为。除了那个小“功能”之外,一切正常。所有特定的请求都由其特定的 DispatcherServlet 提供。最后的问题是:
- 如何防止加载默认视图,在这种情况下,当我指向不存在的 url 并加载错误代码站点时?
- 我的概念真的好吗?我的意思是使用实现 WebApplicationInitializer 的类来使用更多 DispatcherServlets 还是有另一种方法?我只是在谈论基于 Java 的配置类,没有 xml。
【问题讨论】:
标签: java spring spring-mvc