1. Mybatis 是相对于 Hibernate 这种一站式的 ORM 来讲,它是 “半自动化” 的;

  2. Model1 和 Model2

① Model1 模式:Web 应用几乎全部由 JSP 页面(身兼 View 和 Controller 角色)组成,用少量的 JavaBean 来处理数据库连接等操作;

② Model2 模式:Servlet 为前端控制器,后端 JavaBean 完成实际逻辑处理,最后使用 JSP 处理显示逻辑;Model2 是 MVC 设计思想;

3.MVC 与观察者模式对比

① 观察者模式:观察者与被观察者可以使两个互相对等的对象;

② MVC:被观察者往往只是单纯的数据体,而观察者则是单纯的试图页面;

  1. Spring 的核心容器必须依赖 common-logging Jar 包

  2. DispatcherServlet(核心功能是分发请求,分发给对应处理的 java 类,成 Handle)加载时需要一个 Spring MVC 配置文件,默认加载 / WEB-INF/springmvc-servlet.xml

  3. Spring2.5 之后新增基于注解的控制器 @Controller,不用实现 Controller 接口,2.5 以后推荐使用注解;

  4. 配置 DispatcherServlet;

<!-- spring mvc -->
	<servlet>
		<description>spring mvc servlet</description>
		<servlet-name>springMvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<description>spring mvc 配置文件</description>
			<param-name>contextConfigLocation</param-name>
			<param-value>
                classpath*:spring/spring-mvc.xml
            </param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<!-- 让 Spring MVC 的前端控制器拦截所有请求 -->
	<servlet-mapping>
		<servlet-name>springMvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
  1. Spring MVC 建议把所有的视图页面存放在 WEB-INF 文件夹下面,这样可以保护视图页面,避免直接向视图页面发送请求,Spring MVC 视图解析器配置:
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
	<bean 
		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		p:prefix="/WEB-INF/views/" p:suffix=".jsp" />
  1. Spring 可以配置包扫描,扫描包下面的 java 文件,如果扫描到有 Spring 的相关注解的类,则把这些类注册为 Spring 的 bean:
<!-- 配置要扫描的包 -->
	<!-- 使用 Annotation 自动注册 Bean,解决事物失效问题:在主容器中不扫描 @Controller 注解,在 SpringMvc 中只扫描 @Controller 注解。  -->
	<context:component-scan base-package="com.demo"><!-- base-package 如果多个,用 “,” 分隔 -->
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	</context:component-scan>
  1. Spring MVC 执行流程:

① DispatcherServlet 截获用户请求;

② DispatcherServlet 对请求的 URL 解析,得到 URI,调用 HandlerMapping 获得该 Handle 配置的所有相关对象,包括 Handler 对象及其对应的拦截器,这些对象封装到一个 HandlerExecutionChain 对象中返回;

③ DispatcherServlet 根据获得的 Handler 选择一个合适的 HandlerAdapter;

④ 根据请求中的数据模型,开始执行 Handler(Controller),这个过程 Spring 会帮助做一些额外的工作:消息转换、数据类型转换、数据格式化、数据验证;

⑤ Handler 执行完成后会向 DispatcherServlet 返回一个 ModelAndView 对象(包含视图名或视图名和模型);

⑥ 根据返回的 ModelAndView 对象,选择一个合适的 ViewResolver 视图解析器返回给 DispatcherServlet;

⑦ ViewResolver 结合 Model 和 View 来渲染视图,并将视图渲染结果返回给客户端;

  1. Spring MVC 常用注解:

① 启用:spring 配置文件在头文件加入 spring-context,启用并配置包扫描 context:component-scan/ 元素(以便注册 bean);

② RequestMapping:用于映射一个请求,注解属性有 value、name、method、consumes(指定 contentType)、produces(指定返回内容类型)、params、headers、Path;

③ 参数绑定注解:根据处理的 request 内容的不同可以分为四类:

  • (1)处理 request body 部分的注解:@RequestParam、@RequestBody;
  • (2)处理 request uri 部分的注解:@PathVariable;
  • (3)处理 request header 部分的注解:@RequestHeader、@CookieValue;
  • (4)处理 attribute 类型的注解:@SessionAttributes、@ModelAttribute;

④ @RequestParam:属性有 name、value、required、defaultValue;

⑤ @PathVariable:

  @RequestMapping(value="/home/users/{userId}")
  public String getUser(@PathVariable Integer userId){ ... }

⑥ @RequestHeader:用于将请求的头信息区的数据映射到功能处理方法的参数上,属性有 name、value、required、defaultValue;

⑦ @CookieValue:将请求的 cookie 数据映射到参数上,属性有 name、value、required、defaultValue;

⑧ @SessionAttributes:允许我们有选择地指定 Model 中的哪些数据需要转存到 HttpSession 对象当中,只能声明到类上,不能定义在方法上;

//对应方法中需要有一个model.addAttribute("user",user);这里“user”是一个对象
@SessionAttributes("user")
//可以设置多个对象到HttpSession中
//@SessionAttributes(types = {User.class, Company.class},value = {"user","company"})

⑨ @ModelAttribute:在一个控制器类中先于其他映射的方法执行,并根据其具体的 value 值绑定方法的参数亦或是返回一个 Model 对象;

  1. Spring3.0 新增 HttpMessageConverter<T> 接口,负责将请求信息转换为一个对象,并将对象绑定到请求方法的参数中或输出为相应信息;

  2. @RequestBody 不能处理 multipart/form-data 这种格式数据;application/json、application/xml 必须使用 @RequestBody 来处理;

  3. Spring 默认使用 Jackson 处理 json 数据,如果使用其他开源包来处理 json(如 fastjson),则需要在配置文件中配置 HttpMessageConverter,在 mvc:message-converters/ 标签中配置你使用的开源包中实现 HttpMessageConverter 接口的转换器的 bean;当然,也可以自定义 HttpMessageConverter;

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Jalen Chu 微信支付

微信支付

Jalen Chu 支付宝

支付宝

Jalen Chu 公众号

公众号