springMVC(一)springMVC的工作原理和如何搭建一个springMvc项目

一:springMVC

1.1 概念

  • 底层:servlet,springMVC的工作能实现的,servlet都能实现但是非常的臃肿和繁琐。

  • java开源框架,Spring Framework的一个独立模块。

  • ** MVC框架,在项目中开辟MVC层次架构**

  • 对控制器中的功能 包装 简化 扩展践行工厂模式,功能架构在工厂之上

1.1.1 MVC架构 概念

名称职责
Model模型:即业务模型,负责完成业务中的数据通信处理,对应项目中的 service和dao
View视图:渲染数据,生成页面。对应项目中的Jsp
Controller控制器:直接对接请求,控制MVC流程,调度模型,选择视图。对应项目中的Servlet

1.2 工作流程

https://blog.csdn.net/weixin_43189971/article/details/125555085?spm=1001.2014.3001.5502

1.3springMvc的项目搭建

1.31 带模板的Mvaen搭建

1.3.2 pom打war包

  <!--写这个的目的,是为了让 idea 识别出我这个是一个 web 工程-->
    <packaging>war</packaging>

1.3.3 改web模块

在这里插入图片描述

在这里插入图片描述

记得改位置

1.3.4 加依赖

  <!--引入 SpringMVC 的依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.20</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>

servlet上一代的最后一个版本是2.5,里面不支持注解。这一代的第一个版本是3.0,与tomcat 7配套。servlet 1.0当时不叫这个名字

1.3.5 WEB-INF (比spring工程多的)

1.3.5.1 概念:安全目录,其中的文件必须通过接口才能访问
1.3.5.2 配置WEB-INF下的web.xml

在这里插入图片描述

作为一个MVC框架,首先要解决的是:如何能够收到请求!

所以MVC框架大都会设计一款前端控制器,选型在 Servlet 或 Filter两者之一,在框架最前沿率先工作,接收所有请求。

此控制器在接收到请求后,还会负责springMVC的核心的调度管理,所以既是前端又是核心

 <servlet>
        <servlet-name>springmvc</servlet-name>
        <!--SpringMVC 的核心就是 DispatcherServlet-->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--指定 Servlet 的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-servlet.xml</param-value>
        </init-param>
    </servlet>
    <!--
    将来,所有的请求都会被 DispatcherServlet 拦截下来,然后在 DispatcherServlet 完成对 HandlerMappingHandlerAdapter 以及 ViewResolver 的调用
    -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
  • 默认情况下,这个 servlet 的名字+‘-servlet’ 共同组成配置文件名,此时如果配置刚好还处于 WEB-INF目录下,那么就可以不哦用写配置了 :
    例如当前这个,如果此时在 WEB-INF 目录下,有一个 Spring 的配置文件,并且配置文件名还是 springmvc-servlet.xml,那么就不需要配置配置文件位置了

后端控制器,即servlet

@Controller //声明这是一个控制器
@RequestMapping("/hello")  //访问路径 ,等价于url-pattern
public class HelloController {
	@RequestMapping("/test1")  //访问路径
	public String hello1(){
		System.out.println("hello world");
		return "index"; // 跳转:/index.jsp  
	}
	@RequestMapping("/test2") //访问路径
	public String hello2(){
		System.out.println("hello c9");
		return "views/users";//  跳转:/views/user.jsp
	}
}

1.3.6 resource目录下创建spring-servlet.xml

1.2.6.1 注入bean
  <!--
    1. 先注册接口
    -->
    <bean class="com.huang.demo.MyController" id="/hello"/>
    <bean class="com.huang.demo.MyController2" id="/hello2"/>
    <!--
1.3.6.2 处理器映射器HandlerMapping(是一个接口)

HandlerMapping根据URL地址,找到对应的处理器

例如这里: http://localhost:8080/mvc01/hello -> MyController

BeanNameUrlHandlerMapping 表示根据 bean 的名字去处理请求地址,例如请求地址是

http://localhost:8080/mvc01/hello,
在这个路径中,servletPath 是 /hello,
此时,系统会自动去查找一个名为 /hello 的 bean 来处理当前请求

在这里插入图片描述

  • 其中提供了很多不同的实现类
  • 即提供了很多种找到路径的方式

大家知道什么servletPath和ContextPath吗

  • servletPath 是/hello,
    + 此时,系统会自动取查找一个名为/hello的bean来处理当前请求
  • ContextPath就是你工程的名字

在这里插入图片描述

具体配置

	    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
1.3.6.3 处理器适配器HandlerAdapter
  • 处理器映射器找到了处理器(路径),适配器找方法去执行

在这里插入图片描述

  • HandlerAdapter下面有很多实现类,我们那两个举例子
    + SinpleControllerHandlerAdapter,这个处理器适配器的作用,就是将你的处理器强转成一个Controller对象,然后调用里面的handlerRequest方法
    + 对于springMvc来说,拿到适配器之后直接调用HandlerAdapter的handle的方法。至于这个方法里面怎么实现与spingMvc无关,很像我们的充电器(电源适配器),故此命名

具体配置

   <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

1.3.6.4 配置试图解析器
 4. 配置视图解析器
    第三步,会返回一个 ModelAndView,接下来,需要解析这个 ModelAndView
    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

13.7 Spring-servilet.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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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 http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--包扫描,扫描到刚刚写好的 Controller-->
    <context:component-scan base-package="com.qfedu.demo"/>
                    <!--
                    配置了这个 HandlerMapping,将来就按照 @RequestMapping 注解上的值,去查找对应的处理器
                    -->
                <!--    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>-->
                    <!--通过 @RequestMapping 注解标记的处理器,通过这个处理器适配器来执行-->
                <!--    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>-->

                    <!--
                    这个注解,一个顶两个(HandlerMappingHandlerAdapter)
                    下面这个并不是简单的代替上面两行配置,它不仅仅代替上面两行,还为上面的两个 Bean 做了很多其他相关的配置
                    -->
                    <mvc:annotation-driven/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值