java SpringMVC SSM整合

SpringMVC

    SpringMVC是一种基于java实现MVC设计模型的请求驱动类型的轻量级Web框架
            他是通过一套注解,让一个简单的pojo类称为处理请求的控制器,基于pojo类中的方法,一个方法就是我们之前的一个Servlet,无需实现任何接口,同时他还支持RESTFUL风格编程格式的请求
    本质就是一个Servlet
    MVC:Model View Controller
        Model:主要是用于数据的封装--->pojo--->javaBean
        View:解析jsp生成html页面--->jsp
        Controller:控制器  用于服务器和客户端交互  一个Servlet
    请求驱动类型
        请求-响应类型



SpringMVC在三层架构中的地位和位置

SpringMVC处理流程

SpringMVC的优势
    ? 清晰的角色划分
    ? 分工明确
    ? SpringMVC可以和Spring框架实现无缝衔接
    ? 支持RESTful风格
    ? 简单文件上传
    ? 约定大于配置的契约式编程支持
    ? 开箱即用
    ? 基于注解的零配置支持
    ? 功能强大的数据验证,格式,绑定机制
SpringMVC的Hello World快速入门
开发步骤
    ? 导包:Spring的核心容器包(四个)+日志包(两个commons-logging/log4j)+aop(面向切面)+web(web包)+webmvc()+jstl(自定义标签库)+servlet()+jsp
    ? 粘贴web下面的资源(取出web.xml)
    ? 创建数据库文件.导入crm_只有.sql
    ? 创建一个包叫controller,这个就是我们的web包
    ? 在controller包下面创建一个类叫做Controller,并在类上面添加注解@Controller
    ? 书写展示所有信息的方法,并在方法上添加注解@RequestMapping
    ? 新建springmvc.xml文件,扫描controller包
    <!--扫描controller包-->
    <context:component-scan base-package="com.zhiyou100.web.controller"/>
SpringMVC框架加载执行原理分析

    首先SpringMVC本质上是一个Servlet 借助于前端控制器DispatcherServlet
    在webxml文件中配置前端控制器DispatcherServlet,它是一个Servlet,所以我们可以按照Servlet的配置方式配
    <!--配置前端控制器 DispatcherServlet-->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <!--SpringMVC-->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--首先加载DispatcherServlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>*.action</url-pattern>
    </servlet-mapping>
    使用扩展名配置
    
    在<url-pattern>中配置通用映射*action
    
    当客户端请求发送过来时,首先经过前端控制器,前端控制器根据请求的资源映射调用处理器映射器组件
    HandleMapping,匹配url,当匹配到url之后,把结果返回给前端控制器,前端控制器收到结果后调用处理器适配器
    来匹配具体哪个方法,当方法被匹配到之后,如果方法上有参数,调用HttpMessageConverter,进行数据格式校验,
    数据封装,数据校验之后,开始把数据绑定到参数上,调用处理器来执行具体的方法业务内容
    
    处理器处理完,把结果返回给处理器适配器,处理器适配器在把结果(ModelAndView)返回给前端控制器,根据结果
    前端控制器来调用视图解析器,同时把view视图(String字符串表示的)传输给视图解析器ViewResovler
    视图解析器根据视图匹配服务器中到底哪一个视图(jsp视图)
    找到之后,把视图返回给前端控制器
    前端控制器根据视图调用视图组件View,同时把试图信息传输给view组件
    View组件开始解析,把逻辑视图转换成物理视图,生成html页面.返回给前端控制器
    前端控制器,把html静态页面和model数据一块通过响应的方式发送给客户端
    
    
SpringMVC组件介绍及配置(一个中心和三个基本点)

    ? 前端控制器 DispatcherServlet 中心
    他是整个流程控制的中心,由他来调用其他组件处理用户的请求
    设计他的初衷是为了降低组件之间的耦合性
    ? HeadleMappeing 处理器映射器
    负责根据用户的url请求 找到headle即处理器
    SpringMVC提供了不同的映射器实现机制:配置文件方式,实现接口方式,注解方式等
    @RequestMapping(),采用注解方式是目前企业中最为流行的方式.
    ? Headle处理器
    Headle是继前端控制器之后的后端控制器,在前端控制器的调配下headle对具体用户请求进行处理.
    因为Handle一般处理的都是业务上的请求,所以他一般都是开发人员完成的
    ? HeadleAdapter:处理器适配器
    通过HeadleAdapter对处理器进行解析执行.主要是适配器模式的匹配
    ? ViewResovler视图解析器
    ViewResovler负责将处理的结果生成View视图
    ? View视图
    SpringMVC提供了很多个View视图,如jstlView,freemarkerView,pdfView等
    我们最常用的是jsp视图.
    ? 说明
    在SpringMVC各个组件中,处理器适配器,处理器映射器.视图解析器称之为SpringMVC的三大组件,可以认为是一个中心,
    三个基本点.需要用户开发的组件有,Headle,view
    ? 配置相关的组件
        ○ 配置处理器配置器,处理器映射器
        通过查找DispatcherServlet.properties文件发现,建议你配置如下两个类
        <!--配置处理器映射器-->
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
        <!--配置处理器适配器-->
        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
        此时这两个组件就交给Spring容器管理.
