- MVC是模型(model=dao+service)、视图(view=jsp…)、控制器(controller=Servlet)的简写,是一种软件设计规范
- MVC主要作用是降低了视图和业务逻辑间的双向耦合
- MVC不是一种设计模式,而是一种架构模式,不同的MVC存在差异
最典型的MVC就是JSP+Servlet+javabean的模式
职责分析:
- Controller:控制器
- 取得表单数据
- 调用业务逻辑
- 指向转发的页面(请求转发和重定向)
- Model:模型
- 业务逻辑
- 保存数据的状态
- View:视图
- 显示页面
- 导入依赖
- 建一个子模块:SpringMVC-01-servlet
- 写一个servlet类
- 写一个测试页面
- 在web.xml中配置servlet
- 配置tomcat,并测试

MVC框架要做哪些事情
- 将url映射到java类或java类的方法
- 封装用户提交的数据
- 处理请求——调用相关的业务处理——封装响应数据
- 用jsp或HTML将响应的数据进行渲染
本质就是MVC三层架构,Spring将其整合了
Spring MVC是Spring Framework的一部分,是基于java实现MVC的轻量级Web框架
官方文档:https://docs.spring.io/spring/docs/4.3.24.RELEASE/spring-framework-reference/
Spring MVC的特点:
- 轻量
- 高效,基于请求响应的MVC框架
- 与Spring兼容性好,无缝结合
- 约定大于配置
Spring的Web框架围绕DispatcherServlet设计,DispatcherServlet的作用是将请求分发到不同的处理器。
Spring MVC和许多其他框架一样,以请求为驱动,围绕一个中心Servlet分派请求及提供其他功能,DispatcherServlet是一个实际的Servlet(继承HttpServlet基类)

Spring MVC官方原理图:
用户请求被前置控制器拦截,根据请求参数生成代理请求,找到实际的控制器,处理请求,创建数据模型,访问数据库,将模型响应给前端控制器,控制器使用模型与视图渲染结果,在将结果返回给用户

- 配置web.xml,注册DispatcherServlet
- 配置springmvc-servlet.xml
添加处理器映射器:
添加处理器适配器:
添加视图解析器:
- 编写操作业务Controller,要么实现Controller接口,要么使用注释;需要返回一个ModelAndView,用来封装数据,封装视图
- 将自己的类交给SpringIOC容器,注册bean
- 编写jsp,用来显示ModelAndView存放的数据以及正常页面
- 启动tomcat测试
错误tips:404
- 查看控制台输出,看一下是不是缺少jar包
- 如果jar存在,显示无法输出,就在IDEA项目发布中,添加lib依赖

- DispacherServlet过滤用户请求,判断哪些请求可以访问Servlet,哪些不能,就是url-pattern的作用,并且会加载springmvc-servlet.xml
- DispacherServlet将请求转发到处理器映射器,通过HanderMapping完成url到controller的映射。例如:在上面Hello,Spring MVC中,我们使用的是BeanNameUrlHandlerMapping,它可以将url与bean的id相对应,然后映射到bean的class,即controller
- 通过HanderMapping的url与handler的映射关系,找到处理器并返回,在这个过程中会经过很多过滤器
- DispacherServlet拿到handler之后,找到HandlerAdapter来访问、执行处理器
- 执行处理器,一般可以通过实现Controller接口或者注解实现(需要自己实现),调用业务层得到模型数据,用ModelAndView封装模型数据和视图
- 返回一个ModelAndView对象
- 返回一个ModelAndView对象给DispacherServlet
- DispacherServlet拿到ModelAndView对象后,请求视图解析器,在视图解析器中会完成完整视图名的拼接和查找视图,形成视图对象
- 返回视图对象给DispacherServlet
- 视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的
- 将最终的视图响应给客户
步骤:
- 配置web.xml,与前面讲的一样
- 编写springmvc-servlet.xml
- 编写Controller类
- 编写jsp
注解解析:
- @Controller是为Q了让Spring IOC容器初始化时自动扫描到,它代表这个类会被Spring接管这个类的所有方法,如果返回值是String,并且有具体的页面,那么就会被视图解析器解析
- @RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
- 方法中声明Model类型的参数是为了把业务层的数据带到视图中
- 方法返回的hello,会被视图解析器拼接成完整的页面跳转路径
- 控制器提供访问webapp的行为,通常可以由实现接口和注解定义来实现
- 控制器负责解析用户的请求并将其转化为一个模型
- 在Spring MVC中一个控制器类可以包含多个方法,一个方法就是一个请求
流程与一致
- @Controller注解类型用于声明Spring类的实例是一个控制器(在讲Spring IOC还提到了另外三个注解)
- 步骤与一致
- 概念
RestFul就是一个资源定位和资源操作的风格,不是标准也不是协议,只是一种风格。基于此风格设计的软件可以更加简洁和安全。 - 使用RestFul操作资源:可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能可以不同
- http://127.0.0.1/item/1 查询,GET
- http://127.0.0.1/item/1 新增,POST
- http://127.0.0.1/item/1 更新,PUT
- http://127.0.0.1/item/1 删除,DELETE
- 测试:
@PathVariable,该注解让方法的参数的值对应绑定到一个URL模板变量上

