一、MVC的引入

1.1 什么是MVC

  1. MVC是模型(Model 用于封装数据)、视图(View 渲染数据与跳转页面)、 控制器(Controller 表现层中的资源)的简写,是一种软件设计规范。
  2. 是将业务逻辑、数据、显示分离的方法来组织代码。
  3. MVC主要作用是降低了视图与业务逻辑间的双向偶合。
  4. MVC不是种设计模式,MVC是一种架构模式,不同的MVC存在差异。
  1. Model (模型) :数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在般 都分离开来: Value Objeat (数据Dao)和服务层 (行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
  2. View (视图)负贡进行模型的展示,一般就是我们见到的用户界面。客户想看到的东西。
  3. Controller (控制器) :按收用户请求,委托给模型进行处理(状态改变),处理完华后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作

1.2 SpringMVC

Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级 Web框架:
Spring MVC的特点:

  • 1.轻量级,简单易学。
  • 2.高效,基于请求响应的MVC框架
    1. Spring兼容性好,无缝结合
  • 4.约定优于配置
  • 5.功能强大: RESTful. 数据验证、格式化、本地化、上题等
  • 6.简法灵活

1.3 DispatcherServlet
  1. Spring的web框架围绕DispatcherServlet调度

Servlet设计。

  1. DispatcherServlet的作用定将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上

    1. 版本的用户可以采用基于注解形式进行开发

二、MVC的应用

2.1 导入支持jar包

image.png

2.2 Controller测试

2.2.1 配置xml文件 添加约束

image.png
在配置xml文件时需要注意

  • 注册controller组件时,需要注意注册资源id不能与controller组件重名。
  • 由于我们需要在controllerTest中访问jsp,需要让服务器找到这个jsp文件,所以需要一个视图解析器进行解析以及前后缀的添加。

学习要点:配置视图解析器

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="
  6. http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/mvc
  9. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  10. <!--注册资源路径,id通常都是一个资源路径,controller通常视为资源,class为全类名-->
  11. <bean id="/controller1" class="com.SpringMVC.ControllerTest"></bean>
  12. <!--注册controller组件-->
  13. <!--配置视图解析器-->
  14. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  15. <!--设置视图的前缀-->
  16. <property name="prefix" value="/jsp/"></property>
  17. <!--设置视图的后缀-->
  18. <property name="suffix" value=".jsp"></property>
  19. </bean>
  20. </beans>

2.2.2 controllerTest类

学习要点:controller组件的写法:

  1. public class ControllerTest implements Controller {
  2. @Override
  3. public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
  4. //创建一个实例
  5. ModelAndView modelAndView = new ModelAndView();
  6. //封装数据
  7. modelAndView.addObject("message","hello mvc");
  8. //设置视图名称(就是test.jsp)
  9. modelAndView.setViewName("test");
  10. return modelAndView;
  11. }
  12. }

2.2.3 配置web.xml文件

dispatcherServlet的配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!--配置前端总控制器-->
  7. <servlet>
  8. <servlet-name>dispatcherServlet</servlet-name>
  9. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10. <!--绑定spring核心配置文件-->
  11. <init-param>
  12. <param-name>contextConfigLocation</param-name>
  13. <param-value>classpath:xml/springmvc.xml</param-value>
  14. </init-param>
  15. <!--设置启动级别:希望在tomcat服务器启动的时候就去加载核心容器对象-->
  16. <load-on-startup>1</load-on-startup>
  17. </servlet>
  18. <servlet-mapping>
  19. <servlet-name>dispatcherServlet</servlet-name>
  20. <!--拦截客户端所有的请求-->
  21. <url-pattern>/</url-pattern>
  22. </servlet-mapping>
  23. </web-app>

三、MVC的执行流程

  1. 客户端会给服务端发送请求,springMVC会通过DispatcherServlet来进行资源的拦截 http://loca1host:8080/web/ controller1
  2. DispatcherServlet拦截到请求之后,会调用一个处理映射器handlerMapping来解析地址,将解析的结果告知DispatcherServlet
  3. DispatcherServlet会调用一个处理适配器handlerAdapter从容器中心配到对应的资源(根据资源路径来匹配具体的资源)
  4. 匹配的资源之后,会将结果告知DispatcherServlet,然后再去执行具体的Controller
  5. 封装数据、处理数据,将数据封装到model中,设置视图名称返@model和view给DispatcherServlet
  6. DispatcherServlet会调用视图解析器来解析view中的视图,然后在将结果告DispatcherServlet
  7. DispatcherServlet会根招解析好的视图来进行视图页面的跳转,然后渲染数据。

