SpringMVC个人笔记(1)

今天在做SpringBoot的练习时,发现对SpringMVC的理解有些模糊,就又回头重新做一次总结,有用词不当或不够准确的表示虚心请教并改正。

SpringMVC在程序中的位置在哪儿?

用户端给我的TomCat发送请求,首先给servlet,然后servlet把请求参数发送给SpringMVC框架,在框架内部根据先根据

请求地址 来查找相应的代码,然后执行处理代码,得到相应参数或数据,再处理相应数据,把处理的结果返还给Servlet,最后通过视图方式返还给用户端。
在这里插入图片描述

SpringMVC的核心组件有哪些

DispatcherServlet:前端控制器
用户请求首先到达前端控制器,它就相当于mvc模式中的c,DispatcherServlet是整个流程控制的调度中心,由它调用其它组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性。
Handler:处理器
Handler是继DispatcherServlet前端控制器的后端控制器,DispatcherServlet会将请求发送至对应的Handler来进行处理。Handler是处理业务逻辑的地方,需要我们自己来编写具体代码,等同于之前的Service层
HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求路径找到Handler,springmvc提供了不同的映射器实现不同的映射方式,例如:BeanName映射,配置文件映射,注解映射等。
HandlAdapter:处理器适配器
通过HandlerAdapter来执行Handler,因为Handler有不同形式,意味着调用方式是不同的,这是适配器模式的应用,我们也可以扩展适配器来实现新的Handler;
ViewResolver:视图解析器
ViewResolver负责从Handler中获取数据和视图,根据逻辑视名称查找物理视图文件,并查找View对象,再生成View对象;
View:视图
View的职责就是装配数据,SpringMVC框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。常用视图就是jsp。我们需要根据业务需求,通过页面标签或页面模版技术将模型数据展示给用户

程序运行中的流程

在这里插入图片描述

pom依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>MVC01</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>MVC01 Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <!--   SpringMVC -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.2.RELEASE</version>
    </dependency>

    <!--JEE相关的-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
</project>

web.xml配置

首先我们需要让SpringMVC随着web项目启动,那么先利用DispatcherServlet做两个事情:初始化一个spring容器;注册一个servlet。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--        初始化参数指定配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup></load-on-startup>
    </servlet>

<!--    要交给SpringMVC处理的请求-->
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

这里需要注意的是url-pattern
/ 表示除了.jsp之外的所有请求
/* 表示所有请求

创建控制器类

@Controller
//@RequestMapping("/user")
public class UserController {
    @RequestMapping("/getMsg")
    public ModelAndView getMsg(){
        ModelAndView modelAndView = new ModelAndView();//创建一个表示模型和视图的对象
        modelAndView.setViewName("/index.jsp");//设置视图名称
        modelAndView.addObject("msg","hello SpringMVC annotation!");//添加视图需要的数据
        return modelAndView;//返回模型和视图给dispatcherServlet
    }
}

@Controller
该注解写在类上,用于注册控制器bean到容器中。
@RequestMapping(“url”)
该注解写在方法上时,用于为方法指定要匹配的url,该url是相对根路径的。写在类上时类上的url是相对于根路径,而类中方法则相对于类的url
但是使用注解需要在applicationContext.xml添加

<context:component-scan base-package=""/>

表示自动注解扫描到的bean。

To Be Continue

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值