SpringMVC(复习笔记)

SpringMVC(复习笔记)

1、 工作流程分析

在这里插入图片描述

(1)用户通过浏览器发送请求到前端控制器DispatcherServlet。

(2)前端控制器直接将请求转给处理器映射器HandleMapping。

(3)处理器映射器HandleMapping会根据请求,找到负责处理该请求的处理器,并将其封装为处理器 执行链HandlerExecutionChina后返回给前端控制器DispatcherServlet。

(4)前端控制器DispatcherServlet根据处理器执行链中的处理器,找到能够执行该处理器的处理器适 配器HandlerAdaptor。

(5)处理器适配器HandlerAdaptor调用执行处理器Controller。

(6)处理器Controller将处理结果及要跳转的视图封装到一个对象 ModelAndView 中,并将其返回给 处理器适配器HandlerAdaptor。

(7)处理器适配器直接将结果返回给前端控制器DispatcherServlet。

(8)前端控制器调用视图解析器,将 ModelAndView 中的视图名称封装为视图对象。

(9)视图解析器ViewResolver将封装了的视图View对象返回给前端控制器DispatcherServlet.

(10)前端控制器DispatcherServlet调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对 象。

(11)前端控制器响应浏览器。

2 、SpringMVC组件

1.DispatcherServlet:前端控制器,也称为中央控制器或者核心控制器。

用户请求的入口控制器,它就相当于 mvc 模式中的c,DispatcherServlet 是整个流程控制的中心,相当 于是 SpringMVC 的大脑,由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之 间的耦合性。SpringMVC框架提供的该核心控制器需要我们在web.xml文件中配置。

2.HandlerMapping:处理器映射器

HandlerMapping也是控制器,派发请求的控制器。我们不需要自己控制该类,但是他是springmvc运 转历程中的重要的一个控制器。 HandlerMapping负责根据用户请求找到 Handler 即处理器(也就是我 们所说的 Controller),SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式, 实现接口方式,注解方式等,在实际开发中,我们常用的方式是注解方式。

3.Handler:处理器

Handler 是继 DispatcherServlet 前端控制器的后端控制器,在DispatcherServlet 的控制下 Handler 对 具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况需要程序员根据业 务需求开发 Handler。(这里所说的 Handler 就是指我们的 Controller)

4.HandlAdapter:处理器适配器

通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展处理器适配器,支持更多 类型的处理器,调用处理器传递参数等工作。

5.ViewResolver:视图解析器

ViewResolver 负责将处理结果生成 View 视图,ViewResolver 首先根据逻辑视图名解析成物理视图名 称,即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用 户。 SpringMVC 框架提供了很多的 View 视图类型,包括:jstlView、freemarkerView、pdfView 等。 一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务 需求开发具体的页面。

3、@RequestMapping 注解

3.1、@RequestMapping出现的位置

过@RequestMapping 注解定义了处理器对于请求的映射规则。该注解可以定义在类上,也可以定义在 方法上,但是含义不同。

在这里插入图片描述

一个@Controller 所注解的类中,可以定义多个处理器方法。当然,不同的处理器方法所匹配的 URI 是 不同的。这些不同的 URI 被指定在注解于方法之上的@RequestMapping 的value 属性中。但若这些请 求具有相同的 URI 部分,则这些相同的 URI,可以被抽取到注解在类之上的RequestMapping 的 value 属性中。此时的这个 URI 表示模块的名称。URI 的请求是相对于 Web 的根目录。在类的级别上的注解 会将一个特定请求或者请求模式映射到一个控制器之上。之后你还可以另外添加方法级别的注解来进一 步指定到处理方法的映射关系。

示例:修改TeamController.java 如下

package com.daw.controller;

import com.daw.service.TeamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

/**
 * ClassName: TeamController
 *
 * @author wanglina
 * @version 1.0
 */

@Controller
@RequestMapping("team")
public class TeamController {

    @Autowired
    private TeamService teamService;
    @RequestMapping(value = "add.do",method = RequestMethod.GET)
    public ModelAndView addTeam(){
        System.out.println("TeamController----addTeam---");
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("teamName","热火");
        modelAndView.setViewName("team/add");
        return modelAndView;
    }


    @RequestMapping("hello.do")
    public ModelAndView hello(){
        System.out.println("TeamController----add---");
        teamService.add();
        ModelAndView mv=new ModelAndView();
        mv.addObject("teamName","湖人");//相当于request.setAttrubuite("teanName","湖人");
        mv.setViewName("index");//未来经过springmvc的视图解析器处理,转换成物理资源路径,相当于request.getRequestDispatcher("index.jsp").forward();
        //经过InternalResourceViewResolver对象的处理之后加上前后缀就变为了   /jsp/index.jsp
        return mv;
    }

    @RequestMapping("update.do")
    public ModelAndView updateTeam(){
        System.out.println("TeamController----updateTeam---");
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("teamName","雷霆");
        modelAndView.setViewName("team/update");
        return modelAndView;
    }
}

在这里插入图片描述

浏览器中访问:

在这里插入图片描述

3.2 、指定请求提交方式

@RequestMapping的method属性,用来对被注解方法所处理请求的提交方式进行限制,即只有满足 method 属性指定的提交方式的请求,才会执行该被注解方法。

Method 属性的取值为 RequestMethod 枚举常量。常用的为 RequestMethod.GET 与 RequestMethod.POST,分别表示提交方式的匹配规则为 GET 与 POST 提交。

在这里插入图片描述

在这里插入图片描述

以下表格列出了常用的提交方式:

请求方式提交方式
地址栏请求get请求
超链接请求get请求
表单请求默认get,可以指定post
AJAX请求默认get,可以指定post

3.3 、补充url-pattern解析

3.3.1 url-pattern解析

在web.xml配置SpringMVC的前端控制器时有这个节点。这个节点中的值一般有两种写法:

1、*.do
在没有特殊要求的情况下,SpringMVC 的前端控制器 DispatcherServlet 的常使用后辍匹配方
式,可以写为*.do 或者 *.action, *.mvc 等。
2、/
可以写为/,但是 DispatcherServlet 会将向静态内容--例如.css、.js、图片等资源的获取请求
时,也会当作是一个普通的 Controller 请求。前端控制器会调用处理器映射器为其查找相应的处理器。肯
定找不到啊,所以所有的静态资源获取请求也均会报 404 错误

案例:在index.jsp页面添加一张图片,如果节点中的值为*.do,图片可以正常访问,但是如果为/就不能 访问。

1、项目中添加图片,同时修改index.jsp页面

在这里插入图片描述

2、修改web.xml

在这里插入图片描述

3、此时访问图片无法显示

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值