spring mvc学习的一点总结

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 configuration
PUBLIC "-//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等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值