1. SpringMVC概述
1.1. 什么是Spring MVC
SpringMVC是Spring框架内置的MVC的实现.
SpringMVC就是一个Spring内置的MVC框架.
MVC框架,它解决WEB开发中常见的问题(参数接收、文件上传、表单验证、国际化、等等),而且使用简单,与Spring无缝集成。
支持 RESTful风格的 URL 请求 。
采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。
1.2. SpringMVC的作用
MVC模式:(Model-View-Controller):为了解决页面代码和后台代码的分离.
2. SpringMVC底层实现
在没有使用SpringMVC之前我们都是使用的Servlet在做Web开发。
但是使用Servlet开发在接受请求数据参数,数据共享,页面跳转等操作相对比较复杂。
SpringMVC底层就是的Servlet,SpringMVC就是对Servlet进行更深层次的封装
2.1. 回顾MVC模式
回顾什么是mvc模式
模型model(javabean), 视图view(jsp/img) 控制器Controller(Action/servlet) C存在的目的.就是为了保证M和V的一致性
当M发生改变时,C可以把M中的新内容更新到V中.
2.1.1. 原始MVC 模式
MVC模式最早开始是在CS 架构上面 20世纪70+年代
下面为原始的mvc模式.
目前web应用中,99%的项目都会使用mvc模式开发.
2.1.2. WEB开发的MVC
WEB开发从20世纪90+年代开始,也是使用MVC模式。在最原始的MVC上有一些改进
优秀的框架改变了这种模式,将model更广泛的使用,这样会比原始的mvc好多了.
像现在一些优秀的mvc的框架,如Struts2,springMVC
在客户端提交也使用了模型来请求参数
spring MVC 也实现的相关的功能
3. 入门案例 -xml 配置
3.1. 准备工作
创建动态Web项目
3.2. 步骤
3.3. 准备jar包
3.4. SpringMVC开发相关jar包
spring-web-4.3.3.RELEASE.jar spring 对web项目的支持。
spring-webmvc-4.3.2RELEASE.jar spring mvc核心包。
3.5. 编写Controller控制器(与以前servlet类似)
public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
mv.addObject("username", "师姐");
mv.setViewName("/WEB-INF/hello/hello.jsp");
return mv;
}
}
3.6. 在springmvc.xml配置 Controller
<!--
name : 给当前控制器取的一个名字,相当于Servlet中的资源名称,以便浏览器访问,必须以斜杠/开头
建议使用 name属性,不要使用id,因为早期版本 id 不支持特殊字符 如 /斜杠
-->
<bean name="/hello" class="cn.zj.springmvc.HelloController"/>
3.7. 配置spring mvc核心(前端)控制器,并且初始化spring容器。 web.xml配置.
<!-- 配置前端控制器 :所有的请求都会经过此控制器,让后通过此控制器分发到各个控制器(总控)
总控其实就是Servlet,SpringMVC底层就是使用Servlet编写的
-->
<servlet>
<servlet-name>springMVC</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>
<!-- 初始化容器 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
3.8. 启动项目
3.9. 访问项目
4. SpringMVC的全注解开发
4.1. Spring中IOC 注解
4.2. SpringMVC使用注解步骤
4.2.1. Spring mvc 采用注解方式(需要导入aop的包)
4.2.2. 通过注解方式注册控制器,配置需要扫描的根目录
<context:component-scan base-package="cn.zj.springmvc"/>
4.2.3. 支持所有mvc注解支持。支持json
<mvc:annotation-driven/>
4.2.4. 在核心类上添加@Controller 注解
4.2.5. 在方法上添加@RequestMapping("/hello")注解
4.3. 案例代码
@Controller
public class AnnotationController {
//@RequestMapping(value= {"/method1","/method2"})
@RequestMapping("method1")
public ModelAndView mehtod1() {
ModelAndView mv = new ModelAndView();
mv.addObject("username", "乔峰");
mv.setViewName("/WEB-INF/anno/index.jsp");
return mv;
}
}
5. SpringMVC执行流程和原理
SpringMVC流程:
01、用户发送出请求到前端控制器DispatcherServlet。
02、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。
03、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。
04、DispatcherServlet调用HandlerAdapter(处理器适配器)。
05、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。
06、Controller执行完成返回ModelAndView对象。
07、Hand