1. 背景
上一篇文章详细讲述了使用xml配置SpringMVC的流程,不外乎是指定DispatcherServlet、指定容器配置文件,然后编写控制器和视图。
使用注解配置也类似,我们得有一个类负责指定DispatcherServlet,然后有个配置类负责配置容器同时开启对控制器等bean的扫描,最后编写控制器和视图页面完成具体功能。下面具体实现下。
2. 新建项目
新建项目SpringMvcSecond,这个流程跟上一篇基本一致,就是换了个项目名,所以不再赘述。
唯一区别的是,本篇不再使用web.xml配置项目,所以删除web.xml文件。
3. 新建SpringMVC初始化器
上一篇的项目我们实际上是通过web.xml对项目进行了初始化配置,包括指定DispatcherServlet、指定容器配置文件,本篇我们改为使用初始化器,代码如下,初始化器通过继承AbstractAnnotationConfigDispatcherServletInitializer实现了web项目初始化时进行初始化操作的功能。
package org.maoge.second;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
// 引入配置类
return new Class[] { SpringConfig.class };
}
@Override
protected String[] getServletMappings() {
// 配置url映射路径
return new String[] { "*.do" };
}
}
注意该类指定了接受以.do为结尾的请求,且配置类为SpringConfig。
新建配置类
对容器的配置实际上只需要开启对包的扫描即可:
package org.maoge.second;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(value = "org.maoge.second")
public class SpringConfig {
}
4. 新建控制器与视图页面
这个与上一篇也基本类似,不再详细介绍
package org.maoge.second;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloController {
@RequestMapping("/hello")
public ModelAndView hello() {
ModelAndView mv=new ModelAndView();
mv.setViewName("hello.jsp");
return mv;
}
}
<%@ page language="java" contentType="text/html; charset=UTF8"
pageEncoding="UTF8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF8">
<title></title>
</head>
<body>
hello:springmvcsecond
</body>
</html>
5. 启动运行
启动后依然报错
More than one fragment with the name [spring_web] was found. This is not legal with relative ordering.
1
这次怒了,删除下图中两个jar包后解决问题: