1. Spring与Web环境集成

1.1 ApplicationContext应用上下文获取方式

应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的,但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(spring配置文件) ,这样的弊端是配置文件加载多次,应用上下文对象创建多次。

在Web项目中,可以使用ServletContextListener监听Web应用的启动,我们可以在Web应用启动时,就加载Spring的配置文件,创建应用上下文对象ApplicationContext,在将其存储到最大的域servletContext域中,这样就可以在任意位置从域中获得应用上下文ApplicationContext对象了。

1.2 Spring提供获取应用上下文的工具

上面的分析不用手动实现,Spring提供了一个监听器ContextLoaderListener就是对上述功能的封装,该监听器内部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext域中,提供了一个客户端工具WebApplicationContextUtils供使用者获得应用上下文对象。

所以我们需要做的只有两件事:

①在web.xml中配置ContextLoaderListener监听器(导入spring-web坐标)

②使用WebApplicationContextUtils获得应用上下文对象ApplicationContext

1.3 导入Spring集成web的坐标

<dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.0.5.RELEASE</version>
</dependency>

1.4 配置ContextLoaderListener监听器

<!--全局参数-->
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--Spring的监听器-->
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

1.5 通过工具获得应用上下文对象

ApplicationContext applicationContext =    WebApplicationContextUtils.getWebApplicationContext(servletContext);Object obj = applicationContext.getBean("id");

知识要点

Spring集成web环境步骤

​ ①配置ContextLoaderListener监听器

​ ②使用WebApplicationContextUtils获得应用上下文

2. SpringMVC的简介

2.1 SpringMVC概述

SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中。

SpringMVC 已经成为目前最主流的MVC框架之一,并且随着Spring3.0 的发布,全面超越 Struts2,成为最优秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时它还支持 RESTful 编程风格的请求。

2.3 SpringMVC快速入门

需求:客户端发起请求,服务器端接收请求,执行逻辑并进行视图跳转。

开发步骤

①导入SpringMVC相关坐标

②配置SpringMVC核心控制器DispathcerServlet

③创建Controller类和视图页面

④使用注解配置Controller类中业务方法的映射地址

⑤配置SpringMVC核心文件 spring-mvc.xml

⑥客户端发起请求测试

代码实现

①导入Spring和SpringMVC的坐标、导入Servlet和Jsp的坐标

 <!--Spring坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.5.RELEASE</version></dependency><!--SpringMVC坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.0.5.RELEASE</version></dependency>
<!--Servlet坐标-->
<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version>
</dependency>
<!--Jsp坐标-->
<dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.0</version>
</dependency>

②在web.xml配置SpringMVC的核心控制器

<servlet><servlet-name>DispatcherServlet</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>DispatcherServlet</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

③创建Controller和业务方法

public class QuickController {public String quickMethod(){System.out.println("quickMethod running.....");return "index";}
}

③创建视图页面index.jsp

<html>
<body><h2>Hello SpringMVC!</h2>
</body>
</html>

④配置注解

@Controller
public class QuickController {@RequestMapping("/quick")public String quickMethod(){System.out.println("quickMethod running.....");return "index";}
}

⑤创建spring-mvc.xml

<beans xmlns="http://www.springframework.org/schema/beans"  xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc   http://www.springframework.org/schema/mvc/spring-mvc.xsd  http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context.xsd"><!--配置注解扫描--><context:component-scan base-package="com.itheima"/>
</beans>

⑥访问测试地址

http://localhost:8080/itheima_springmvc1/quick

控制台打印

页面显示

2.3 SpringMVC流程图示

2.4 知识要点

SpringMVC的开发步骤

①导入SpringMVC相关坐标

②配置SpringMVC核心控制器DispathcerServlet

③创建Controller类和视图页面

④使用注解配置Controller类中业务方法的映射地址

⑤配置SpringMVC核心文件 spring-mvc.xml

⑥客户端发起请求测试

3. SpringMVC的组件解析

3.1 SpringMVC的执行流程

①用户发送请求至前端控制器DispatcherServlet。

②DispatcherServlet收到请求调用HandlerMapping处理器映射器。

③处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

④DispatcherServlet调用HandlerAdapter处理器适配器。

⑤HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。

⑥Controller执行完成返回ModelAndView。

⑦HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。

⑧DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

⑨ViewReslover解析后返回具体View。

⑩DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户。

3.2 SpringMVC组件解析

  1. 前端控制器:DispatcherServlet

​ 用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由

它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。

  1. 处理器映射器:HandlerMapping

​ HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的

映射方式,例如:配置文件方式,实现接口方式,注解方式等。

  1. 处理器适配器:HandlerAdapter

​ 通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理

器进行执行。

  1. 处理器:Handler

​ 它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由

Handler 对具体的用户请求进行处理。

  1. 视图解析器:View Resolver

​ View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。

  1. 视图:View

​ SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面

3.3 SpringMVC注解解析

@RequestMapping

作用:用于建立请求 URL 和处理请求方法之间的对应关系

位置:

​ 类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录

​ 方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径

属性:

​ value:用于指定请求的URL。它和path属性的作用是一样的

​ method:用于指定请求的方式

​ params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样

例如:

​ params = {“accountName”},表示请求参数必须有accountName

​ params = {“moeny!100”},表示请求参数中money不能是100

1.mvc命名空间引入

命名空间:xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"
约束地址:http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

组件扫描

