手记

Spring之路(17)–全部使用注解配置SpringMVC

背景

上一篇文章详细讲述了使用xml配置SpringMVC的流程,不外乎是指定DispatcherServlet、指定容器配置文件,然后编写控制器和视图。

使用注解配置也类似,我们得有一个类负责指定DispatcherServlet,然后有个配置类负责配置容器同时开启对控制器等bean的扫描,最后编写控制器和视图页面完成具体功能。下面具体实现下。

新建项目

新建项目SpringMvcSecond,这个流程跟上一篇基本一致,就是换了个项目名,所以不再赘述。

唯一区别的是,本篇不再使用web.xml配置项目,所以删除web.xml文件。

新建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 {
}

新建控制器与视图页面

这个与上一篇也基本类似,不再详细介绍

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>

启动运行

启动后依然报错

More than one fragment with the name [spring_web] was found. This is not legal with relative ordering.

这次怒了,删除下图中两个jar包后解决问题:

验证成功!

0人推荐
随时随地看视频
慕课网APP