一、SpringMvc框架简介

1、Mvc设计理念

MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,MVC分层有助于管理和架构复杂的应用程序

  • M:代表模型Model

模型就是数据,应用程序的核心。

  • V:代表视图View

回显数据的界面,例如JSP就是用来展示模型中的数据。

  • C:代表控制器Controller

控制器的作用就是根据入参,把不同的响应数据(Model),显示在不同的视图(View)上。

2、SpringMvc简介

  • 框架描述

SpringMVC是一种基于Java实现的MVC设计模式的请求驱动类型的轻量级Web框架,出自Spring框架全家桶,与Spring框架无缝整合,使用了MVC架构模式的思想,将Web层进行职责解耦。

  • 框架优点

结构松散,几乎可以在SpringMVC中使用各类视图,各个模块分离而且耦合度非常低,且易于扩展。与Spring无缝集成,且简单,灵活,容易上手。

二、SpringMvc执行流程

1、流程图解

2、步骤描述

(1)、发起请求到前端控制器DispatcherServlet;

(2)、前端控制器请求HandlerMapping查找,Handler可以根据xml配置、注解进行查找;

(3)、处理器映射器HandlerMapping向前端控制器返回Handler;

(4)、前端控制器调用处理器适配器去执行Handler;

(5)、处理器适配器去执行Handler ;

(6)、Handler执行完成给适配器返回ModelAndView ;

(7)、处理器适配器向前端控制器返回ModelAndView,ModelAndViewspringmvc框架的一个底层对象,包括Modelview;

(8)、前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图 ;

(9)、视图解析器向前端控制器返回View ;

(10)、前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域中;

(11)、前端控制器向用户响应结果 ;

3、核心组件

  • 前端控制器

DispatcherServlet:请求离开浏览器后,最先到达的就是DispatcherServlet,是整个流程控制的中心,作用接收请求,响应结果,相当于转发器,中央处理器。减少各个组件之间的耦合度。

  • 处理器映射器

HandlerMapping:根据请求的url路由到指定接口,用户请求找到Handler处理器,springmvc提供不同类型映射器,例如:Xml配置方式,注解方式等。

  • 处理器适配器

HandlerAdapter:按照特定规则去执行Handler,SpringMvc支持多种处理器,各种处理器中的处理方法各不相同,为了解决适应多种处理器,就出现了处理器适配器。

  • 处理器

Handler:处理用户请求,涉及具体业务逻辑,需要程序员根据业务需求开发。编写Handler时按照HandlerAdapter的规则开发,这样适配器才可以正确执行Handler。

  • 视图解析器

ViewResolver:负责将请求的响应结果生成View,根据逻辑视图名解析成物理视图名,就是具体页面地址,生成View视图对象,对View进行渲染,通过页面展示给用户。

  • 视图

View:SpringMvc框架提供很多的View视图类型的支持,包括:jsp、freemarker、pdf等。通过页面标签或页面模版解析模型数据回显到页面,需要根据业务开发具体页面。

三、整合Spring框架配置

1、spring-mvc配置

<!-- 扫描文件 -->
<context:component-scan base-package="com.spring.mvc.controller" />
<!-- MVC默认的注解映射的方式 -->
<mvc:annotation-driven />
<mvc:default-servlet-handler/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/page/" /><property name="suffix" value=".jsp" />
</bean>

2、Web.xml配置

<servlet><servlet-name>spring-mvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>spring-mvc</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

3、测试接口

@Controller
public class HelloController {@RequestMapping("/getInfo")public @ResponseBody String getInfo (String name){return name ;}
}

4、常用注解说明

  • @Controller

标记一个类是Handler,也就是开发的Controller,然后使用@RequestMapping或其他相关注解(@GetMapping、@PostMapping、@PutMapping、@DeleteMapping),用来关联请求和Controller方法之间的映射关系,这样的Controller 就可以被请求访问。

  • @RequestMapping

处理请求地址映射的注解,可作用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以类上标注地址作为父路径。

  • @requestParam

主要用于在SpringMvc框架的控制层获取参数,三个常用参数:defaultValue表示设置默认值,required 通过boolean设置是否是必须要传入的参数,value值表示传入的参数名称。

  • @RequestBody

接收请求体中传递给后端的Json字符串数据的,GET方式无请求体,所以使用@RequestBody接收数据时,不能使用GET方式提交数据,需要用POST方式进行提交。

  • @ResponseBody

该注解用于方法的返回对象,可以通过配置转换器为指定数据响应格式,如果希望返回的数据不是View试图页面,而是指定数据格式的时候使用,例如:Json、Xml等。

  • @Autowired

按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。

  • @Resource

按照ByName自动注入,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。

  • @PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。

四、常见参数映射

1、普通映射

@RequestMapping("/getSum")
public Integer getSum (int a,int b){return a+b ;
}

测试:

http://localhost:6003/getSum?a=1&b=2

传参名称和方法参数保持一致。

2、指定参数名

@RequestMapping("/getInfo")
public String getInfo (@RequestParam("name") String var1,@RequestParam("say") String var2){return var1+":"+var2 ;
}

测试:

http://localhost:6003/getInfo?name=cica&say=hello

传参名和 @RequestParam 指定的参数名要对应。

