Spring MVC学习指南3: 基于注解的控制器
基于注解的控制器设计
前面我们看到,控制器的设计方式是实现Controller接口,然后再Spring的bean配置文件里配置相应的路径,这存在一定的问题:
1. 一个类只能重写一次处理请求的方法,单个类的职责过于单一
2. 需要在xml中配置映射关系,过于繁杂
3. 需要实现Controller接口,依赖性强
使用Controller注解可以完美解决:
想要使用注解完成控制器类的扫描,需要在xml中完成两步:
1. 在bean配置文件中,添加命名空间
2. 开启自动扫描
使用Request Mapping来解决路由映射的问题
在控制器里,需要依靠动作方法来处理请求,我们可以借助于Request Mapping实现路由映射:
这里使用value属性指定动作方法映射的路由地址,也可以使用method配置动作方法类型:
当然,可以对类进行注解,表示类整体的路由地址前缀:
处理请求的方法
可以接受HttpSession参数处理session:
可以接收HttpServletRequest处理请求:
另外,可以接受以下参数:
可以返回以下类型:
使用基于注解的控制器方法
1. 创建web.xml文件
2. 配置bean配置文件
对于某些静态文件,不通过Dispatcher Servlet进行拦截,需要配置<mvc: resourcces />
3. 添加控制器
4. 添加视图
5. 可以进行测试了。
依赖注入
1. 接口定义
2. 实现类
这里实现类使用Service进行注解
3. 开启服务的包扫描
4. 注入使用
请求参数的处理
1. 对于url中带的参数:
Spring MVC提供了便捷的处理方式:
使用RequestParam注解注释传入的参数
2. 对于路由变量
使用PathVariable进行注解:
ModelAttribute
1. 将请求的参数加载到Model中
使用newOrder作为键存储,如果不加指定,默认使用类名首字母小写作为键
2. 非控制器方法使用ModelAttribute注解,这种情况下将方法的返回值添加到Model中
这里将Product实例添加到Model中,非控制器方法使用ModelAttribute进行标记,则这个方法在其他控制器方法被调用之前都会执行,这相当于一个公用的优先处理器。
同样,在方法中想要添加多个参数到Model中时,可以传递Model参数手动添加到模型里,并返回void