javax.servlet javax.servlet-api 3.1.0 provided org.springframework spring-webmvc 5.2.10.RELEASE
这里javax.servlet-api这个依赖一定要确定范围为provided
- //2.制作控制器类,等同于Servlet
- //2.1必须是一个spring管理的bean
- //2.2定义具体处理请求的方法
- //2.3设置当前方法的访问路径
- //2.4设置响应结果为json数据
- @Controller
- public class UserController {
- @RequestMapping("/save")
- @ResponseBody
- public String save(){
- System.out.println("user save ...");
- return "{'module':'springmvc'}";
-
- //设置映射路径为/delete,即外部访问路径
- @RequestMapping("/delete")
- @ResponseBody
- public String delete(){
- System.out.println("user save ...");
- return "{'info':'springmvc'}";
- }
- }
- }
注意springmvc只加载表示层,即@Controller注释修饰的即可,故,在@ComponentScan中指定到controller包中的Bean就行
- //3.定义配置类加载Controller对应的bean
- @Configuration
- @ComponentScan("com.itheima.controller")
- public class SpringMvcConfig {
- }
- //web容器配置类
- public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
- //加载springmvc配置类,产生springmvc容器(本质还是spring容器)
- protected WebApplicationContext createServletApplicationContext() {
- //初始化WebApplicationContext对象
- AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
- //加载指定配置类
- ctx.register(SpringMvcConfig.class);
- return ctx;
- }
-
- //设置由springmvc控制器处理的请求映射路径
- protected String[] getServletMappings() {
- return new String[]{"/"};
- }
-
- //加载spring配置类
- protected WebApplicationContext createRootApplicationContext() {
- return null;
- }
- }









原代码:


方法一常用

方法二很鸡肋,有个小细节要十分注意,测试的时候,需要把SpringMvcConfig配置类上的@ComponentScan注解注释掉,否则不会 报错 ,也就是分开不成功。
原因是

补充创建Tomcat的Servlet容器配置文件的另类简洁写法
- public class ServletContainersInitConfig extends
- AbstractAnnotationConfigDispatcherServletInitializer {
- protected Class>[] getRootConfigClasses() {
- return new Class[]{SpringConfig.class};
- }
- protected Class>[] getServletConfigClasses() {
- return new Class[]{SpringMvcConfig.class};
- }
- protected String[] getServletMappings() {
- return new String[]{"/"};
- }
- }