您的位置:首页 > 教程文章 > 编程开发

如何理解SpringMVC

:0 :2021-10-19 22:15:26

目录
一、SpringMVC简介
二、SpringMVC核心组件
2.1、DispatcherServlet
2.2、HandlerMapping
2.3、HandlerInterceptor
2.4、HandlerExecutionChain
2.5、HandlerAdapter
2.6、Handler
2.7、ModelAndView
2.8、ViewResolver
2.9、View
三、配置Maven环境变量
3.1、Maven介绍
3.2、Maven下载安装
3.2.1、Maven下载
3.2.2、配置环境变量
3.2.3、配置Maven配置文件(本地仓库路径、镜像)
3.2.4、用Maven创建项目
一、SpringMVC简介
MVC是我们开发WEB应用程序的通用架构方式
MVC的核心思想是业务数据抽取和业务数据呈现相分离。
MVC:M(Model)+V(View)+C(Controller)
M(模型层):业务数据的信息表示,通常是业务实体
V(视图层):为用户呈现数据的页面
C(控制层):调用业务逻辑产生合适的数据(Model),同时传递数据(Model)给视图层(View)呈现给用户
MVC:是一种架构模式,将业务逻辑和页面展示分离,使程序分层、分工合作,既相互独立,又协同合作。
二、SpringMVC核心组件
2.1、DispatcherServlet
前端控制器,核心
作用:接收请求,响应结果,相当于转发器,中央处理器,降低了组件之间的耦合性。
用户发送请求交给DispatcherServlet,DispatcherServlet是整个流程控制的中心,由它调用其他组件处理用户请求,分发到具体的对应Controller,从而获取到需要的业务数据Model,Model再通过DispatcherServlet传递给View完成页面呈现;DispatcherServlet的存在降低了组件的之间的耦合性。
2.2、HandlerMapping
处理器映射器
作用:根据请求的URL,找到对应的Handler,帮助DispatcherServlet找到对应的Controller
HandlerMapping负责根据用户请求找到Handler即处理器,SpringMVC提供了多种不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
2.3、HandlerInterceptor
Handler执行前后拦截器
HandlerInterceptor是个接口,里面包含三个方法:preHandle、postHandle、afterCompletion
分别在Handler执行前、执行中、执行完成后执行的三个方法
2.4、HandlerExecutionChain
HandlerMapping返回给DispatcherServlet的执行链
HandlerMapping返回给DispatcherServlet的不光有Handler,还有HandlerInterceptor
preHandle——>ControllerMethod——>postHandle——>afterCompletion
这个链如何实现的呢?使用了Java的反射机制reflection
2.5、HandlerAdapter
处理器适配器
作用:将各种Controller适配成DispatcherServlet可以使用的Handler,通过特定规则(HandlerAdapter要求的规则)去执行Handler
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
2.6、Handler
处理器(需要工程师开发)
注意:编写Handler时需要HandlerAdapter的要求去做,这样HandlerAdapter才可以正确执行Handler
Handler是继DispatcherServlet前端控制器的后台控制器,在DispatcherServlet控制下对用户请求进行处理,Handler涉及业务需求,所以需要工程师针对用户需求进行开发,最终返回业务数据
2.7、ModelAndView
SpringMVC中对Model的一种表示形式
SpringMVC中有Model、Map,但是SpringMVC都会将其转化为ModelAndView,Model、Map都是ModelAndView的具体表现
2.8、ViewResolver
视图解析器
作用:进行视图解析,根据逻辑视图名解析成真正的视图View
ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成具体的页面地址,然后对View进行渲染,将处理结果通过页面展示给用户;SpringMVC提供了很多类型View视图,包括:jstlView、freemarkerView、pdfView、jsp、html等。
2.9、View
视图(需要工程师开发jsp、html)
View是一个接口,实现类支持不同的类型(jsp、html、freemarker、pdf等)
三、配置Maven环境变量
3.1、Maven介绍
pom:pom.xml配置文件,通过配置完成依赖关系
DependencyManagement:通过<dependencies><dependency></dependency></dependencies>节点配置
3.2、Maven下载安装
3.2.1、Maven下载

3.2.2、配置环境变量
添加M2_HOME:指向Maven解压后文件夹所在根目录
编辑Path:添加%M2_HOME%bin;

