MVC设计模式

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  视图(View)      -对应组件:JSP或者HTML文件

  控制器(controller) -对应组件:Servlet

  模型(Model)   -对应组件:JavaBean

  SpringMVC与请求控制器 随笔 第1张

 

MVC优点 

  多视图共享一个模型,大大提高代码的可重用性

  MVC三个模块相互独立,松耦合架构

  控制器提高了应用程序的灵活性和可配置性

  有利于软件工程化管理

MVC缺点 

  原理复杂

  增加了系统结构和实现的复杂性

  视图对模型数据的低效访问

Spring MVC框架实现原理

  1. 发起请求到前端控制器(DispatcherServlet)
  2. 前端控制器请求HanderrMapping查找Handler(可根据xml配置,注解查找)
  3. 处理器映射器HandlerMapping向前端控制器返回Handler
  4. 前端控制器调用处理器适配器执行Handler
  5. 处理器适配器执行Handler
  6. Handler执行完成后给适配器返回ModelAndView
  7. 处理器适配器向前端控制器返回ModelAndView(SpringMVC底层对象,包含model和view)
  8. 前端控制器请求视图解析器进行解析(根据逻辑视图名解析真正的视图名(.jsp))
  9. 视图解析器向前端控制器返回View
  10. 前端控制器实行视图渲染(视图渲染将模型数据填充到request域中)
  11. 响应给客户端

Spring MVC框架搭建步骤

  下载jar文件并导入工程

    SpringMVC与请求控制器 随笔 第2张

 

  配置文件->修改web.xml配置文件

<!-- 配置核心控制器 DispatcherServlet -->

  <servlet>

        <servlet-name>springmvc</servlet-name>

        <servlet-class>

        org.springframework.web.servlet.DispatcherServlet

        </servlet-class>

<!-- Springmvc默认加载Springmvc的配置文件,但是需要满足一下规则

命名规则:servlet-name-servlet.xml==> springmvc-servlet.xml

路径规则:springmvc-servlet.xml必须放在WEB-INFO下面-->

<!-- 定义读取的applicationContext-mvc.xml文件 -->

         <init-param>

            <param-name>contextConfigLocation</param-name>  <param-value>classpath:applicationContext-mvc.xml

</param-value>

       </init-param>

       <!-- 启动服务器即读取 -->

 <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>

        <servlet-name>springmvc</servlet-name>

         <url-pattern>/</url-pattern>

</servlet-mapping>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

创建Spring MVC的配置文件(注:跟配置读取mvc.xml必须一致)

  SpringMVC与请求控制器 随笔 第3张

配置注解处理器映射器(mvc.xml文件配置)

<!-- 配置注解的处理器映射器  寻找执行类 Controller -->

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />

配置注解处理器适配器(mvc.xml文件配置)

<!-- 配置注解的处理器适配器 执行Controller -->

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />

开启指定目录注解扫描(mvc.xml文件配置)

   <!-- 开启注解扫描  cn.smbms替换controller所在包路径-->

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

配置视图解析器(mvc.xml文件配置)

 <!-- 配置视图解析器  /WEB-INF/jsp/index.jsp-->

 <bean id="viewResolver"

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <!-- 配置前缀-->

        <property name="prefix" value="/WEB-INF/jsp/" />

        <!-- 配置后缀  -->

        <property name="suffix" value=".jsp" />

</bean>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

控制层方法上添加@Controller注解,也可以@Controller("xxx/xxx/")添加路径前缀

方法上添加@RequestMapping注解 

  RequestMapping(定义访问名)

    功能:请求映射

    写法:

      RequestMapping(“index”)  可以匹配任何的扩展名

      RequestMapping(“/index.do”)

      RequestMapping(value=“/index.do”)

      RequestMapping(value=“/index.do” method=RequestMethod.GET)

      RequestMapping(value=“/index.do” method=RequestMethod.POST)

    浏览器直接写url或者a标签都是GET请求

    一般情况下,如果使用from表单提交都是post请求,还有ajax请求指定post请求

SpringMVC基于注解封装参数   

  根路径注解RequestMapper(“”) 是为了隔离不同的Controller里面相同的方法

  SpringMVC没有成员变量,把需要的参数对象放入方法中,当你请求这个方法时候,这个方法里面对象会自动被创建,需要封装的参数自动被封装方法的对象.

  提交表单:

    例:<form action="${pageContext.request.contextPath}/login" > 前面的参数是取得当前的绝对路径. 需要导入jsp-api包

    基本数据类型

   SpringMVC与请求控制器 随笔 第4张

    实体类

     SpringMVC与请求控制器 随笔 第5张

     包装类

      SpringMVC与请求控制器 随笔 第6张

    数组

      SpringMVC与请求控制器 随笔 第7张

    接收集合类型参数

      方法里面不能直接传递list集合和map集合类型参数,把list集合定义在包装类里面.

    List传递

      SpringMVC与请求控制器 随笔 第8张

     

    接收Map类型参数

    SpringMVC与请求控制器 随笔 第9张

页面参数的回显

  Springmvc使用model对象,Model对象相当于application

  application对象中数据可以是el表达式进行获取

  SpringMVC与请求控制器 随笔 第10张

URL模板映射

  主要是为请求restfull设计模式

  restfull软件架构设计模式:请求更简洁,更方便,更安全搜索引擎收录.

  普通修改数据

    <a ref="${pageContext.request.contextPath}/index/update.do?id=${user.id}">编辑</a>

    初识Restfull

    <a href="${pageContext.request.contextPath}/index/update/${user.id }.do">编辑</a>

    SpringMVC与请求控制器 随笔 第11张

    绝对实现Restfull风格

        SpringMVC与请求控制器 随笔 第12张

    如果在上面DispatcherServlet设置拦截权限为全局,则可绝对实现Restfull风格.

     例:设置全局拦截

      SpringMVC与请求控制器 随笔 第13张

      则请求默认实现Restfull风格

      

 

RequestParam

  该注解可以给参数设置别名,设置默认值.

  内置属性:

    value=”属性别名”  设置参数属性别名,在页面使用别名进行传参.

     defaultValue=”默认值”,设置默认属性值,当无值传入时,传入默认值.

    required=”true(默认)” 请求中一定要有相应的参数,否则报400错误.

  SpringMVC与请求控制器 随笔 第14张

转发和重定向

  forward:转发,不改变地址情况下的页面跳转

    return “forward: getList”;//相对路径

    SpringMVC与请求控制器 随笔 第15张

    return “forward:/index/ getList”;//根路径可随便指定已有的路径

    SpringMVC与请求控制器 随笔 第16张

  redirect:页面跳转,地址同步改变

    return "redirect:getList";//相对路径跳转

      SpringMVC与请求控制器 随笔 第17张

    return "redirect:/index/getList";//绝对路径重定向

       SpringMVC与请求控制器 随笔 第18张

<mvc:annotation-driven />   spring3.0.x后默认使用了

<mvc:annotation-driven />默认创建了处理器映射器和处理器适配器,还提供了json数据格式的支持

    

 

   

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