3、数组参数

@GetMapping("/getArray")
public String getArray (String[] ids){return ids[0]+"-"+ids[1] ;
}

测试:

http://localhost:6003/getArray?ids=2&ids=3

传递并解析数组类型的参数格式。

4、Map参数

@RequestMapping("/getMap")
public String getMap (@RequestParam Map<String,String> paramMap){return paramMap.get("name") ;
}

测试:

http://localhost:6003/getCityEntity?province=浙江&name=杭州

这里以Post方式将相关参数传递CityEntity实体对象中。

5、包装参数

@PostMapping("/getCityEntity")
public CityEntity getCityEntity (CityEntity cityEntity){return cityEntity ;
}

测试:

http://localhost:6003/getCityEntity?province=浙江&name=杭州

这里以Post方式将相关参数传递CityEntity实体对象中。

6、Rest风格参数

@GetMapping("/getId/{id}")
public String getId (@PathVariable("id") Integer id){return "id="+id ;
}

测试:

http://localhost:6003/getId/1

RestFul 风格参数映射。

<END>

spring mvc返回页面显示空白_Spring 框架基础(06):Mvc架构模式简介,执行流程详解...相关推荐

  1. data spring 指定时区_Spring 框架基础(05):Mvc架构模式,执行流程详解

    本文源码:GitHub || GitEE 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面, ...

  2. .net mvc actionresult 返回字符串_Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...

  3. Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集 ...

  4. php显示空白,[喵咪PHP]页面显示空白问题

    #[喵咪PHP]页面显示空白问题#php ##前言##nginx 哈喽!你们好啊,喵咪PHP第一次和你们见面了,熟悉的朋友呢也之道喵咪我也开了喵咪Liunx和喵咪Golang这两个坑目的呢是吧日常遇到 ...

  5. nginx+php-fpm页面显示空白的解决方法

    nginx+php-fpm页面显示空白的解决方法 参考文章: (1)nginx+php-fpm页面显示空白的解决方法 (2)https://www.cnblogs.com/mafeng/p/80037 ...

  6. 打包后index.html路径错误,解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题...

    解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题 2018年05月23日 10:05:35 for_weber 阅读数:14179 Vue项目运行npm run buil ...

  7. Vue路由跳转-页面显示空白

    跳转页面,指定路径跳转到某个页面时,如果没有按照正确的方式写路径,会导致页面显示空白 html部分 方法1.<div class="nav-item-1" @click=&q ...

  8. java处理请求的流程_Java Spring mvc请求处理流程详解

    Spring mvc请求处理流程详解 前言 spring mvc框架相信很多人都很熟悉了,关于这方面的资料也是一搜一大把.但是感觉讲的都不是很细致,让很多初学者都云里雾里的.本人也是这样,之前研究过, ...

  9. ajax配合ssm框架,SSM框架前后端信息交互实现流程详解

    SSM框架前后端信息交互实现流程详解 比如该处代码,显示了问题的标题信息,并将其作为超链接,点击该链接时进入后端Controller类的方法,并向其发送问题编号question_id 3.ajax请求 ...

最新文章

  1. 虚拟函数是否应该被声明仅为private/protected?
  2. Paper9:Fast RCNN
  3. 全国大学生智能车竞赛线上高校组合申请通知
  4. Android中的颜色
  5. 【noi 2.6_9284】盒子与小球之二(DP)
  6. dispatchTouchEvent onInterceptTouchEvent onTouchEvent区分
  7. 虚幻四中怎么保持导入模型坐标_[CG分享]|虚幻引擎5 技术解析
  8. 惯性导航讲解(概念以及主要部件的讲解)
  9. ALSA音频架构 -- aplay播放流程分析
  10. C语言除法运算符“/”和求余运算符“%”
  11. 如何从Win11系统安装回win10系统?
  12. 医院计算机考核制度,医院信息科考核内容标准细则
  13. WebIM 网页聊天工具
  14. 测试一枚-记录工作-覆盖率(二)
  15. Win11dns解析状态异常怎么处理?Win11dns解析失败解决方法
  16. day 05 DQL数据查询语言---连接查询---登堂入室
  17. linux分析mirna,一篇15分的miRNA芯片文章详细解读 | 文章解读
  18. 童年学习机器人的 5 大好处
  19. CAT 实时监控与项目集成
  20. 013-zabbix trapper方式监控

热门文章

  1. 零基础小白一个,我是如何入门商业数据分析师的
  2. 衡量时间序列相似度的方法:从欧氏距离到DTW及其变种
  3. 最后两周!60万奖金AI攻防赛进入冲刺(附baseline代码及实操)
  4. ACM公选课第四节高精度 2020.4.9课-2020.4.10补
  5. HDU1407 测试你是否和LTC水平一样高 暴力、二分、hash
  6. 【JavaScript代码】使用JavaScript实现简单的区块链(签名+工作量证明机制)
  7. ClickHouse【资源分享 01】Linux环境 clickhouse-19.7.3.9 离线安装文件分享(百度云盘)
  8. ssm idea后端接收数据输出在控制台时出现中文乱码
  9. centos 上传jar 命令_centos上快速将一个jar使用docker部署启动
  10. Error:Kotlin: Module was compiled with an incompatible version of Kotlin