首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

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

本文源码:GitHub·点这里 || GitEE·点这里 一、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,ModelAndView是springmvc框架的一个底层对象,包括Model和view ; (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 风格参数映射。 五、源代码地址 GitHub·地址 https://github.com/cicadasmile/spring-mvc-parent GitEE·地址 https://gitee.com/cicadasmile/spring-mvc-parent

优秀的个人博客,低调大师

Java编程基础阶段笔记 day06 二维数组

​ 二维数组 笔记Notes 二维数组 二维数组声明 二维数组静态初始化与二位初始化 二维数组元素赋值与获取 二维数组遍历 二维数组内存解析 打印杨辉三角 Arrays工具类 数组中常见的异常 二维数组 二维数组的元素是一维数组 二维数组的声明和初始化 String [][] persons; String persons2[][]; String [] persons3[]; 二维数组的初始化 //静态初始化 persons = new String[][]{{"小龙哥","110"},{"小仓","119"},{"小强","120"}}; //声明和初始化不能分开 int[][] numbers = {{1,2},{3,4},{5,6}}; //动态初始化 persons2 = new String3; //3值得是二维数组长度,2指的是二维数组元素(一维数组)的长度 //创建一个长度为3的二维数组,二维数组的元素为null persons3 = new String[3][]; persons3[0] = new String[2]; persons3[1] = new String[3]; 获取二维数组的值,元素的值 String aString = persons3[2][2]; int a = persons3.length; int b = persons3[0].length; 遍历二维数组的元素 //遍历二维数组 for (int i = 0; i < numbers.length; i++) { for (int j = 0; j < numbers[i].length; j++) { System.out.print(numbers[i][j] + " "); } System.out.println(); } 二维数组内存解析 打印杨辉三角 使用二维数组打印一个 10 行杨辉三角。 【提示】 第一行有 1 个元素, 第 n 行有 n 个元素 每一行的第一个元素和最后一个元素都是 1 从第三行开始, 对于非第一个元素和最后一个元素的元素。即: yanghuii = yanghuii-1 + yanghuii-1; public class YangHui { public static void main(String[] args) { //创建二维数组 int[][] numbers = new int[10][]; //给二维数组的元素赋值 for (int i = 0; i < numbers.length; i++) { //创建二维数组的元素(一维数组) numbers[i] = new int[i + 1]; //给二维数组中的元素的第一个元素和最后一个元素赋值 numbers[i][0] = numbers[i][i] = 1; //遍历二维数组中的元素(一维数组),不包括第一个和最后一个 for (int j = 1; j < numbers[i].length - 1; j++) { numbers[i][j] = numbers[i - 1][j] + numbers[i - 1][j - 1]; } } //遍历二维数组 for (int i = 0; i < numbers.length; i++) { for (int j = 0; j < numbers[i].length; j++) { System.out.print(numbers[i][j] + " "); } System.out.println(); } } } Arrays工具类使用 int[] ns = {5,2,30,4,1,90}; int[] ns2 = {5,2,3,4,1}; //比较两个数组是否相等 : 比较的是内容,个数,顺序 boolean equals = Arrays.equals(ns, ns2); System.out.println(equals); //输出数组信息 String nsStr = Arrays.toString(ns); System.out.println(nsStr); //将指定的数值填充到数组中 Arrays.fill(ns, 100); System.out.println(Arrays.toString(ns)); //对数组中的内容进行排序 Arrays.sort(ns); System.out.println(Arrays.toString(ns)); //二分法查找 - 使用前必须先排序 - 如果找不到会返回负数 int index = Arrays.binarySearch(ns, 4); System.out.println(index); 数组中常见的异常 //1.数组下角标越界 :ArrayIndexOutofBoundsException int[] numbers = new int[2]; //索引值合理范围 :0 ~ 长度-1 System.out.println(numbers[2]); //发生了异常 System.out.println(numbers[-1]); //发生了异常 //2.空指针异常 :: NullPointerException String str = "aaa"; str = null; System.out.println(str.toUpperCase());//发生了异常 String[] names = new String[2]; System.out.println(names[0].toUpperCase());//发生了异常 String[][] persons = new String[3][]; System.out.println(persons[0][0]); //发生了异常 System.out.println(persons[0].length); //发生了异常 习题:数组声明 声明:int[] x,y[]; 在给x,y变量赋值以后,以下选项允许通过编译的是: a ) x[0] = y; //类型不符,x[0]为int类型,而y为引用类型 b) y[0] = x; //可以 c) y0 = x; //类型不否,x为引用类型,而y0为int类型 d) x0 = y; //x为一维数组 e) y0 = x[0]; //可以 f) x = y; //类型不符,一个是一维数组,一个是二维数组 提示: 一维数组:int[] x 或者int x[] 二维数组:int[][] y 或者 int[] y[] 或者 int y[][] 总结Summary 二维数组遍历二维数组内存解析杨辉三角Arrays工具类数组常见异常

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册