springMVC——什么是MVC,SpringMVC,入门案例

一介绍

1.什么是MVC

在这里插入图片描述

Javabean:项目中所有处理数据的类

2.什么是SpringMVC

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q0RZKqwp-1648534141818)(D:\学习\截图\image-20220320183423341.png)]

是基于servlet的,封装了处理请求等等的过程

三层架构和MVC

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lwSq0MVu-1648534141821)(D:\学习\截图\image-20220320183824049.png)]

表示层(web层) :包括 servlet 和展示页面

业务逻辑层(service层)、数据访问层(dao层)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CNgBoCdX-1648534141823)(D:\学习\截图\image-20220320184035674.png)]

3.SpringMVC的特点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yOotFyc1-1648534141827)(D:\学习\截图\image-20220320185928135.png)]

二.入门案例

1.创建空maven项目 不选择idea 中的maven模板

复制粘贴 pom.xml

<?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>com.donggei.mvc</groupId>
    <artifactId>springMVC-demo1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <dependencies>
        <!-- SpringMVC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.1</version>
        </dependency>
        <!-- 日志 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- ServletAPI -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
               <!-- Tomcat 里包括了servlet,设置provided后 这个依赖不会打包
                因为这个api本身就由服务器提供,程序也没有提供的必要了。
                -->
        </dependency>
        <!-- Spring5和Thymeleaf整合包 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring5</artifactId>
            <version>3.0.12.RELEASE</version>
        </dependency>
    </dependencies>
</project>

provided—只在maven编译和测试阶段生效,不在打包,安装,部署中生效

2.main 下创建webapp目录

3.在webapp下创建web.xml (是web工程的入口和配置文件)

以后可以用 注解 配置类 代替web.xml和SpringMCV的配置文件以及Spring的配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XqTONlB2-1648534141830)(D:\学习\截图\image-20220320222340416.png)]

如果选择了webapp模板 其实2,3步就省略了

4.写web.xml

配置前端控制器

<!-- 配置SpringMVC 前端控制器 对浏览器所有请求统一管理-->
<servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
    <!-- / 表示的是除了.jsp请求外的所有请求-->
</servlet-mapping>

/
表示的是除了.jsp请求外的所有请求(一般也不会用到jsp) , 因为jsp 本质是一个servlet, 一般是做特定的处理,不需要被前端控制器统一处理

如果被前端控制器统一处理,请求这个jsp 就找不到 你要访问的jsp啦

/* 表示的是包括.jsp的所有请求 注意区别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-niBDzEd3-1648534141831)(https://gitee.com/dong2645981073/picture-summary/raw/master//image/image-20220321110527339.png)]

(一般不使用 使用的是下面这种)

不使用上面这种是因为和maven的打包有关

前端控制器是一个Servlet 所以要在web.xml配置,前端控制器有它的初始化初始化参数指向了spingMVC.xml

)(D:\学习\截图\image-20220321143352515.png)]

![]](https://img-blog.csdnimg.cn/dfbea11bd63847b78c76bff04fe3a0d6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAYmVnaW5uZXJEWg==,size_20,color_FFFFFF,t_70,g_se,x_16)

web.xml:

<?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">
    <!-- 配置SpringMVC 前端控制器 对浏览器所有请求统一管理-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--配置SpringMVC配置文件的位置和名称-->
        <init-param>
            <!--上下文配置路径-->
            <param-name>contextConfigLocation</param-name>
            <!--配置文件的位置和名称  classpath 表示类路径 就是java和resources-->
            <param-value>classpath:SpringMVC.xml</param-value>
        </init-param>
        <!--把前端控制器DispatcherServlet
        的初始化提前到启动服务器时,默认是在第一次访问时-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
        <!-- / 表示的是除了.jsp请求外的所有请求-->
    </servlet-mapping>
</web-app>

初始化参数,是要在init方法中完成,那么servlet的创建是在第一次访问的时候创建,所以初始化参数会在第一次访问时加载

但是初始化参数的操作如果过多,那么影响的就是客户体验。所以一般都会提前创建servlet。使用标签在服务器启动的时候就加载,那么耗时操作就是在服务器开启。

![]](https://img-blog.csdnimg.cn/eca37e86d6c94eb1a8e46da5f5e98c1c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAYmVnaW5uZXJEWg==,size_20,color_FFFFFF,t_70,g_se,x_16)

注解+扫描 使用IOC (可以用xml配置文件也可以用配置类,这里是xml配置)

@Controller
public class HelloController {

}

springMVC.xml:

<context:component-scan base-package="com.donggei.mvc.controller"></context:component-scan>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VQzrDVD9-1648534141840)(D:\学习\截图\image-20220321150909487.png)]

这个图标表示 当前对象已经交给IOC啦

然后配置Thymeleaf视图解析器 它负责页面跳转

<context:component-scan base-package="com.donggei.mvc.controller"></context:component-scan>

<!-- 配置Thymeleaf视图解析器 -->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
    <property name="order" value="1"/>
    <property name="characterEncoding" value="UTF-8"/>
    <property name="templateEngine">
        <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
            <property name="templateResolver">
                <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">

                    <!-- 视图前缀 -->
                    <property name="prefix" value="/WEB-INF/templates/"/>

                    <!-- 视图后缀 -->
                    <property name="suffix" value=".html"/>
                    <property name="templateMode" value="HTML5"/>
                    <property name="characterEncoding" value="UTF-8" />
                </bean>
            </property>
        </bean>
    </property>
</bean>

在对应目录下写一个index.html

写HelloController

@Controller
public class HelloController {

    // "/" -->/WEB- INF/templates/index.html
    //请求映射的注解
    @RequestMapping("/")
    public String index() {
    // 返回的是最后要跳转的页面  也就是视图名称(视图名称: 去掉前后缀)
        return "index"; //相当于请求跳转,因为重定向不能访问到web-inf目录

    }
}

浏览器访问=》转到分发器=》读取配置文件=》组件扫描到对应控制器=》RequestMapping映射

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值