注解驱动
    在SpringMVC中,提供了使用注解驱动来加载处理器适配器,处理器映射器组件
    <!--配置注解驱动  涵盖了处理器映射器和处理器适配器-->
    <mvc:annotation-driven/>
    
视图解析器
public static final String REDIRECT_URL_PREFIX = "redirect:";
public static final String FORWARD_URL_PREFIX = "forward:";
@Nullable
private Class<?> viewClass;
private String prefix = "";
private String suffix = "";
<!--配置视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/view/"/>
    <property name="suffix" value=".jsp"/>
</bean>
InternalResourceViewResolver
静态资源放行

    如果前端控制器在url-pattern中采用缺省配置,意思是想要拦截当前应用中的静态资源.
    静态资源需要开发者自己来调配
    如果应用中还要使用静态资源,此时就涉及到,静态资源放行问题.
    注意:此处有缓存,需要先清除cookie值.
    方式一
        前端控制器本质上就是一个Servlet,在Tomcat服务器内部对缺省配置有单独的处理,他采用的是静态资源放行.
        如果想要使用tomcat默认对缺省配置的处理,需要开启tomcat的缺省配置.
        <!--静态资源放行-->
        <!--方式一 采用tomcat默认的处理方式 开启tomcat缺省配置处理方式-->
        <mvc:default-servlet-handler/>
    方式二
        手动建立映射关系
        使用标签<mvc:resources location = "/img/" mapping = "/images/**"/>
            mapping:服务器的映射路径 url上面的路径
            location:映射应用当中具体的静态资源  静态资源的加载路径
            <!--方式二 采用手动映射-->
            <mvc:resources mapping="/img/**" location="/img/"/>
            <mvc:resources mapping="/css/**" location="/css/"/>
            <mvc:resources mapping="/js/**" location="/js/"/>
            <mvc:resources mapping="/lib/**" location="/lib/"/>
        **代表子文件也可以
SSM整合
    ? 导包
    1.Spring-context包 含有 核心容器中的四个jar包和aop包
    …
    大致32个jar包
    详见day70_SSM01工程
    ? 在resources资源文件夹下面新建两个目录.一个是spring(Spring的核心配置) 一个是mybatis(mybatis的核心配置)
    ? 把db.properties文件和log4j.properties文件粘贴到resources目录下
    ? 在spring目录下创建springmvc.xml文件
        ○ 设置处理器映射器和处理器适配器的注解驱动
        ○ 开启扫描controller组件
        ○ 配置视图解析器 添加前后缀
    ? 在spring目录下创建applicationContext-dao.xml
        ○ 引入数据源db.properties
        ○ 配置连接池依赖于db.properties文件  生成dataSource对象
        ○ 配置SqlSessionFactory对象
        ○ 配置mapper扫描
    ? 在spring目录下创建applicationContext-service.xml文件
        ○ 配置扫描service组件
          <!--配置扫描service组件-->
          <coontext:component-scan base-package="com.zhiyou100.service"/>
    ? 在spring目录下创建applicationContext-tx.xml文件
        ○ 配置事务。
    ? 在mybatis目录下创建mybatis-config.xml文件
    ? 配置web.xml文件
        ○ 配置上下文监听器 ContextLoaderListener 读取spring的配置文件
        ○ 配置前端控制器 DispatcherServlet 读取 springmvc.xml配置文件
    ? 创建mapper, util, pojo包对应的类
参数绑定
默认支持参数类型
    HttpSession对象.HttpServletRequest对象.HttpServletResponse对象(doGat,doPost)
    还可以使用Model对象(数据封装模型),大多是用于回传数据的(类似于Request域)
    ModelMap对象  大多是用于回传数据的(类似于Request域)

简单类型参数
    基本类型:四类八种
        一般情况下在使用基本类型的时候,使用包装类.,因为基本类型不能接收null值
        备注:
            对于boolean类型的参数,请求的参数值为1时后台接收值为true  反之  请求的参数值为0时后台接收值为false
            
    String
@RequestParam注解使用介绍
    当表单中的name属性和请求的参数名称不匹配时,可以使用@RequestParam注解  该注解可以手动和name属性建立映射关系
    ? name属性:指定参数名称,确保name属性名称一致
    ? required属性:表示传过来的name属性是否为必须的,默认值为true
    ? defaultValue属性:如果name属性没有传值,可以使用defaultValue指定请求参数的默认值
参数绑定Pojo类
中文乱码
参数绑定包装类
数组参数绑定
集合类型参数绑定
自定义格式类型转换器


posted @ 2021-03-09 19:41  shangjinshuai  阅读(77)  评论(0)    收藏  举报