1.SpringMVC概述:
(1) SpringMVC概述:
① Spring 为展现层提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的 MVC 框架之一。
② Spring3.0 后全面超越 Struts2,成为最优秀的 MVC 框架。
③ Spring MVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。
④ 支持 REST 风格的 URL 请求。
⑤ 采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
(2) 是什么
① 一种轻量级的、基于MVC的Web层应用框架,偏前端而不是基于业务逻辑层。
② 是Spring框架的一个后续产品。
(3) 能干什么
① 天生与Spring框架集成。
② 支持Restful风格
③ 进行更简洁的Web层开发
④支持灵活的URL到页面控制器的映射
⑤非常容易与其他视图技术集成,如:Velocity、FreeMarker等等。
⑥ 因为模型数据不存放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用)
⑦ 非常灵活的数据验证、格式化和数据绑定机制、能使用任何对象进行数据绑定,不必实现特定框架的API
⑧ 更加简单、强大的异常处理
⑨ 对静态资源的支持
⑩ 支持灵活的本地化、主题等解析
2.SpringMVC的HelloWorld:
(1) 导入jar包
commons-logging-1.1.3.jar
spring-aop-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar
spring-webmvc-4.0.0.RELEASE.jar
(2) 在web.xml中配置SpringMVC的核心Servlet
<!-- 配置SpringMVC的核心 Servlet -->
<servlet>
<servlet-name >springDispatcherServlet </servlet-name>
<servlet-class >org.springframework.web.servlet.DispatcherServlet </servlet-class>
<!-- 配置SpringMVC自身配置文件的位置 -->
<init-param >
<param-name> contextConfigLocation</param-name >
<param-value> classpath:springmvc.xml</param-value >
</init-param >
<!-- Servlet默认的生命周期中创建 Servlet对象是在“第一次接收到请求时” -->
<!-- 通过设置load-on-startup标签的值可以让 Servlet在Web应用启动时创建对象并初始化。 -->
<!-- 数值越小,越先创建。 -->
<load-on-startup >1 </load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name >springDispatcherServlet </servlet-name>
<!-- 配置url-pattern时,不能使用“/*”,只能用“/” -->
<!-- 这不是Servlet标准的要求。而是SpringMVC为了全面支持REST风格而做的要求。 -->
<url-pattern >/</url-pattern>
</servlet-mapping>
(3) 配置Springmvc.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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 设置扫描的包 -->
<context:component-scan base-package="com.atguigu.spring"/>
<!-- 配置映射解析器:将控制器返回的结果字符串,转换为一个物理的视图文件-->
<bean id="internalResourceViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--在springMVC-servlet.xml中配置mvc:default-servlet-handler 后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理-->
<mvc:default-servlet-handler />
<!-- 配置 <mvc:default-servlet-handler/>解决静态资源访问问题,但是,原来的映射路径都找不到了,这个配置就是解决这个问题的-->
<mvc:annotation-driven />
</beans>
(4) 创建index.jsp
< a href ="${pageContext.request.contextPath }/testHelloWorld" >Hello World</ a>
(5) 创建(3)中请求的目标页面
/WEB-INF/views/success.jsp
(6) 创建一个处理(3)中请求的处理器类,在handler类中创建具体处理请求的方法——handler方法
(2)架构流程
@Controller
public class HelloWolrdHandler {
@RequestMapping(value="/testHelloWorld")
public String helloWorld() {
System.out.println( "Hello World...");
return "success";
}
}
3.Springmvc架构
(1) 框架结构
(2)架构流程
① 用户发送请求至前端控制器DispatcherServlet
②
DispatcherServlet收到请求调用HandlerMapping处理器映射器。
③
处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
④
DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
⑤
执行处理器(Controller,也叫后端控制器)。
⑥
Controller执行完成返回ModelAndView
⑦
HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
⑧
DispatcherServlet将ModelAndView传给ViewReslover视图解析器
⑨ ViewReslover解析后返回具体View
⑩
DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
⑪
DispatcherServlet响应用户
(3)
组件说明
以下组件通常使用框架提供实现:
- DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
- HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求url找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
- Handler:处理器
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
- HandlAdapter:处理器适配器
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
下图是许多不同的适配器,最终都可以使用usb接口连接
- ViewResolver:视图解析器
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
- View:视图
springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
说明:在
springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。
需要用户开发的组件有handler、view.