1.Spring MVC概述
1.1 企业级应用基本框架
企业级引用中的软件的分层的基本架构(参考阿里里巴巴开发手册)
说明:分层架构的本质是分而治之,已达到分解问题复杂性的目的,从而更好的进行设计与实现。
1.2 Web MVC架构及分析
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
基于servlet,jsp,javabean技术实现的MVC架构,具体架构图如下:
1.3 Spring MVC 架构及分析
Spring MVC是MVC架构模式的一种完美实现,它简化了Java WEB 中基于MVC架构的编程过程,是Spring中的WEB应用模块。
Spring MVC 底层核心架构图及工作流程。
Spring MVC 中的核心组件:
- DispatcherServlet (前端控制器, 处理请求的入口)
- HandlerMapping (映射器对象, 用于管理url与对应controller的映射关系)
- Interceptors(拦截器,实现请求响应的共性处理)
- Controller (后端控制器, 负责处理请求的控制逻辑)
- ViewResolver(视图解析器,解析对应的视图关系:前缀+view+后缀)
备注:假如希望了解Spring MVC的详细处理流程可以基于断点调试法进行跟踪。
2.2 Spring MVC 编程基础
2.1Spring MVC 编程基本步骤
Step01:创建maven web 项目并解决项目中的错误问题
Step02:添加Spring MVC项目核心依赖
Step03:配置Spring MVC项目核心组件
Step04:创建Spring MVC 后端控制器及页面
Step05:部署及测试spring mvc 项目应用。
-
2.1Spring MVC 编程基础实现(重点)
Step01:创建maven web项目
项目名 CGB-SPRING-MVC-01
Web项目打包方式为war方式
Step02:配置maven web项目
生成web.xml(项目视图)
Web项目的target runtimes为tomcat
Web 项目的编译版本为JDK1.8
添加Spring MVC项目依赖
在项目的resources的目录中添加核心配置文件(例如spring-configs.xml)并进行基本配置
<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-4.3.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd" >
<!--配置组件扫描 -->
<context:component-scan base-package="com.jt"/>
<!—启用MVC默认配置 (@RequestMapping) -->
<mvc:annotation-driven/>
<!-- 配置视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
2.2.3 配置Spring MVC前端控制器
打开web.xml,配置DispatcherServlet对象
<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-configs.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
前端控制器是spring mvc处理请求的入口,是springmvc的核心,这个控制器一般需要在服务器启动时即初始化。
其中
- load-on-startup 表示启动时则加载此servlet,数字越小优先级越高.
- init-param 中的参数名不能变(此名字在DispatcherServlet父类中定义)
2.2.4 创建并配置Spring MVC后端控制器
编写Spring MVC后端控制器
@Controller
@RequestMapping("/")
public class HelloController{
@RequestMapping("doSayHello")
public ModelAndView doSayHello() {
ModelAndView mv=new ModelAndView("hello");
mv.addObject("message", "helloworld");
return mv;
}
}
其中:
1)通过@RequestMapping注解定义url到controller具体方法的映射,这个映射信息会被存储,一般是存储到一个HandlerMapping对象中.
2)ModelAndView对象为一个模型与视图对象,内置一个map对象,主要用于封装业务数据和视图名。
3)ModelAndView构造方法中传递的为视图名,addObject方法可以以key/value形式存储数据。
4)ModelAndView 对象返回时会被spring mvc自动存储到请求作用域,在对应的视图页面可以直接从此作用域获取对应的值。
2.2.5 创建JSP页面对象
在项目的WEB-INF/pages文件夹下创建hello.jsp文件,然后设置其内容,例如:
<body>
<h1>${message}</h1>
</body>
…
说明:WEB-INF目录下的资源不能允许通过浏览器地址栏直接访问。
2.2.6 部署并运行项目以及请求响应流程分析
将项目部署到tomcat,然后启动运行,在地址栏输入具体url访问对应controller对象。
Tomcat 启动及对象加载流程分析:
项目的请求处理流程结构及过程解析:
Step01:客户端向服务服务端发请求
Step02:服务端对请求信息进行过滤(Filter)
Step03:请求到达前端控制DispatcherServlet
Step04:前端控制器基于url在HandlerMapping中的映射找请求执行链
Step05:执行执行链中的拦截器(Interceptor)方法
Step06:执行执行链中的控制器(Controller)方法
Step07:对象控制层返回的视图进行解析
Step08:向客户端返回一个响应结果。