SpringMVC-初识

SpringMVC概述

image-20210515235014283

SpringMVC是基于Spring的一个框架,实际上就是Spring 的一个模块,专门做WEB开发,SpringMVC可以理解为servlet的一个升级

SpringMVC就是一个Spring。Spring是一个容器,使用IOC管理对象,使用@Component @Controller @Service @Repository注解往容器中注入对象

使用@Controller创建处理器对象,@Service创建业务对象,@Repository创建持久层对象,@Autowried或者@Resource在控制器类中注入Service,Service类中注入Dao

SpringMVC容器中放入的是控制器对象,我们要做的是使用@Controller创建控制器对象,把对象放入到SpringMVC容器中,把创建的对象作为控制器对象使用,这个控制器对象能接收请求,显示处理结果,就当作是一个servlet使用

使用@Controller注解创建的是一个普通类的对象,不是servlet,是SpringMVC赋予了控制器对象一些额外功能

web开发底层是servlet,SpringMVC中有一个对象是Servlet:DispatcherServlet(中央调度器)

DispatcherServlet:负责接收所有请求,用户把请求给了DispatcherServlet之后DispatcherServlet把请求转发给Controller对象,最后是Controller对象处理请求

简要流程

index.jsp---->DispatcherServlet(中央调度器)---->转发,分配给Controller对象(@Controller注解创建的对象)

Hello Spring MVC

需求:发起请求,交给springMVC控制器对象,并显示请求的处理结果(结果页面显示Hello Spring MVC)

创建WEB Application

补全java文件路径资源路径

image-20210516102831539

image-20210516102956586

引入依赖

<dependencies>
  <!--servlet-->
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
  </dependency>
  <!--spring mvc-->
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.5.RELEASE</version>
  </dependency>
</dependencies>

创建SpringMVC的配置文件

  1. 声明注解扫描器,指定@Controller注解所在的包名
  2. 声明视图解析器,帮助处理试图
<?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
       https://www.springframework.org/schema/context/spring-context.xsd">

    <!--声明组件扫描器-->
    <context:component-scan base-package="com.edu.springmvc"/>

</beans>

在web.xml中注册springMVC框架的核心对象DispatcherServlet(中央调度器)

  1. DispatcherServlet(中央调度器),是一个servlet,它的父类是继承HttpServlet
  2. DispatcherServlet页叫做前端控制器(Front Controller)
  3. DispatcherServlet负责接收前端提交的请求,调用其他的控制器对象,并把请求的处理结果显示给前端
<?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>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--自定义springmvc读取文件的位置-->
    <init-param>
      <!--springmvc配置文件的位置属性-->
      <param-name>contextConfigLocation</param-name>
      <!--指定自定义文件的位置-->
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--表示在tomcat启动后,创建servlet对象 数字表示启动后创建对象的顺序-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--路径匹配规则-->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

创建控制器类

在类上加入@Controller注解,创建对象,并放入SpringMVC容器中

在类中的方法上面加入@RequestMapping注解

@RequestMapping:请求映射,把一个请求地址和一个方法绑定在一起。

  • 属性值:value是一个String类型,表示请求的uri地址,value值是唯一的,不能重复

ModelAndView:表示本次请求的处理结果

  • model:数据,请求处理完后,要显示给用户的数据
  • view:视图,比如jsp等
@Controller // 创建处理器对象,对象放在springmvc容器中
public class MyController {
    @RequestMapping(value = "/some.do")
    public ModelAndView doSome() {
        //处理some.do请求,相当于service调用处理完成了
        ModelAndView mv = new ModelAndView();
        //添加数据,框架在请求的最后把数据放入到request作用域
        mv.addObject("msg", "hello spring mvc");
        mv.addObject("fun", "执行的是doSome方法");
        //指定视图,指定视图的完整路径
        mv.setViewName("/show.jsp");
        return mv;
    }
}

搭建tomcat服务器

image-20210516103719532

配置页面跳转

index.jsp->show.jsp

<p><a href="some.do">发起some.do请求</a></p>
-------------------------------------------
<body>
<h3>show.jsp从request作用域获取数据</h3><br/>
<h3>msg数据:${msg}</h3>
<h3>fun数据:${fun}</h3>
</body>

image-20210516103912931

配置试图解析器

需求:webapp目录下的资源是有权公开目录,可以通过路径直接请求,如何保证安全只能跳转请求

直接访问不安全

image-20210516111444744

WEB-INF是保护目录,不对用户进行开放的,将页面放入WEB-INF下,页面会收到保护不能直接访问

image-20210516111850601

通过请求访问,有效保护了页面的安全

mv.setViewName("/WEB-INF/view/show.jsp");

image-20210516111834666

配置视图解析器

在 springmvc 配置文件中声明视图解析器,帮助开发人员设置视图文件的路径

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--前缀-->
    <property name="prefix" value="WEB-INF/view/"/>
    <!--后缀-->
    <property name="suffix" value=".jsp"/>
</bean>

使用逻辑名称指定视图

// 自动拼接 前缀+逻辑名称+后缀
// WEB-INF/view/show.jsp
mv.setViewName("show");

Spring MVC请求处理流程

  1. 发起一个请求
  2. 请求通过web.xml配置的url-pattern根据请求规则转发给不同的DispatcherServlet中央调度器
  3. 中央调度器DispatcherServlet会读取init-param自定义的配置文件
  4. 根据配置文件,得到项目中的所有处理器对象@Controller
  5. 根据不同的@Controller映射规则,转发给处理器对象进行处理

DispatcherServlet之init方法

tomcat启动,创建容器的过程

通过load-on-startup标签指定的1,创建DispatcherServlet对象

DispatcherServlet的父类继承了HttpServlet,它是一个Servlet,在被创建时,会执行init方法

//init方法
{
   //创建容器,读取配置文件
   webApplicationContext ctx = new ClassPathXmlApplicationContext("springmvc.xml");
   //把容器对象放入到ServletContext中
   getServletContext().setAttribute(key,ctx);
}

创建容器的作用:创建@Controller注解所在的类的对象

image-20210516104812690

image-20210516105131227

image-20210516105219797

image-20210516105554508

请求的处理过程

service->doService->doDispatch

image-20210516105846178

image-20210516110925093

image-20210516110744526

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值