SpringMVC运行流程与实例分析

SpringMVC运行流程

0.写在前面

本文采用教程为https://www.bilibili.com/video/av14907450/?p=56。我也跟着老师写完了他的所有例程,并且将其的Restful风格项目中的模拟数据库改成了实际数据库,利用JDBC。这方面的资源将在我整理之后上传Github或者百度云盘,供大家一同学习。
至于本文,以原视频中56P作为蓝本,结合实验现象以及我遇到的问题,进行一个综合性的回顾。

1.运行流程

在这里插入图片描述
流程1:请求提交至SpringDispatcherServlet的url-pattern。
实例:url-pattern为http://localhost:9090/hello,通过@RequestMapping(“hello”)对hello()方法进行映射。可以理解为,当浏览器接收到这个url后,dispatcher便会将请求交给hello()方法处理。
代码

@Controller
public class HelloWorld {
    @RequestMapping("/hello")
    public String hello(){
        System.out.println("success");
        return "success";
    }
}

代码中值得注意的是,两个注解,一个是@Controller,一个是@RequestMapping。
xml配置
dispatcher-servlet.xml

    <context:component-scan base-package="springmvc"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

web.xml

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

解释:包名为springmvc,容器需要扫描其中的注解,将有@Controller注解的类通过IOC生成对象并放入容器中,换而言之,一旦运行服务,实际上springmvc下的所有类都已经生成了实例。然后定义一个内部视图解析器,两个property分别规定了前缀和后缀,物理意义为工程的相对路径与文件后缀名。

实验效果
在这里插入图片描述
流程2:如果不存在相应映射,则通过配置<mvc:default-servlet-handler>可以寻找目标资源。
xml配置
dispatcher-servlet.xml

<mvc:default-servlet-handler/>

实验效果
在这里插入图片描述
但是这里有一个问题,你会发现,配置完<mvc:default-servlet-handler>之后,无法访问/hello了,怎么办呢?在xml中配置如下:

<mvc:annotation-driven/>

即可实现对静态资源和映射方法的访问。
**说句题外话,静态资源要放在web文件夹下,而不是WEB-INF文件夹下。 **

猜你喜欢

转载自blog.csdn.net/w8253497062015/article/details/86689853
今日推荐