ApplicationContext应用上下文获取方式

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

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

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

Spring提供了一个监听器ContextLoaderListener就是对上述功能的封装,该监听器内 部加载Spring配置文件,创建应用上下文对象,并存储到ServletContext域中,提供了一个客户端工具 WebApplicationContextUtils供使用者获得应用上下文对象。
所以我们需要做的只有两件事:
①在web.xml中配置ContextLoaderListener监听器(导入spring-web坐标)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
</web-app>

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

SpringMVC开发步骤

①导入SpringMVC相关坐标

        <!--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>

②配置SpringMVC核心控制器DispathcerServlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">
<!--    <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>--><servlet><servlet-name>dispatcher</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>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

③创建Controller类和视图页面
④使用注解配置Controller类中业务方法的映射地址


@Controller("controller")
public class QuickController {public QuickController() {System.out.println("aa");}@RequestMapping("/qq")public  String method(){System.out.println("controller");return "success.jsp";}
}

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

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
"><context:component-scan base-package="com.controller" /><mvc:annotation-driven />
</beans>

⑥客户端发起请求测试

SpringMVC的执行流程


①用户发送请求至前端控制器DispatcherServlet。 ②DispatcherServlet收到请求调用HandlerMapping处理器映射器。
③处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则 生成)一并返回给DispatcherServlet。
④DispatcherServlet调用HandlerAdapter处理器适配器。
⑤HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
⑥Controller执行完成返回ModelAndView。
⑦HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
⑧DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
⑨ViewReslover解析后返回具体View。
⑩DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户

SpringMVC组件解析

  1. 前端控制器:DispatcherServlet
    用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。
  2. 处理器映射器:HandlerMapping
    HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
  3. 处理器适配器:HandlerAdapter
    通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
  4. 处理器:Handler
    它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由 Handler 对具体的用户请求进行处理。
  5. 视图解析器:View Resolver View Resolver
    负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即具体 的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。
  6. 视图: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不能是10

@Controller("controller")
public class QuickController {public QuickController() {System.out.println("aa");}@RequestMapping(value = {"/qq"},method = {RequestMethod.GET},params = {"name"})public  String method(){System.out.println("controller");return "success.jsp";}
}

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. 视图解析器

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

<!--配置内部资源视图解析器-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
"><context:component-scan base-package="com.controller" /><mvc:annotation-driven /><bean id="view" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="suffix" value=".jsp"/><property name="prefix" value="/WEB-INF/"/></bean>
</beans>

spring— Spring与Web环境集成相关推荐

  1. Spring与Web环境集成

    1. Spring与Web环境集成 1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(sprin ...

  2. Spring与其他Web框架集成

    Spring与多种流行Web应用框架(Struts.JSF和DWR)集成的方法. Spring强大的IoC容器和企业支持特性使其十分适于实现Java EE应用的服务和持续层. 对于表现层,可以在许多不 ...

  3. spring事务在web环境中失效的问题

    今天温习一下spring事务的时候,出现了一种诡异的现象,在java环境中测试事务是可以的.然后到web下测试事务就没用了. spring.xml配置 spring-mvc.xml配置 后来百度发现是 ...

  4. springmvc-01集成web环境及原理 ----喝最烈的酒.

    1. Spring与Web环境集成 1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(sprin ...

  5. java 百度副文本_spring boot 、springMVC环境集成百度ueditor富文本编辑器

    spring-boot-mvc-ueditor-qiniu spring boot .springMVC环境集成百度ueditor富文本编辑器,使用七牛云存储图片 依赖库版本: spring boot ...

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

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

  7. Spring 集成web环境

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

  8. Spring快速集成Web环境

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

  9. Spring -- 集成web环境

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

最新文章

  1. vue.js学习系列-第二篇
  2. WINCE6.0+S3C2443的启动过程---eboot4
  3. c++11 多线程传参和生产者消费者实现
  4. git删除本地分支、删除远程分支 复制分支
  5. 问题分享:最近测试VDI-in-a-Box使用AD做身份验证出现以下错误提示:
  6. c#多通道波形显示_因为每秒要采集50多个波形,需要大量的数据分析和波形分析,有什么好的解决办法吗?...
  7. 为什么MES系统要定制化?看这三家汽车供应商的苦恼
  8. 云计算的核心技术,主要有哪些?
  9. 如何用C++制作游戏开发概述
  10. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.25
  11. 【万字详解】cJSON解析
  12. svn —— 版本回退
  13. 商业分析师的要求与必备技能
  14. vue结合Waterfall做图片瀑布流展示
  15. 焊接机器人比传统手工焊接有哪些优势
  16. 美国国家安全局(NSA)“酸狐狸”漏洞攻击武器平台技术分析报告
  17. IT男最新躺枪:武汉恋爱培训班教搭讪女孩技巧 学员多为IT男
  18. Excel的VBA使用
  19. ESP8266 MP3制作——esp8266联网
  20. 计算机毕业设计springboot+uniapp点餐外卖系统源码

热门文章

  1. Java高级开发面试,java字符串拼接的方法
  2. php数据接口api安全,API接口数据安全之授权码sign
  3. 【Vue.js学习】生命周期及数据绑定
  4. 《七步掌握业务分析》读书笔记六
  5. 「CodePlus 2017 12 月赛」火锅盛宴
  6. linux install StarDict
  7. 加载指定路径下所有文件
  8. C# mysql 插入数据,中文乱码
  9. [css3]:nth-child与:nth-of-type的区别
  10. SharePoint视图过滤中People字段的局限