SpringMVC学习笔记(一)

SpringMVC是什么

MVC设计模式

在了解SpringMVC之前,我们需要了解MVC设计模式,MVC模式指的是可以将一个Web Application分为一下三层:

  1. Controller(控制层):负责接收并处理请求,响应客户端。
  2. Model(模型层):负责处理业务逻辑,产生不同的模型数据。
  3. View(视图层):将模型数据展现给用户,与用户进行交互的窗口。

那么控制层、模型层、视图层之间是如何进行交换的呢?

当有一个请求发送来时,会被控制层进行接收,然后控制层根据不同的请求,调用不同的模型层方法,不同的方法会对数据库进行不同的持久化操作,从而产生不同的模型数据,将其封装后传递个视图层,视图层将拿到的数据进行渲染,最终将结果相应给客户端。
在这里插入图片描述

SpringMVC设计模式

SpringMVC是企业级开发框架,是目前最好的实现MVC设计模式的框架,他基于SpringIOC为基础,利用容器来简化自己的配置,相当于Spring框架的一个子模块。

SpringMVC的核心组件

  1. DispatcherServlet:前置控制器。
    它是整个流程控制的核心,用来控制其他组件的执行,进行统一的调度,降低各个组件之间的耦合性,相当于一个总指挥。
  2. Handler:处理器,完成具体的业务逻辑。
  3. HandlerMapping:将请求映射到Handler
    当DispatcherServlet接收到请求后,需要将不同的请求分发到不同的Handler中,此时就需要HandlerMapping。
  4. HandlerInterceptor:处理器拦截器
    它是一个接口,若需要进行拦截处理,那么可以实现这个接口。
  5. HandlerExecutionChain:处理器执行链。
    它包括两部分内容,一个是Handler和一个HandlerInterceptor,一般会有默认的拦截器,如果需要额外的添加拦截器,可以通过实现该接口来添加,但它至少都会返回一个默认拦截器。
  6. HandlerAdapter:处理器适配器
    Handler在处理业务方法之前需要进行对表单数据的验证、数据类型的转换、将表单数据封装到JavaBean当中,这一系列的操作都是由HandlerAdapter来完成的,DispatcherServlet通过HandlerAdapter来执行不同的Handler。
  7. ModelAndView:装载模型数据和视图信息
    这里的视图信息指的是逻辑视图,ModelAndView作为Handler的处理结果返回给DispatcherServlet。
  8. ViewResolver:视图解析器
    DispatcherServlet拿到ModelAndView后需要进行解析,解析时需要借助ViewResolver,将逻辑视图转换为物理视图,最后渲染给客户端

组件之间如何进行交互

  1. 客户端请求被DispatcherServlet接收 。
  2. DispatcherServlet将请求映射到Handler。
  3. 通过HandlerMapping生成Handler以及HandlerInterceptor。
  4. 返回HandlerExecutionChain(Handler + HandlerInterceptor)给DispatcherServlet。
  5. DispatcherServlet通过HandlerAdapter执行Handler。
  6. 返回一个ModelAndView给DispatcherServlet。
  7. DispatcherServlet通过ViewResolver进行解析。
  8. 返回填充了模型数据的View,相应给客户端。

在这里插入图片描述

Demo

web.xml配置文件

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
<!--  配置前置控制器-->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--    配置初始化的参数 用来指定springmvc.xml的位置  contextConfigLocation上下文配置路径-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
<!--  配置映射 /表示拦截所有请求-->
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!--    需要在其中配置HandlerMapping,通过一个请求和Handler进行对应,目的是将url请求映射到Handler-->
    <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
<!--                配置test对应的Handler-->
                <prop key="/test">testHandler</prop>
            </props>
        </property>
    </bean>

<!--    配置Handler-->
    <bean id="testHandler" class="com.yanyi.handler.MyHandler"/>

<!--    配置视图解析器   配置视图解析器的目的是将逻辑视图转换为物理视图
        在MyHandler中的逻辑视图为show,需要将show这一个字符串映射到show.jsp
        这里用到了视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

SpringMVC需要我们自己开发的软件有两个,一个是Handler,还有一个是View,Handler实现了Controller接口中的handleRequest方法,在其中为modelAndView添加模型数据和视图逻辑。

package com.yanyi.handler;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class MyHandler implements Controller {
    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        //在这里处理具体的业务逻辑 把逻辑视图解析成物理视图
        //modelAndView是装载模型数据和逻辑视图的
        ModelAndView modelAndView = new ModelAndView();
        //为其添加模型数据 Tom
        modelAndView.addObject("Name","Tom");
        //为其添加逻辑视图
        modelAndView.setViewName("show");
        return modelAndView;
    }
}

下来编写jsp显示页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--判断是否忽略EL表达式 false 即不忽略EL表达式--%>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${Name}
</body>
</html>

所以,用完整的话来说就是用户通过客户端发送请求,被DispatcherServlet接收,具体内容在web.xml中进行配置servlet,其中指定applicationContext.xml的配置文件的位置,以及org.springframework.web.servlet.DispatcherServlet。springmvc若使用的是注解方式进行配置的,那么打开自动扫描包,若使用的是xml方式,需要配置Handler和HandlerMapping,在HandlerMapping中配置:将一个请求和Handler进行对应,目的是将url请求映射到Handler。然后返回HandlerExecutionChain到DispatcherServlet,将获取到的Handler通过HandlerAdapter去执行具体的Handler的具体业务方法,然后返回ModelAndView给DispatcherServlet。ModelAndView包含了两部分内容,一部分是模型数据,另一部分是视图信息,DispatcherServlet需要借助ViewResolver解析器进行解析,将逻辑视图解析为物理视图,完成模型数据的填充,然后返回给客户端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值