前面学习了使用配置文件来完成一个SpringMVC,但是随着控制器写的越来越多,会显得代码很臃肿,使用注解能避免这种情况,让代码显得更加简洁。
编程步骤
前期准备就是pom.xml导包Spring-webmvc、部署描述文件web.xml配置DispatcherServlet,resources目录下添加Spring启动所需的xml配置文件,这个跟上篇没什么区别,编程注意点如下:
1 Model类不再实现Controller接口
2 Model类不实现Controller接口,方法名就不做要求了,不一定是以前的handlerRequest。返回类型除了可以是ModleAndView,也可以是String类型
3 Model类中可以添加多个方法
4 Model类使用@Controller注解,不需要在配置文件中配置bean元素
5 可以在方法前或者类前添加@RequestMapping,相当于handlerMapping的作用
6 在配置文件中,添加ViewResolver配置、组件扫描、添加MVC注解扫描(识别@RequestMapping)
实现注解使用SpringMVC
导包
1 <dependency> 2 <groupId>org.springframework</groupId> 3 <artifactId>spring-webmvc</artifactId> 4 <version>4.2.3.RELEASE</version> 5 </dependency>
web.xml配置DispatcherServlet
1 <!-- 配置DispatcherServlet 使用注解完成springMVC --> 2 <servlet> 3 <servlet-name>myspringmvc</servlet-name> 4 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 5 <init-param> 6 <param-name>contextConfigLocation</param-name> 7 <param-value>classpath:my-spring-mvc.xml</param-value> 8 </init-param> 9 <!-- 设置tomcat启动就开启Spring --> 10 <load-on-startup>1</load-on-startup> 11 </servlet> 12 <servlet-mapping> 13 <servlet-name>myspringmvc</servlet-name> 14 <url-pattern>*.get</url-pattern> 15 </servlet-mapping>
配置spring启动读取的xml文件
里面需配置组件扫描,将扫描包下的类纳入Spring容器来管理,还需配置注解驱动,最后还需要配置视图解析器。
1 <!-- 配置组件扫描 --> 2 <context:component-scan base-package="com.boe"></context:component-scan> 3 <!-- 配置MVC注解扫描 --> 4 <mvc:annotation-driven></mvc:annotation-driven> 5 <!-- 配置视图解析器 --> 6 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 7 <property name="prefix" value="/WEB-INF/" /> 8 <property name="suffix" value=".jsp" /> 9 <!-- 前缀和后缀配置,视图名hello通过上面的配置可以映射到/WEB-INF/hello.jsp --> 10 </bean>
写一个Model
Model里使用@Controller注解,代表它是一个Controller,另外还需要让请求转发到对应的Controller,这里直接在方法里添加@RequestMapping注解来完成。
1 package com.boe; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.servlet.ModelAndView; 6 7 /** 8 * 测试使用注解完成一个helloSpringMVC 9 * @author yangchaolin 10 */ 11 @Controller 12 @RequestMapping("/demo") 13 public class helloController { 14 //方法1 15 @RequestMapping("/hello.get") 16 public String hello() { 17 System.out.println("返回一个String"); 18 return "hello"; 19 } 20 //方法2 21 @RequestMapping("/helloModelAndView.get") 22 public ModelAndView helloModelAndView() { 23 System.out.println("返回ModelAndView"); 24 return new ModelAndView("hello"); 25 } 26 }
写JSP
略,参考博文的jsp内容。
测试结果
项目上右击选择启动项目on server,然后访问Model里写的请求路径,注意类前面也加了一个@RequestMapping,这样路径名将在完整项目名后还有一个/demo,不加的话就直接项目名后/hello.get访问。
控制台情况,可以看出Model里方法可以返回String和ModelAndView。
以上就是使用注解完成SpringMVC的过程,其相比不使用注解将减少Model代码,减少spring-mvc中对HandlerMapping的配置,减少对Model对应bean的配置。
参考博文