Spring MVC温故而知新系列教程之从零开始

网友投稿 226 2023-02-04


Spring MVC温故而知新系列教程之从零开始

Spring MVC简介

Spring MVC是一款基于MVC架构模式的轻量级Web框架,目的是将Web开发模块化,对整体架构进行解耦。

Spring MVC有一下优点:

作为Spring框架的一部分,拥有Spring的优点(IOC,AOP等)

支持灵活的URL到页面控制器的映射

提供灵活的数据验证、格式化、数据绑定机制

支持RESTful风格

Spring MVC请求流程

Spring MVC框架的整体请求流程如下:

上图中涉及到Spring MVC的几个功能组件:

前端控制器(DispatcherServlet):接收用户请求并返回请求结果。它的作用相当于一个转发器或中央处理器,控制整个执行流程,对各组件进行调度降低组件之间的耦合。

处理器映射器(HandlerMapping):根据用户请求的URL,通过注解或者XML配置,查找相应的处理器Handler

处理器适配(HandlerAdapter):根据映射器查找出的Handler,完成调用处理器中的方法

处理器(Handler):请求处理的具体逻辑,返回数据和视图信息

视图解析器(View Resolver):解析具体视图,通过ModelAndView对象中的View信息,将逻辑视图名解析成真正的视图View

请求流程具体步骤详解:

1:用户发起请求,请求会被前端控制器(DispatcherServlet)拦截

2:前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)查找Handler

3:处理器映射器(HandlerMapping)根据配置找到相应Handler(可以更具注解或者XML配置),可能包含多个Interceptor拦截器,返回给前端控制器

4:前端控制器(DispatcherServlet)请求处理器适配器(HandlerAdapter)去执行相应的Handler

5:适配器交由对应Handler处理器执行

6: Handler处理器执行完成后返回ModelAndView对象给处理器适配器

7:处理器适配器接受Handler处理器的返回结果,并将该结果返回给前端控制器(DispatcherServlet)

8:前端控制器(DispatcherServlet)接收处理器适配器返回的数据和视图信息,请求视图解析器,解析对应的视图

9:视图解析器根据View信息匹配的相应的视图结果,反回给前端控制器

10:前端控制器接收具体视图,进行视图渲染,将Model数据填充到View视图中,生成最终视图

11:前端控制器向用户返回结果

从零开始搭建demo

创建工程:

Eclipse下新建一个动态Web项目

工程默认目录结构:

添加jar包依赖

WebContent > WEB-INF > lib 文件夹下导入相应的jar包,其中核心的jar包是spring-webmvc-5.0.0.RELEASE.jar,其他是几个主要是spring用于管理上下文和beande 包、jstl标签库和一个用于打印日志的log包:

在web.xml中配置前端控制器

前端控制器相当于Spring MVC的专有servlet,用于拦截所有符合条件的请求,交由框架做后续处理

xmlns="http://xmlns.jcp.org/xml/ns/javaee"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

id="WebApp_ID"

version="3.1">

springMvcNext

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:applicationContext.xml

springMvcNext

/

添加控制器Controller与视图View

Src目录下添加包com.sl.controller,添加控制器代码如下:

package com.sl.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;

@Controller

public class HelloWorldController {

@RequestMapping("/index") //处理URL路径中以/index开头的所有请求: 包括 /index/* 和 /index.html

public ModelAndView helloWorld() {

String message = "Hello Spring MVC";

return new ModelAndView("index", "message", message);

}

}

在WEB-INF/view中添加视图文件index.jsp

xmlns="http://xmlns.jcp.org/xml/ns/javaee"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

id="WebApp_ID"

version="3.1">

springMvcNext

org.springframework.web.servlet.DispatcherServlet

contextConfigLocation

classpath:applicationContext.xml

springMvcNext

/

添加控制器Controller与视图View

Src目录下添加包com.sl.controller,添加控制器代码如下:

package com.sl.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;

@Controller

public class HelloWorldController {

@RequestMapping("/index") //处理URL路径中以/index开头的所有请求: 包括 /index/* 和 /index.html

public ModelAndView helloWorld() {

String message = "Hello Spring MVC";

return new ModelAndView("index", "message", message);

}

}

在WEB-INF/view中添加视图文件index.jsp

${message}

运行结果:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java线程状态转换详解(在java线程状态转换时)
下一篇:Vue数据双向绑定原理及简单实现方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~