D44-SpringMVC(01)

一、SpringMvc的概述

  1. Web层
    a. 接受浏览器的请求参数servelet
    b. 封装参数到对象JavaBean
    c. 响应数据到页面jsp
    d. 涉及mvc思想(将控制,逻辑,展示相分离的思想)
    e. web层框架又称为mvc框架
  2. Service:各种业务需求,事务
    • spring(类,开启事务,提交事务,释放资源)
  1. Dao层:
    • JdbcTemplate
    • Mybatis
    • JPA:
      • 规范(一套接口)
      • 所有的orm框架都实现了这个接口
  1. MVC
    a. MVC是一种设计思想
    b. 作用: 将逻辑,业务,视图相分离的一种思想,各自专注于做自己的事情。
    c. M:model(模型) JavaBean
    d. V(view):jsp
    e. C(controller):控制器 servlet(SpringMvc)
  2. spring提供一个子框架, 为web层提供一个框架
    a. 前端控制器: dispatcherServlet
    b. springmvc提供好了
    c .webxml做配置

二、入门案例

  1. springmvc的访问方式
    • 导入spring的坐标
    • 在web.xml中配置前端控制器,还得让前端控制器加载- - spring配置文件
    • 编写spring配置文件,做浏览器的访问路径和类方法的映射
    • 编写类和方法
    • 浏览器编写路径访问
  1. 环境的依赖坐标:
    • ioc坐标
    • Mvc相关的坐标(Spring-web,Spring-webmvc)

2.2 搭建环境

  1. 创建maven-web工程,引入坐标
  2. 创建类和方法
  3. 配置前端控制器
  4. 配置springmvc的配置文件

2.3 SpringMVC的执行过程

在这里插入图片描述

2.4 SpringMVC中涉及的组件

  1. DispatcherServlet :前端控制器
    • 用户请求到达前端控制器,它就相当于MVC模式中的C,dispatcherServlet是整个流程控制的中心,由它调用其他组件处理用户的请求,dispatcherServlet 的存在降低了组件之间 的 耦合性
  • web.xml中

<!--配置dispatcherServlet-->
<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--初始化就加载spirng配置文件-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <!--<load-on-startup>:将servlet由第一次访问才创建变成服务器启动就创建-->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <!--
      /*: 拦截所有 包含html和jsp
      /:  拦截所有 不包含html和jsp
    -->
   <url-pattern>/</url-pattern>
</servlet-mapping>
  1. < mvc:annotation-driven> 适配器
    • 集成处理映射器,处理器适配器。

spring-mvc中

<!--映射器和适配器-->
<mvc:annotation-driven></mvc:annotation-driven>
  1. 视图解析器
    • 页面地址的拼接
      • prefix
      • suffix

spring-mvc中

<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/jsp/"></property>
    <property name="suffix" value=".jsp"></property>
</bean>
  1. @RequestMapping注解
  • 配置请求路径

    • 可以配置到类上(用于区分模块)也可以配置到方法上
    • Value(path):配置请求路径
  • -Method:接受请求方式(post,get)默认接受所有请求

    • Params:请求的参数,要求页面必须携带的参数。
  • @Controller:

  • UserController类中

@Controller
public class UserController {
    @RequestMapping(value = "/params1")
    // 页面请求参数数据封装:参数式封装
    // 页面简单数据的封装: 参数名必须和页面的name属性名一致
    public String params1(String username,Double age){
        System.out.println(username);
        System.out.println(age);
        return "success"; //视图解析器  前缀+页面名+后缀
    }
}

三、参数封装

参数封装:将页面请求的参数封装到对象中。

3.1 简单数据的封装

请求的参数名 = 方法名

  1. 页数请求参数数据封装:参数式封装
    • 要求:参数名必须和页面的name属性名一致
  • UserController类

    扫描二维码关注公众号,回复: 4783560 查看本文章
@RequestMapping(value = "/params1")
    // 页面请求参数数据封装:参数式封装
    // 页面简单数据的封装: 参数名必须和页面的name属性名一致
    public String params1(String username,Double age,Date date){
        System.out.println(username);
        System.out.println(age);
        System.out.println(date);
        return "success"; //视图解析器  前缀+页面名+后缀
    }

3.2 页面对象数据的封装

  • **要求:**保证页面的name属性名和对象的属性名一致即可。

    • 页面对象list
  • UserController类

 @RequestMapping(value = "/params2")
    public String params2(User user){
        System.out.println(user);
        return "success";
    }

3.3 封装复杂类型的数据(集合list和map)

  1. List和map是对象中的属性
  2. 请求参数名 = 集合属性名[索引 | key].属性。
  • list集合封装:
  1. 保证页面的name属性名是对象的集合属性名[角标].属性名 例如:accounts[0].name
// 页面对象list集合数据的封装:
    @RequestMapping(value = "/params3")
    public String params3(User user){
        System.out.println(user);
        return "success";
    }
  • map集合封装
  1. 保证页面的name属性名是对象的map集合属性名[key].属性名 例如:maps[aaa].name
// 页面对象map集合数据的封装: 
    @RequestMapping(value = "/params4")
    public String params4(User user){
        System.out.println(user);
        return "success";
    }

3.4 处理中文乱码的过滤器

  1. 细节处理:提供中文乱码的过滤器
<!--springmvc提供的中文乱码的过滤器(CharaterEncodingFilter)-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!--告诉filter要使用哪个编码-->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

3.5 自定义类型转化器

  1. 注册类型转化器
 <!--告诉springmvc使用自己的String=Date类型转换器 不在用默认的String=Date类型转换器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters"> <!--这个集合中需要装类型转换器对象-->
            <array> <!--把自己的类型转换器给放入数据  -->
                <bean class="cn.utils.StringToDateConverter"></bean>
            </array>
        </property>
    </bean>
  1. 配置使用类型转化器
<!--配置使用类型转化器-->
<mvc:annotation-driven conversion-service="conversionService">
</mvc:annotation-driven>

四、注解

  1. @RequestHeader:获取请求头的信息
  2. @CookieValue:获取cookie的信息
  3. 属性:
    • Value:根据请求信息key获取值
    • Required:是否必须要传递该头信息
      • false:不是必须的
      • true:必须要传递的。
@RequestMapping(value = "/params6")
    public String params6(@RequestHeader(value = "Host") String header1, @RequestHeader(value = "Connection")String header2,
                          @CookieValue(value = "JSESSIONID")String jsid){
        System.out.println(header1);
        System.out.println(header2);
        System.out.println(jsid);
        return "success";

五、总结

  1. springmvc的环境搭建
    -----1 依靠前端控制器(web.xml)
    ----配置servlet(dispatcherServlet)
    ----服务器启动就加载(load-on-startup)
    ----已创建就加载配置文件(init-param)
    ----设置路径 / (除了jsp和html以外的所有资源)
  2. 创建spirng-mvc.xml配置文件
    ----- ioc扫描器
    -----映射器和适配器 (mvc:anntation-driver)
    -----视图解析器 (前缀和后缀)
    -----自定义的类型转换器的配置
  3. 创建类和方法
    -----封装简单数据
    -----封装对象数据
    -----封装对象的list/map数据
    ----获取servlet的api(request response session)
  • 封装过程中产生的细节:
    • 使用了springmvc提供的解决中文乱码的filter(charaterEncodingFilter)
    • 自定义了String转日期类型的类型转换器(配置)
    • 使用了springmvc提供的2个注解
      • @RequestHeader:获取请求的头信息
      • @cookieValue:获取cookie的jsid

猜你喜欢

转载自blog.csdn.net/qq_33852347/article/details/85248255
今日推荐