spring mvc学习的一点总结

来源:互联网 发布:大数据时代风险 编辑:程序博客网 时间:2024/05/20 07:59

spring mvc是spring框架的一部分,spring mvc和spring无需通过中间整合层进行整合。spring mvc是一个基于mvc的web框架,是基于方法开发的,可进行单例开发。这边文章记录了一些学习过程中基础问题,包括执行过程,xml文件配置问题,ssm整合,参数绑定

一、spring mvc 执行过程

1.发送请求到前端控制器(DispatcherServlet)
2.前端控制器请求HandlerMapping查找Handler(根据xml配置、注解查找)
3.处理器映射器HandlerMapping向前端控制器返回Handler
4.前端控制器调用处理器适配器执行Handler
5.处理器适配器执行Handler
6.向前端控制器返回ModelAndView
7.前端控制器请求视图解析器进行视图解析
8.视图解析器向前端控制器返回view
9.前端控制器进行视图渲染
10.向用户响应结果

二、web.xml下spring mvc 前端控制器配置

    <!--配置DispatcherServlet -->    <servlet>        <servlet-name>spring-dispatcher</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <!-- 配置SpringMVC需要加载的配置文件 spring-xxx.xml -->        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath:spring-*.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>spring-dispatcher</servlet-name>        <!--默认匹配所有的请求 -->        <url-pattern>/</url-pattern>    </servlet-mapping>

三、spring-servlet.xml配置处理器映射器、处理器适配器、Handler

    <!-- 处理器映射器 -->    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>    <!-- 处理器适配器 -->    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
注解方式的适配器、映射器
    <!-- 注解映射器 -->    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>    <!-- 注解适配器 -->    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>

可以简化配置

<!--简化配置:        1、自动注册RequestMappingHandlerMapping,RequestMappingHandlerAdapter        2、提供一系列:数据绑定,数字和日期的format,@NumberFormat,@DataTimeFormat,xml,json默认读写支持    --><mvc:annotation-driven/>

注解方式配置Handler使用组件扫描

<context:component-scan base-package=" "></context:component-scan>

在控制层需要对类进行@Controller的标记,在@RequestMapping(“”)里边定义映射的url。

四、ssm整合
1.整合dao层:mybatis和spring整合,通过spring管理mapper接口
mybatis-config.xml配置

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <!--配置全局属性-->    <settings>        <!--使用jdbc的getGeneratekeys获取自增主键值-->        <setting name="useGeneratedKeys" value="true"/>        <!--使用列别名替换别名  默认true-->        <setting name="useColumnLabel" value="true"/>        <!--开启驼峰命名转换Table:create_time到 Entity(createTime)-->        <setting name="mapUnderscoreToCamelCase" value="true"/>    </settings>        <!-- 配置别名 -->    <typeAliases>        <!-- 批量配置别名 -->            <package name=""/>    </typeAliases></configuration>

spring-dao.xml配置(数据源,SqlSessionFactory,mapper扫描器)

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context.xsd">    <!--配置整合mybatis过程-->    <!--1、配置数据库相关参数-->    <context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/>    <!--2.数据源druid -->    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"             init-method="init" destroy-method="close">        <property name="driverClassName" value="${jdbc.driverClassName}" />        <property name="url" value="${jdbc.url}" />        <property name="username" value="${jdbc.username}" />        <property name="password" value="${jdbc.password}" />         <!-- 配置初始化大小、最小、最大 -->          <property name="initialSize" value="${druid.pool.size.init}" />          <property name="minIdle" value="${druid.pool.size.min}" />           <property name="maxActive" value="${druid.pool.size.max}" />          <!-- 配置监控统计拦截的filters,wall用于防止sql注入,stat用于统计分析 -->        <property name="filters" value="wall,stat" />     </bean>    <!--3、配置SqlSessionFactory对象-->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <!--注入数据库连接池-->        <property name="dataSource" ref="dataSource"/>        <!--配置mybatis全局配置文件:mybatis-config.xml-->        <property name="configLocation" value="classpath:mybatis-config.xml"/>        <!--扫描entity包,使用别名,多个用;隔开-->        <property name="typeAliasesPackage" value="com.sqy.ssm.entity"/>        <!--扫描sql配置文件:mapper需要的xml文件-->        <property name="mapperLocations" value="classpath:mapper/*.xml"/>    </bean>    <!--4、配置扫描Dao接口包,动态实现DAO接口,注入到spring容器-->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <!--注入SqlSessionFactory-->        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>        <!-- 给出需要扫描的Dao接口-->        <property name="basePackage" value="com.sqy.ssm.dao"/>    </bean></beans>