将method换为GET,则正常:

也可以通过Mapping来约束请求:
总结一下什么是RestFul架构:
(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。
(4)通过不同的请求方法,可以让同一个url拥有不同的实现!
前面我们通过配置视图解析器来完成重定向或者转发,下面无需视图解析器来操作!
步骤:
- 注释掉springmvc-servlet.xml中的视图解析器
- 测试
在有视图解析器的时候,也可以用上述加前缀的方式来实现重定向和转发。
注意:redirect的路径一定不能在WEB-INF路径下,因为redirect是相当于用户直接访问了路径,而用户不能访问WEB-INF目录下的文件,只有程序内部转发的时候才能转发到WEB-INF下的JSP。
- 提交的域名称和处理方法的参数名一致
- 提交的数据:http://localhost:8080/user/t1?name=java
- 映射的方法
- 提交的域名称和处理方法的参数名不一致
- 提交的数据:http://localhost:8080/user/t2?username=java
- 映射的方法
- 当传入的变量是一个对象时
- 提交的数据:http://localhost:8080/user/t3?name=java&id=1&age=13
- 映射的方法:
其中,User类:
如果实体的字段名与传入的变量名不一致,就无法将值传入对象
- 使用Model类返回数据(大部分情况使用Model)
- 使用ModelMap返回数据
在Spring MVC准备了处理编码问题的过滤器 ,需要在web.xml中配置
前后端分离的时代,通过json来传递数据!
- Jackson应该是目前比较好的json解析工具
- 我们在这里使用Jackson
步骤:
- 导入Jackson的依赖
- 配置springmvc-servlet.xml,解决json的乱码问题
- 测试
只在当前页面返回数据的注解:
@Controller + @ResponseBody
@RestController 表示该接口类都不走视图解析器,只能返回数据,在前后端分离的时代比@Controller好用
一般的,我们可以将上述调用Jackson API的过程封装成工具类:
SpringMVC的处理器拦截器类似Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。
过滤器与拦截器的区别:拦截器是AOP思想的具体应用
过滤器
- servlet规范中的一部分,任何java web工程都可以使用
- 在url-pattern中配置了/*之后,可以对所有要访问的资源进行过滤
拦截器
- 拦截器是SpringMVC框架自己的,只用使用了SpringMVC框架才能使用拦截器
- 拦截器只会拦**问的控制器方法,如果访问的是jsp/html/css/image/js等静态资源是不会拦截的
自定义拦截器:
- 实现HandlerInterceptor接口,并重写方法
2.在applicationContext.xml中配置拦截器
前端要求:
- 为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data,只有这样,浏览器才会把用户选择的文件以二进制数据发送给服务器
后端要求:
- 导入依赖
- Spring MVCw为文件上传提供了直接的支持,这种支持是即插即用的MultipartResolver实现的
- controller

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/180215.html