SpringMVC详解

一、引言

         由来: 为了插入现有MVC开发架构,基于Spring框架所开发的一个控制器框架
         概念: SpringMVC是一个轻量级的MVC中C层框架
         优势: 与Struts2相比 速度更快 开发效率高 灵活(注解)
        SpringMVC是在Spring框架基础上开发,和Spring框架进行无缝衔接

二、基础配置

       1. 注册SpringMVC的配置文件
       2. 书写SpringMVC配置文件
           1)处理器映射器:解析请求
           2)处理器适配器:绑定参数到控制器
           3)处理器映射器 返回结果映射

  <!-- 注解扫描 -->
    <context:component-scan base-package="com.baizhi.action"/>
    
    <!--处理器映射器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
        <!--用于解析请求-->
    </bean>
    <!--处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <!--用于绑定请求参数到控制器中-->
    </bean>

    <!--处理器映射器适配器优化版-->
    <!--<mvc:annotation-driven/>-->
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置返回结果前缀后缀 完成返回结果映射-->
        <property name="prefix" value="/"/><!--前缀-->
        <property name="suffix" value=".jsp"/><!--后缀-->
    </bean>

三、跳转方式在这里插入图片描述

四、数据接收

      1.基本数据类型接收:
            在服务方法中定义同名参数,注意:Date类型默认格式为 yyyy/MM/dd hh:mm:ss

      2. 对象类型接收:
            在服务方法中定义对象类型参数,传递数据时,直接书写属性名=值,后续由SpringMVC自动封装数据
            复杂情况:
            1.接收的参数有对象类型并且还有基本类型,此时对象的属性名和接收参数的名字一致.SpringMVC会同时赋值
            2.对象里边嵌套对象传递方式: 对象属性名.属性名

      3.数组集合类型数据接收:
            1.数组:传递数据时保证:传递数据的名字相同
            2.集合:默认不支持集合类型接收 可以通过封装VO(ValueObject)对象进行接收

      4.文件类型的接收:
            上传文件使用 MultipartFile 类作为参数 ,必须在配置文件中配置上传解析器 CommonsMultipartResolver
            文件下载需设置请求头和设置文件下载方式(inline | attachment)

response.setHeader("content-disposition","attachment:fileName=文件名")

五、作用域

      1.使用原生作用域存储传递
            将作用域作为参数书写在服务方法的内部

public void returnIndex(HttpServletRequest request,HttpSession session)
request.setAttribute("key","value");
session.setAttribute("key","value");

      2.SpringMVC提供
            将request作用域封装成了Model || ModelMap类型

      3.重定向方式数据存储和传递
            直接在返回值中拼接即可
             return “redirect:/index.jsp?key=value”

      4.页面数据获取和展示:
            JSTL+EL表达式

六、拦截器

      1.作用:存放冗余代码,提高程序的可维护性
      2.特点:只拦截控制器相关请求;可以影响请求轨迹;拦截请求和响应
      3.开发流程:

#1.实现 HandlierInterceptor 

#2.SpringMVC配置文件注册拦截器
	<!--注册拦截器-->
    <bean class="com.baizhi.interceptor.LoginInterceptor" id="loginInterceptor"/>

#3.设置拦截器拦截那些请求
<mvc:interceptors>
        <!--单个拦截器配置-->
        <mvc:interceptor>
            <!--设置要拦截的Controller方法 推荐使用**-->
            <mvc:mapping path="/emp/**"/>
            <!--设置不拦截哪些Controller方法-->
            <mvc:exclude-mapping path="/emp/loginok"/>
            <!--声明当前使用的拦截器-->
            <ref bean="loginInterceptor"/>
        </mvc:interceptor>
        <!--多个拦截器执行顺序-->
    </mvc:interceptors>

      SpringMVC全局异常处理:实现 HeadlerExceptionResolver 配置文件注册

七、Spring和SpringMVC父子容器

    两者的包扫描可能造成 Service 事务失效
      解决方案:
      1.细粒度的包扫描:SpringMVC只扫描 Controller; Spring扫描 Service
      2.大范围扫描:指定Spring 和 SpringMVC 的扫描范围避免重叠

<context:component-scan base-package="com*" use-default-filters="false指定扫描策略 默认为true(全扫描)">
	<!-- 扫描那些类 -->
	<context:include-filter type="annontation" expression="包全限定名">
	<!-- 不扫描那些类 -->
	<context:exclude-filter type="annontation" expression="包全限定名">
</context:component-scan>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值