9.2.2 SpringMVC 执行流程描述:
1. 用户向服务器发送请求, 请求被 sssSpringMVC 前端控制器 DispatcherServlet 捕获;
2. DispatcherServlet 对请求 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping
获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器) , 最后以
HandlerExecutionChain 对象的形式返回;
3. DispatcherServlet 根据获得的 Handler, 选择一个合适的 HandlerAdapter; (附注: 如果成功获得
HandlerAdapter 后, 此时将开始执行拦截器的 preHandler 方法)
4. 提取 Request 中的模型数据, 填充 Handler 入参, 开始执行 Handler(Controller)。 在填充 Handler
的入参过程中, 根据你的配置, SpringMVC 将帮你做一些额外的工作:
HttpMessageConveter: 将请求消息(如 Json、 xml 等数据) 转换成一个对象, 将对象转换为指定的响应
信息。
数据转换: 对请求消息进行数据转换。 如 String 转换成 Integer、 Double 等。
数据根式化: 对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等。
数据验证: 验证数据的有效性(长度、 格式等) , 验证结果存储到 BindingResult 或 Error 中。
5. Handler 执行完成后, 向 DispatcherServlet 返回一个 ModelAndView 对象;
6. 根据返回的 ModelAndView, 选择一个适合的 ViewResolver(必须是已经注册到 SpringMVC 容器中的
ViewResolver)返回给 DispatcherServlet;
7. ViewResolver 结合 Model 和 View, 来渲染视图;
8. 将渲染结果返回给客户端。
9.2.3、 SpringMVC 的注解
1.@Controller
@Controller 用于标记在一个类上, 使用它标记的类就是一个 SpringMVC Controller 对象。
2.@RequestMapping
@RequestMapping 是一个用来处理请求地址映射的注解, 可用于类或方法上。 用于类上, 表示类中的所有
响应请求的方法都是以该地址作为父路径。
3.@Resource 和@Autowired @Resource 和@Autowired 都是做 bean 的注入时使用, 其实@Resource 并不是 Spring 的注解, 它的包是
javax.annotation.Resource, 需要导入, 但是 Spring 支持该注解的注入。
相同点: 两者都可以写在字段和 setter 方法上。 两者如果都写在字段上, 那么就不需要再写 setter 方法。
ssss
不同点:
@Autowired 为 Spring 提供的注解, 需要导入包
org.springframework.beans.factory.annotation.Autowired;
@Autowired 注解是按照类型(byType)装配依赖对象, 默认情况下它要求依赖对象必须存在, 如果允许 null
值, 可以设置它的 required 属性为 false。如果我们想使用按照名称(byName)来装配, 可以结合@Qualifier
注解一起使用。 如下:
public class TestServiceImpl {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
} 2
) @Resource
@Resource 默认按照 ByName 自动注入, 由 J2EE 提供, 需要导入包 javax.annotation.Resource。 @Resource
有两个重要的属性: name 和 type, 而 Spring 将@Resource 注解的 name 属性解析为 bean 的名字, 而 type
属性则解析为 bean 的类型。 所以, 如果使用 name 属性, 则使用 byName 的自动注入策略, 而使用 type 属
性时则使用byType 自动注入策略。如果既不制定 name 也不制定type 属性,这时将通过反射机制使用byName
自动注入策略。
注: 最好是将@Resource 放在 setter 方法上, 因为这样更符合面向对象的思想, 通过 set、 get 去操作属
性, 而不是直接去操作属性。
4.@ModelAttribute 和 @SessionAttributes
@ModelAttribute 该 Controller 的所有方法在调用前, 先执行此@ModelAttribute 方法, 可用于注解和方
法参数中, 可以把这个@ModelAttribute 特性, 应用在 BaseController 当中, 所有的 Controller 继承
BaseController, 即可实现在调用 Controller 时, 先执行@ModelAttribute 方法。
@SessionAttributes 即将值放到 session 作用域中, 写在 class 上面。
5.@PathVariable
用于将请求 URL 中的模板变量映射到功能处理方法的参数上, 即取出 uri 模板中的变量作为参数。
6.@requestParam
@requestParam 主要用于在 SpringMVC 后台控制层获取参数, 类似一种是 request.getParameter("name"),
它有三个常用参数: defaultValue = "0", required = false, value = "isApp"; defaultValue 表示设
置默认值, required 铜过 boolean 设置是否是必须要传入的参数, value 值表示接受的传入的参数类型。
7.@ResponseBody
作用: 该注解用于将 Controller 的方法返回的对象, 通过适当的 HttpMessageConverter 转换为指定格式
后, 写入到 Response 对象的 body 数据区。
使用时机: 返回的数据不是 html 标签的页面, 而是其他某种格式的数据时(如 json、 xml 等) 使用;
8.@Component
相当于通用的注解, 当不知道一些类归到哪个层时使用, 但是不建议。
9.@Repository
用于注解 dao 层, 在 daoImpl 类上面注解。
|
|