3.2.3、配置Maven配置文件(本地仓库路径、镜像)
将Maven安装文件夹下conf文件夹中的settings.xml拷贝一份放在电脑home下的.m2文件夹中
对本地home下.m2中的settings.xml进行修改:
(1)可以修改本地仓库的存储位置(可选),默认存储在home下.m2文件夹中:
(2)可以修改中央仓库的访问路径,修改为英文的这个路径,可以加快访问速度,减小中央仓库压力:
3.2.4、用Maven创建项目
(1)首先用Eclipse集成Maven,推荐使用4.3(Kepler)及以上版本Eclipse,因为自己集成了Maven插件m2e
(2)配置Eclipse使用刚刚下载的Maven,以及刚刚配置的settings.xml配置文件:
    在eclipse中选择Window-Preferences,弹出以下窗口,然后点击Installations,在右侧点击Add添加按钮:
找到下载安装的Maven文件夹根目录,点击Finish:
勾选刚刚添加的maven,点击Apply,最后点击OK,配置完成:
(3)创建一个Maven项目:
Eclipse中左侧栏右键,选择New-Project
选择Maven Project,点击Next:
再次Next:
选择一个符合类型的,点击Next:
填写Group Id,Artifacted Id,Version,Package,点击Finish:
(4)修改pom.xml
<!-- 加入变量,替代我们用到的工程版本 -->
 <properties>
  <commons-lang-version>2.6</commons-lang-version>
  <slf4j-version>1.7.6</slf4j-version>
  <spring-version>4.1.3.RELEASE</spring-version>
 </properties>
 
 <!-- 配置依赖管理:让maven帮我们管理传递依赖 -->
 <dependencyManagement>
  <dependencies>
   <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-framework-bom</artifactId>
    <version>${spring.version}</version>
    <scope>import</scope>
   </dependency>
  </dependencies>
 </dependencyManagement>
 
 <!-- 配置这个项目所依赖的包 -->
 <dependencies>
   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>3.8.1</version>
     <scope>test</scope>
   </dependency>
  
   <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.1.3.RELEASE</version>
   </dependency>
  
   <dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
   </dependency>
  
   <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.6</version>
    <exclusions>
     <exclusion>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
     </exclusion>
    </exclusions>
   </dependency>
  
 </dependencies>
 
 <!-- 添加组件:jetty是为了方便测试运行 -->
 <build>
  <plugins>
   <plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.2.2.v20140723</version>
   </plugin>
  </plugins>
 </build>
如果当前包本地仓库,不存在,可以点击项目,右键,选择Maven-Add Dependency
填写Group Id, Artifacted Id, Version之后,点击OK,Maven就会自动从Maven仓库下载对应版本的jar包到本地仓库中:
(5)配置WEB应用,修改web.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="
    xmlns:xsi="
    xmlns:context="
    xmlns:mvc="
    xsi:schemaLocation="
    /spring-beans-3.0.xsd
     /spring-context-3.0.xsd
     /spring-mvc-3.0.xsd">
   
    <!-- 激活@Required @Autowired @Resource等标注 -->
    <context:annotation-config/>
   
    <!-- DispatcherServlet上下文,只搜索@Controller标注的类,不搜索其他标注的类 -->
    <context:component-scan base-package="com.ztl.springmvc.controller">
     <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <!-- 让DispatcherServlet启用基于Annotation的HandlerMapping -->
    <mvc:annotation-driven/>
   
    <!-- 将静态文件指定到某个特殊的文件夹中统一处理 -->
    <mvc:resources location="/resources/" mapping="/resources/**"/>
   
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
     <property name="prefix" value="/WEB-INF/jsp/"/>
     <property name="suffix" value=".jsp"/>
    </bean>
   
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
     <property name="exceptionMappings">
      <props>
       <prop key="com.ztl.springmvc.UserException">error</prop>
       <prop key="java.lang.NullPointException">exception</prop>
      </props>
     </property>
    </bean>
</beans>
(6)创建一个Controller,以及对应的页面,写个简单demo
写一个HelloMvcController类:
package com.ztl.springmvc.controller;
 
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
@RequestMapping("/hello")
public class HelloMvcController {
 @RequestMapping("/sayhello")
 public String sayHello(){
  return "home";
 } 
}
通过pom.xml中配置的jetty插件来进行启动测试:
使用cmd命令行,找到项目地址,然后找到当前这个模块项目:
当看见Started Jetty Server时,则代表启动完成了,可以在浏览器访问了
在浏览器地址栏输入
以上就是如何理解SpringMVC的详细内容,更多关于SpringMVC的资料请关注无名其它相关文章!

spring cloud zuul 与 sentinel的结合使用操作
java中的常用集合类整理

同类资源