注意注入SqlSessionFactory时, 使用的是value而不是ref

2.整合service层:通过spring管理service接口,实现事务控制
spring-service.xml配置

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:aop="http://www.springframework.org/schema/aop"       xmlns:tx="http://www.springframework.org/schema/tx"       xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/aop        http://www.springframework.org/schema/aop/spring-aop.xsd        http://www.springframework.org/schema/tx        http://www.springframework.org/schema/tx/spring-tx.xsd">    <!--扫描service包(包含子包)下所有使用注解的类型-->    <context:component-scan base-package="com.sqy.ssm.service"/>    <!--配置事务管理器(mybatis采用的是JDBC的事务管理器)-->    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource"></property>    </bean>    <!--配置基于注解的声明式事务,默认使用注解来管理事务行为-->    <tx:annotation-driven transaction-manager="transactionManager"/></beans>

3.整合springmvc
配置spring-servlet.xml文件,配置处理器映射器,适配器、视图解析器

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:mvc="http://www.springframework.org/schema/mvc"       xmlns:aop="http://www.springframework.org/schema/aop"       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/mvc         http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">    <!-- 激活组件扫描功能,扫描aop的相关组件组件 -->    <context:component-scan base-package="com.sqy.ssm.aop"/>    <!-- 启动对@AspectJ注解的支持 -->    <aop:aspectj-autoproxy proxy-target-class="true" />    <!--简化配置:        1、自动注册RequestMappingHandlerMapping,RequestMappingHandlerAdapter        2、提供一系列:数据绑定,数字和日期的format,@NumberFormat,@DataTimeFormat,xml,json默认读写支持    -->    <mvc:annotation-driven/>    <!--静态资源默认servlet配置        1、加入对静态资源的处理:js,css,gif,png        2、允许使用"/"做整体映射    -->    <mvc:default-servlet-handler/>    <!--配置视图解析器-->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>        <property name="prefix" value="/WEB-INF/jsp/"/>        <property name="suffix" value=".jsp"/>    </bean>    <!--扫描web相关的controller-->    <context:component-scan base-package="com.sqy.ssm.controller"/> </beans>

五、springmvc参数绑定

处理器适配器通过调用springmvc提供的参数绑定组件,将客户端请求的key/value数据转成controller方法的形参。
参数绑定组件:早期使用PropertyEditor,但因其只能将字符串传成java对象,converter能进行任意类型的转换,所以后期使用converter,在特殊情况下,如日期数据的绑定可以自定义converter。
1、参数绑定过程中,HttpServletRequest、HttpServletResponse、HttpSession、Modle/ModleMap(将Modle数据填充到Request域)直接进行绑定。
2、简单类型的参数进行绑定:@RequestParam(value=”“,required=true,defaultValu=“”),属性value可以指定request传入参数名称和形参进行绑定,属性required指定参数是否必须要传入,属性 defaultValu设置默认值。
3、POJP类型的参数进行绑定:页面中input的name属性和controller的POJO形参中的属性名称一致,将页面中数据绑定到POJO
4、自定义参数绑定(日期):

<mvc:annotation-driven conversion-service="conversionService"/><!-- 自定义参数绑定 -->    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">        <!-- 转换器 -->        <property name="converters">            <list>                <bean class="com.sqy.ssm.converter.DateConverter"/>             </list>        </property>    </bean>

参数绑定还有包装类型、数组、list等。