SpringMVC框架——原理及使用
- 核心组件
1、 DispatcherServlet:前端控制器器,负责调度其他组件的执行,可降低不同组件之间的耦合性,是Spring MVC 的核心模块。
2、 Handler:处理器,完成具体的业务逻辑。
3、 HandlerMapping: DispatcherServlet 是通过 HandlerMapping 将请求映射到不同的 Handler。
4、 HandlerInterceptor:处理器拦截器,是一个接口,如果需要完成一些拦截处理,可以实现该接口。
5、 HandlerExecutionChain:处理器执行链,包括两部分内容, Handler 和 HandlerInterceptor。
6、 HandlerAdapter:处理器适配器,它可以完成执行业务逻辑之前的一些预处理,数据类型转换、封装等, DispatcherServlet 通过 HandlerAdapter 调用不同的 Handler。
7、 ModelAndView:装载了模型数据和视图信息,作为 Hanlder 的处理结果,返回给DispatcherServlet。
8、 ViewResolver:视图解析器器, DispatcherServlet 通过它将逻辑视图转换成物理视图,最终将渲染结果响应给客户端。
- 工作流程
1、客户端请求被 DispatcherServlet 接收。
2、根据 HandlerMapping 映射到 Handler。
3、创建 Handler 和 HandlerInterceptor。
4、 Handler 和 HandlerInterceptor 以 HandlerExecutionChain 的形式一并返回给DispatcherServlet。
5、 DispatcherServlet 通过 HandlerAdapter 调⽤用 Handler 的方法完成业务逻辑处理理。
6、返回一个 ModelAndView 对象给 DispatcherServlet。
7、 DispatcherServlet 将获取的 ModelAndView 对象传给 ViewResolver ,将逻辑视图解析为物理视图View。
8、 ViewResolver 返回一个 View 给 DispatcherServlet。
9、 DispatcherServlet 根据 View 进⾏行行视图渲染(将模型数据填充到视图中)。
10、 DispatcherServlet 将渲染后的视图响应给客户端。
流程图
- 如何使用
1、使用IDEA新建项目
2、添加maven依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.7.RELEASE</version> </dependency> </dependencies>
3、收到创建java、resources文件夹--右键,Mark Directory as设置
4、在resources文件夹下,手动创建springmvc.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 http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> <!-- 配置自动扫描 --> <context:component-scan base-package="com.sunjian.demo"></context:component-scan> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
5、新建controller,编写HelloHandler
package com.sunjian.demo; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author sunjian * @date 2020/3/17 10:06 */ @Controller @RequestMapping(value = "/hello") public class HelloHandler { @RequestMapping(value = "/index") public String index(){ return "index"; } }
6、新建index.jsp页面
<html> <body> <h2>Hello World!</h2> </body> </html>
7、在web.xml中配置映射
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!--中文乱码处理--> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--映射--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
8、启动项目,访问http://localhost:8080/index
OK.
最新文章
- 网站上如何添加显示favicon
- UBUNTU 16.04 编译 OPENJDK8
- VB.net 2010下关联与程序图标设置
- 第一章-第七题( 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么? )--By 侯伟婷
- node-webkit 桌面开发 初入1
- 【USACO】第一章总结
- msm8916 lcd 相关调试点指导
- 用英文加优先级来解读C的声明
- 【mysql】【分组】后取每组的top2
- Error copying image in the datastore: Not allowed to copy image file
- iOS开发之CALayer
- group by和count联合使用问题
- 用代理IP进行简单的爬虫——爬高匿代理网站
- C# winform程序怎么打包成安装项目(VS2010图解)
- timeout 命令
- jmeter(四)参数化之CSV Data Set Config 和 CSVRead函数的区别
- sublime插件之px转rem
- 常用的PostBuild Event 脚本
- 【MySQL8】 安装后的简单配置(主要解决navicat等客户端登陆报错问题)
- javascript js 完美解决 click 与 dblclick 冲突,并且不会导致click延迟