MVC设计模式

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

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

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

  

 

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文件并导入工程

    

  配置文件->修改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必须一致)

  

配置注解处理器映射器(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包

    基本数据类型

   

    实体类

     

     包装类

      

    数组

      

    接收集合类型参数

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

    List传递

      

     

    接收Map类型参数

    

页面参数的回显

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

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

  

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>

    

    绝对实现Restfull风格

        

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

    例:设置全局拦截

      

      则请求默认实现Restfull风格

      

RequestParam

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

  内置属性:

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

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

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

  

转发和重定向

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

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

    

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

    

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

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

      

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

      

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

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

    

  

SpringMVC与请求控制器的更多相关文章

  1. Spring MVC体系结构和处理请求控制器

    Spring MVC体系结构和处理请求控制器 一:MVC设计模式: (1.)数据访问接口:DAO层 (2.)处理业务逻辑层:Service层 (3.)数据实体:POJO (4.)负责前段请求接受并处理 ...

  2. SpringBoot对比SpringMVC,SpringMVC 处理请求过程

    (问较多:1.SpringBoot对比SpringMVC.2.SpringMVC 处理请求过程.问:springboot的理解 Spring,Spring MVC,Spring Boot 三者比较 S ...

  3. springMVC(一) --前端控制器(DispatcherServlet)的作用

        SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户 ...

  4. 16 SpringMVC 的请求参数的绑定与常用注解

    1.SpringMVC 绑定请求参数 (1)支持的数据类型 基本类型参数: 包括基本类型和 String 类型POJO 类型参数: 包括实体类,以及关联的实体类数组和集合类型参数: 包括 List 结 ...

  5. Spring系列 SpringMVC的请求与数据响应

    Spring系列 SpringMVC的请求与数据响应 SpringMVC的数据响应 数据响应的方式 y以下案例均部署在Tomcat上,使用浏览器来访问一个简单的success.jsp页面来实现 Suc ...

  6. SpringMVC 获得请求数据

    获得请求参数 客户端请求参数的格式是:name=value&name=value- - 服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数: 基本类型 ...

  7. springMvc REST 请求和响应

    前言: 突然怎么也想不起来  springMvc REST 请求的返回  类型了!   (尴尬+究竟)  然后本着 方便的想法 百度了一下 发现了个问题,大家在写      springMvc RES ...

  8. SpringMvc Controller请求链接忽略大小写(包含拦截器)及@ResponseBody返回String中文乱码处理

    SpringMvc Controller请求链接忽略大小写(包含拦截器)及@ResponseBody返回String中文乱码处理... @RequestMapping(value = "/t ...

  9. SpringMVC之请求参数的获取方式

    转载出处:https://www.toutiao.com/i6510822190219264516/ SpringMVC之请求参数的获取方式 常见的一个web服务,如何获取请求参数? 一般最常见的请求 ...

随机推荐

  1. linux系列之-—01 shell编程笔记

    一.特殊变量($0.$1.$2. $?. $# .$@. $*) shell编程中有一些特殊的变量可以使用.这些变量在脚本中可以作为全局变量来使用. 名称 说明 $0 脚本名称 $1-9 脚本执行时的 ...

  2. Linux Grub系统加密、破密、修复

    一.在重新启动系统时候按任意键进入 grub界面  Grub加密 一.title前的密码 修改grub.conf 这种加密只是在用户要进入grub界面的时候提示要输入密码,但是可以正常进入系统,有没有 ...

  3. 数据结构与算法问题 AVL二叉平衡树

    AVL树是带有平衡条件的二叉查找树. 这个平衡条件必须保持,并且它必须保证树的深度是O(logN). 一棵AVL树是其每一个节点的左子树和右子树的高度最多差1的二叉查找树. (空树的高度定义为-1). ...

  4. UVA 1400 1400 - &quot;Ray, Pass me the dishes!&quot;(线段树)

    UVA 1400 - "Ray, Pass me the dishes!" option=com_onlinejudge&Itemid=8&page=show_pr ...

  5. MVC+ZTree大数据异步树加载

    实例部分: 首先是为ZTree提供的数据规范,定义一个标准的接口,这样对于前台调用是清楚的,简单的,因为它返回的JSON数据将与ZTree默认的数据元素保持一致 /// <summary> ...

  6. ubuntu中查看已安装软件包的方法

    ubuntu中查看已安装软件包的方法: 方法一:在新立得软件包管理器中,打到已安装,便可以看看有多少包被安装. 如果想把这些包的信息复制到一文件里,可用下面的方法. 方法二:在终端输入 sudo dp ...

  7. anaconda tensorflow tflearn 自动安装脚本 anaconda使用-b可以非交互式安装

    install_dir=/usr/local/anaconda3 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )&qu ...

  8. easy_install uncompyle6 egg

    localhost:~ # easy_install uncompyle6-3.0.1-py3.6.eggProcessing uncompyle6-3.0.1-py3.6.eggCopying un ...

  9. BZOJ_2821_作诗(Poetize)_分块

    BZOJ_2821_作诗(Poetize)_分块 Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗 之后还要 ...

  10. WIN8系统的远程桌面漏洞 利用QQ拼音纯净版实现提权

    前言 发现这个漏洞的时候, 笔者正在机房上课.正想用3389远程桌面去控制宿舍电脑的时候,因为重做系统忘记自己的IP地址,因此就随手扫描了一下IP段开3389端口的电脑. 没想到就随手扫描到一台WIN ...