Spring Mvc 的讲解与使用说明

一、SpringMvc的概述

Spring MVC  是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,本质上还是相当于 Servlet。
SpringMVC是Spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于Spring框架中WEB层开发的一部分;

Spring MVC 是结构最清晰的 Servlet+JSP+JavaBean 的实现: 

二、MVC的模式

MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写, 是一种用于设计创建 Web 应用程序表现层的模式。MVC 中每个部分各司其职: 

Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或 JavaBean组件,不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。

View(视图):负责进行模型的展示,将逻辑视图解析成物理视图并渲染,一般用于展示数据,通常视图是依据模型数据创建的。

Controller(控制器):接收用户请求,委托给模型进行处理,处理完毕后把返回的模型数据返回给视图,由视图负责展示,一般是应用程序中处理用户交互的部分,用于处理程序逻辑的。

三、Spring MVC的特点:

  1. 轻量级,简单易学
  2. 高效 , 基于请求响应的MVC框架
  3. 与Spring兼容性好,无缝结合
  4. 功能强大:restful、数据验证、格式化、本地化、主题等
  5. 简洁灵活

Spring MVC框架像许多其他MVC框架一样, 以请求为驱动 , 围绕一个中心Servlet分派请求及提供其他功能DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)

DispatcherServlet的作用是将请求分发到不同的处理器。

四、Spring MVC的核心和流程

Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:

  • 处理器映射:选择使用哪个控制器来处理请求
  • 视图解析器:选择结果应该如何渲染 

Spring MVC的流程

 在web.xml中进行配置springmvc的前端控制器

<? xml version="1.0" encoding="UTF-8"? >
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://java.sun.com/xml/ns/javaee"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id="WebApp_ID" version="3.0">
  <servlet>
    <!--springmvc的前端控制器-->
    <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>
      <! -- 表示容器在启动时立即加载Servlet 启动顺序,数字越小,启动越早-->
      <load-on-startup>1</load-on-startup>
 </servlet>
    <! -- 表示 / 会将所有的 URL 请求进行拦截-->
    <!--/ 匹配所有的请求;(不包括.jsp)-->
    <!--/* 匹配所有的请求;(包括.jsp)-->
  <servlet-mapping>
     <servlet-name>springmvc</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

SpingMvc.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--
        开启springmvc的注解驱动、支持mvc注解驱动
        在spring中一般采用@RequestMapping注解来完成映射关系
        要想使@RequestMapping注解生效
        必须向上下文中注册DefaultAnnotationHandlerMapping
        和一个AnnotationMethodHandlerAdapter实例
        这两个实例分别在类级别和方法级别处理。
        而annotation-driven配置帮助我们自动完成上述两个实例的注入
        -->
    <mvc:annotation-driven/>
    <!--静态处理器、让Spring MVC不处理静态资源-->
    <mvc:default-servlet-handler/>
    <!--扫描controller层、
    配置spring创建容器时要扫描的包,让指定包下的注解生效,由IOC容器统一管理 -->
    <context:component-scan base-package="com.htc.controller"></context:component-scan>
    <!--springmvc的视图解析器-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <!-- 前缀 -->
        <property name="prefix" value="/static/"></property>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!--文件上传-->
    <bean id="multipartResolver"    
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="5242880"></property>
    </bean>
</beans>

编写一个Controller层测试类

package com.htc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {
    //真实访问地址 : 项目名/haha
    @RequestMapping("/haha")
    public String sayHello(Model model){
        //向模型中添加属性msg与值,可以在JSP页面中取出并渲染
        model.addAttribute("msg","hello,SpringMVC");
        //web-inf/jsp/hello.jsp
        return "hello";
    }
}
  • @Controller是为了让Spring IOC容器初始化时自动扫描到;
  • @RequestMapping是为了映射请求路径,这里方法上有映射所以访问时应该是/hello;
  • 方法中声明Model类型的参数是为了把Action中的数据带到视图中;
  • 方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/static/haha.jsp。
  • 前后缀是在web.xml中进行设置的

核心组件:

  • 前端控制器(DispatcherServlet)
    •  说明:Spring MVC 的入口函数,接收请求,响应结果,相当于转发器,中央处理器,它就相当于mvc模式中DispatcherServlet的存在降低了组件之间的耦合性。
  • 处理器映射器(HandlerMapping)
    • 说明:根据请求的url查找Handler(即处理器Controller),映射方式有配置文件方式,实现接口方式,注解方式等。
  • 请求处理器映射器(HandlerMapping)
    • 说明:HandlerAdapter是适配器模式的应用,按照HandlerAdapter要求的规则去执行Handler。
  • 处理器适配器(HandlerAdapter)
    • 说明:Handler需要开发工程师按照HandlerAdapter的要求去做,是后端控制器,处理具体的业务逻辑。
  • 视图解析器(ViewResolver)
    • 说明:进行视图解析,首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
  • 控制器(Controller)
    • 负责监听并处理View 的事件,更新和调用 Model;也负责监听 Model的变化(Model从服务器获得数据,并更新 View。
  • 视图(View)
    • 说明:View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf等)。

五、SpringMVC中常用注解

  • @Controller
    • 注解一个类表示控制器,Spring MVC 会自动扫描标注了这个注解的类。
  • @RestController

    •  这个是@Controller和@ResponseBody的注解组合,是在 @Controller 基础上,增加了 @ResponseBody 注解,更加适合目前前后端分离的架构,提供 restful   API ,返回 JSON 数据格式。
  • @RequestMapping
    • 请求路径映射,可以标注类,也可以标注方法,可以指定请求类型(post、get、put、delete、patch...)默认不指定为全部接收。
  • @RequestParam
    • 用于数据绑定,接收url中的参数(即 Content-Type : application/x-www-form-urlencoded类型的内容),并且前后端参数名称必须相同。
  • @RequestBody
    • 用于数据绑定,接收body体中的参数,而不是url。所以请求一定是post(即不是 Content-Type : application/x-www-form-urlencoded 类型的内容)
  • @ResponseBody
    • 放在方法上,表示此方法返回的数据放在body体中,而不是跳转页面。一般用于ajax请求,返回json数据。
  • @PathVariable
    • 路径绑定变量,用于绑定路径中 “{a}”的变量。
  • @RequestHeader
    • 放在参数前,用来获取request header中的参数。
  • @CoookieValue
    • 放在方法参数前,用来获取request header cookie中的参数值。
  • @ComponentScan(包名)
    • 这个注解是扫描包下的文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值