SpringMVC基于Spring容器,所以在进行SpringMVC操作时,需要将Controller存储到Spring容器中,如果使用@Controller注解标注的话,就需要使用<context:component-scan base-package=“com.itheima.controller"/>进行组件扫描。

3.4 SpringMVC的XML配置解析

SpringMVC有默认组件配置,默认组件都是DispatcherServlet.properties配置文件中配置的,该配置文件地址org/springframework/web/servlet/DispatcherServlet.properties,该文件中配置了默认的视图解析器,如下:

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

翻看该解析器源码,可以看到该解析器的默认设置,如下:

REDIRECT_URL_PREFIX = "redirect:"  --重定向前缀
FORWARD_URL_PREFIX = "forward:"    --转发前缀(默认值)
prefix = "";     --视图名称前缀
suffix = "";     --视图名称后缀
  1. 视图解析器

我们可以通过属性注入的方式修改视图的的前后缀

<!--配置内部资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property>
</bean>

3.5 知识要点

SpringMVC的相关组件

前端控制器:DispatcherServlet

处理器映射器:HandlerMapping

处理器适配器:HandlerAdapter

处理器:Handler

视图解析器:View Resolver

视图:View

SpringMVC的注解和配置

请求映射注解:@RequestMapping

视图解析器配置:

REDIRECT_URL_PREFIX = “redirect:”

FORWARD_URL_PREFIX = “forward:”

prefix = “”;

suffix = “”;

springmvc-01集成web环境及原理 ----喝最烈的酒.相关推荐

  1. Spring集成web环境(使用封装好的工具)

    接上文spring集成web环境(手动实现) ##########代码接上文############# spring提供了一个监听器ContextLoaderListener对上述功能的封装,该监听器 ...

  2. Spring 集成web环境

    Spring 集成web环境 一.配置ContextLoaderListener 监听器 1.maven坐标 org.springframework spring-web 5.3.14 2.web.x ...

  3. Spring快速集成Web环境

    Spring快速集成Web环境 这篇内容比较简单,话不多说,直接上代码 学习内容 1.新建一个Maven Module,并为其添加Web结构,在pom.XML中导入servlet坐标 pom.XML中 ...

  4. Spring -- 集成web环境

    文章目录 1. 集成web环境 1.1 ApplicationContext应用 上下文获取方式 1.1.1 创建监听器 1.1.2 配置监听器 1.1.3 重新get请求 更换获取Spring上下文 ...

  5. OSChina 周二乱弹 —— 喝最烈的酒 坐最贵的救护车

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2018)请戳(这里) [今日歌曲] @小小编辑:分享mol-74的单曲<呼吸> <呼吸&g ...

  6. Spring集成web环境(手动实现)

    1.创建UserDao接口及其实现类UserDaoImpl(接口代码省略) public class UserDaoImpl implements UserDao {@Overridepublic v ...

  7. Spring集成web环境步骤

    ①配置ContextLoaderListener监听器 ②使用WebApplicationContextUtils获得应用上下文

  8. JAVA日记之SpringIoCDI详解,注意是详解! ----喝最烈的酒.

    1. spring概述 1.1 Spring是什么(理解) Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转 ...

  9. 喝最烈的酒、挖最大的DONG——工具与技巧篇

    本文作者:i春秋签约作家--黑色镰刀 0×00 前言 在这个科技发达的时代,很多时候工具都可以代替人做很多事情,之前我就有谈起过有企业将人工智能运用于网络安全方面,像如今,也有更多更人性化更智能的工具 ...

最新文章

  1. 怎样定义最小 可遗传神经网络
  2. web前端java script学习2017.7.11
  3. 关于条件运算符 ?:的小程序
  4. 【译】Withdrawal symptoms
  5. 大数据查询——HBase读写设计与实践--转
  6. flask-mail异步发送邮件_.NET Core使用FluentEmail发送邮件
  7. 九十三、Python使用百度云接口API实现截图,文字识别和语音合成
  8. 服务降级-多版本支持
  9. 【MM系列】SAP 关于更改物料的价格控制类型
  10. Linux的LAMP
  11. 【Shell】特殊变量
  12. tensorflow.python.framework.tensor_shape.is_fully_defined()
  13. 如何求递归算法的时间复杂度
  14. 面试题之GC是什么?为什么要有GC?
  15. mysql fixed数据类型_MySQL数据类型有哪些?MySQL数据类型详解
  16. 乐观锁实现接口幂等性_calvin-idempotent
  17. Svelte入门——Web Components实现跨框架组件复用(二)
  18. tablueau地图标记圆形_高德/百度地图画圆标记
  19. 金融数量分析2:Markowitz均值方差模型
  20. 10年后重温《我奋斗了18年才和你坐在一起喝咖啡》

热门文章

  1. Word中的图片设置嵌入式之后显示不全问题
  2. Neural network state estimation for full quantum state tomography笔记
  3. 【Tomcat简介】
  4. Android Studio 下安卓 jni 开发错误 undefined reference to AndroidBitmap_getInfo
  5. 电视+私人影院+KTV+游戏厅,爽!
  6. 【js调用后端接口】
  7. 7628刷breed_自制各类路由原厂直刷Breed的文件,无需修改mac无需重刷无线
  8. 嵌入式linux并行通信,嵌入式Linux
  9. 绘画教程:女生伤心眼泪、哭泣表情的画法技巧
  10. java-php-net-python-书籍租阅管理系统计算机毕业设计程序