版权声明:本文为博主ExcelMann的原创文章,未经博主允许不得转载。
3、使用注解的方式进行开发
作者:ExcelMann,转载需注明。
补充:
@Conponent 组件
@Service service
@Controller Controller
@Repository dao层
这四个注解都是一样的,不过对于不同的层,使用不同的注解
开发步骤:
-
编写web.xml文件,注册DispatcherServlet(代码同上)
-
编写springmvc配置文件,也即是xxx-servlet.xml文件
与之前的配置文件区别在于:这里不需要配置处理器的映射器和适配器,而是换成了
<mvc:annotation-driven/>
;并且,要加上
<context:component-scan>
标签,使得指定包下的注解生效;<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="".....> <!--自动扫描包,让指定包下的注解生效,由IOC容器来统一管理--> <context:component-scan base-package="com.excelman.controller"/> <!--标注该handler只处理servlet,不处理静态资源--> <mvc:default-servlet-handler/> <!-- 支持mvc注解驱动 在spring中一般采用@RequestMapping注解来完成映射关系 要想使得@RequestMapping注解生效 必须向上下文中注册DefaultAnnotationHandlerMapping 和一个AnnotationMethodHandlerAdapter实例 这两个实例分别在类级别和方法级别处理。 而annotation-driven配置帮助我们自动完成上述两个实例的注入 --> <mvc:annotation-driven/> <!--视图解析器:DispatcherServlet将它的ModelAndView交给视图解析器进行解析--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/WEB-INF/jsp/"/> <!--后缀--> <property name="suffix" value=".jsp"/> </bean> </beans>
-
编写controller类
- 使用@Controller注解,而不需要在配置文件中注册bean
- 使用@RequestMapping指定路径
- 使用Model来代替ModelAndView中的model,专门用于传输数据
- return即为view的路径
@Controller @RequestMapping("HelloController") public class HelloController{ //真实访问地址:项目名/HelloController/hello @RequestMapping("/hello") public String sayHello(Model model){ //向模型中添加属性msg和值 model.addAttribute("msg","helloSpringMVC"); //会交给视图解析器,解析之后的结果为/WEB-INF/jsp/hello.jsp return "hello"; } }
补充:在这个类中,只要有返回String的方法,并且有指定的页面可以跳转,那么就会被视图解析器解析;
-
(IDEA的巨坑)记得给新建的项目添加lib包
小结:
实现Controller的两种方式
第一种方式:采用实现Controller接口的方式(第1篇中的HelloSpringMVC实现的)
第二种方式:采用@Controller接口的方式(本文中实现的)
第一种方式的缺点:
- 实现接口是较老的方法
- 一个控制器只能有一个方法,所以如果要实现多个方法的话,要写多个类;
- 定义的方式比较麻烦,因为还要在配置文件中配置bean;
第二种方式的优点:
- 可以在一个Controller中实现多个方法,并且,多个方法可以指向同个视图,实现视图的复用;
- 控制器和视图之间是弱耦合关系;