Spring MVC学习指南3: 基于注解的控制器

基于注解的控制器设计

 

前面我们看到,控制器的设计方式是实现Controller接口,然后再Spring的bean配置文件里配置相应的路径,这存在一定的问题:

1. 一个类只能重写一次处理请求的方法,单个类的职责过于单一

2. 需要在xml中配置映射关系,过于繁杂

3. 需要实现Controller接口,依赖性强

 

使用Controller注解可以完美解决:

Spring MVC学习指南3: 基于注解的控制器

想要使用注解完成控制器类的扫描,需要在xml中完成两步:

1. 在bean配置文件中,添加命名空间

Spring MVC学习指南3: 基于注解的控制器

2. 开启自动扫描

Spring MVC学习指南3: 基于注解的控制器

 

使用Request Mapping来解决路由映射的问题

 

在控制器里,需要依靠动作方法来处理请求,我们可以借助于Request Mapping实现路由映射:

Spring MVC学习指南3: 基于注解的控制器

这里使用value属性指定动作方法映射的路由地址,也可以使用method配置动作方法类型:

Spring MVC学习指南3: 基于注解的控制器

当然,可以对类进行注解,表示类整体的路由地址前缀:

Spring MVC学习指南3: 基于注解的控制器

 

处理请求的方法

 

可以接受HttpSession参数处理session:

Spring MVC学习指南3: 基于注解的控制器

可以接收HttpServletRequest处理请求:

Spring MVC学习指南3: 基于注解的控制器

另外,可以接受以下参数:

Spring MVC学习指南3: 基于注解的控制器

Spring MVC学习指南3: 基于注解的控制器

Spring MVC学习指南3: 基于注解的控制器

可以返回以下类型:

Spring MVC学习指南3: 基于注解的控制器

Spring MVC学习指南3: 基于注解的控制器

 

使用基于注解的控制器方法

 

1. 创建web.xml文件

Spring MVC学习指南3: 基于注解的控制器

Spring MVC学习指南3: 基于注解的控制器

2. 配置bean配置文件

Spring MVC学习指南3: 基于注解的控制器

对于某些静态文件,不通过Dispatcher Servlet进行拦截,需要配置<mvc: resourcces />

 

3. 添加控制器

Spring MVC学习指南3: 基于注解的控制器

Spring MVC学习指南3: 基于注解的控制器

 

4. 添加视图

Spring MVC学习指南3: 基于注解的控制器

5. 可以进行测试了。

 

依赖注入

 

1. 接口定义

Spring MVC学习指南3: 基于注解的控制器

2. 实现类

Spring MVC学习指南3: 基于注解的控制器

这里实现类使用Service进行注解

 

3. 开启服务的包扫描

Spring MVC学习指南3: 基于注解的控制器

 

4. 注入使用

Spring MVC学习指南3: 基于注解的控制器

 

请求参数的处理

 

1. 对于url中带的参数:

Spring MVC学习指南3: 基于注解的控制器

Spring MVC提供了便捷的处理方式:

Spring MVC学习指南3: 基于注解的控制器

使用RequestParam注解注释传入的参数

 

2. 对于路由变量

Spring MVC学习指南3: 基于注解的控制器

使用PathVariable进行注解:

Spring MVC学习指南3: 基于注解的控制器

 

ModelAttribute

 

1. 将请求的参数加载到Model中

Spring MVC学习指南3: 基于注解的控制器

使用newOrder作为键存储,如果不加指定,默认使用类名首字母小写作为键

2. 非控制器方法使用ModelAttribute注解,这种情况下将方法的返回值添加到Model中

Spring MVC学习指南3: 基于注解的控制器

这里将Product实例添加到Model中,非控制器方法使用ModelAttribute进行标记,则这个方法在其他控制器方法被调用之前都会执行,这相当于一个公用的优先处理器。

同样,在方法中想要添加多个参数到Model中时,可以传递Model参数手动添加到模型里,并返回void

Spring MVC学习指南3: 基于注解的控制器