四、mvc基于注解的方式进行开发

流程 :

  1. 配置xml 文件,(添加依赖、开启扫描包、过滤、视图解析器)
  2. 配置web.xml文件:配置前端总控制器、绑定spring核心配置文件、设置启动级别、拦截客户端所有的请求

4.1 xml核心文件配置

image.png
一、根据使用来确定依赖:基本是根据mvc的依赖再结合context的依赖组合而成的。

  1. <!--开启扫描包-->
  2. <context:component-scan base-package="com.SpringMVC"></context:component-scan>
  3. <!--过滤静态资源-->
  4. <mvc:default-servlet-handler></mvc:default-servlet-handler>
  5. <!--开启mvc注解支持-->
  6. <mvc:annotation-driven></mvc:annotation-driven>
  7. <!--配置视图解析器-->
  8. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  9. <!--设置前缀-->
  10. <property name="prefix" value="/jsp/"></property>
  11. <!--设置后缀-->
  12. <property name="suffix" value=".jsp"></property>
  13. </bean>

4.2 web.xml的配置

注意前端总控制器的DispatcherServlet,配置时使用的名字为dispatcherServlet,以及注意核心配置文件的路径修改。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <!--配置前端总控制器-->
  7. <servlet>
  8. <servlet-name>dispatcherServlet</servlet-name>
  9. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  10. <!--绑定spring核心配置文件-->
  11. <init-param>
  12. <param-name>contextConfigLocation</param-name>
  13. <param-value>classpath:xml/springmvc02.xml</param-value>
  14. </init-param>
  15. <!--设置启动级别:希望在tomcat服务器启动的时候就去加载核心容器对象-->
  16. <load-on-startup>1</load-on-startup>
  17. </servlet>
  18. <servlet-mapping>
  19. <servlet-name>dispatcherServlet</servlet-name>
  20. <!--拦截客户端所有的请求-->
  21. <url-pattern>/</url-pattern>
  22. </servlet-mapping>
  23. </web-app>

4.3 controller层的配置,

  1. 不需要使用

    public class ControllerTest implements Controller { @Override

    1. public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {return null}
  1. 直接添加注解
  • 使用@Controller注解的类是不需要在xml文件中进行注册的。

  • @RequestMapping(“/user”) 用于声明资源路径 ,用于地址的映射。
  • @ResponBody 可以直接返回一个字符串给客户端

  • @Controller 可以让当前类的实例交由spring容器管理,该类下的方法返回值如果是String类型的,那么该返回值将会看成是视图,并且会通过视图解析器进行解析,然后跳转到具体的视图。

    1. @Controller
    2. //配置一个资源路径
    3. @RequestMapping("/user")
    4. public class UserContorller {
    5. //model是一个域对象 底层是一个request域
    6. @RequestMapping("/test01")
    7. public String getTest01(Model model){
    8. model.addAttribute("message","hello SpringMVC");
    9. return "test1";//转发到test1.jsp下
    10. }
    11. }

4.4 访问测试:

  1. 根据我们的两次@RequestMapping("/user")、@RequestMapping("/test01")使用的位置路径,需要注意我们的访问路径为:[http://localhost:8080/web/user/test01](http://localhost:8080/web/user/test01)

五、基于MVC的前端数据的回传

5.1 参数回传

  1. @RequestMapping("/test02")
  2. public void getTest02(int i,String name) {
  3. System.out.println(i);
  4. System.out.println(name);
  5. }

访问如下:对数据进行赋值,即可实现数据回传。
http://localhost:8080/web/user/test02?i=10&name=jack

5.2 视图失效

@ResponseBody 让当前方法的视图失效,然后可以直接返回数据给客户端

  1. @RequestMapping("/test04")
  2. @ResponseBody
  3. public String getTest04(MvcVo mvcVo){
  4. return "hello";
  5. }

使得数据失效,return “hello”;直接向客户端(网页)传递字符串,而不是跳转视图。