SpringMVC原理分析 | Hello程序

这篇具有很好参考价值的文章主要介绍了SpringMVC原理分析 | Hello程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringMVC原理分析 | Hello程序

💗wei_shuo的个人主页

💫wei_shuo的学习社区

🌐Hello World !


SpringMVC

Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet; 拥有结构最清晰的 Servlet+JSP+JavaBean 的实现,是一个典型的教科书式的 MVC 构架;Spring MVC 框架采用松耦合可插拔的组件结构,具有高度可配置性,比起其它 MVC 框架更具有扩展性和灵活性

流程:

Spring MVC 框架中,Controller 替换 Servlet 来担负控制器的职责,用于接收请求,调用相应的 Model 进行处理,处理器完成业务处理后返回处理结果,Controller 调用相应的 View 并对处理结果进行视图渲染,最终客户端得到响应信息

特点:

  • 轻量级,简单易学
  • 高效,基于请求响应的MVC框架
  • 同Spring兼容性好,无缝结合
  • 约定大于配置
  • 功能强大:RESTful、数据验证、格式化、本地化、主题……
  • 简介灵活

MVC模式

M(模型);实体类,数据的封装和数据的传输
V (视图):GUI组件,用于数据的展示
C (控制):事件,用于流程的控制

  • Model(模型):dao、service
  • View(视图):jsp
  • Controller(控制器):servlet

环境搭建

  • 导入依赖
<?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>org.example</groupId>
    <artifactId>SpringMVC_Projects</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>SpringMVC-01-servlet</module>
    </modules>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>


    <!--导入依赖-->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
</project>
  • 新建一个web项目

  • 导入相关jar包

  • 编写web.xml , 注册DispatcherServlet

  • 编写springmvc配置文件

  • 接下来就是去创建对应的控制类 , controller

  • 最后完善前端视图和controller之间的对应

  • 测试运行调试

SpringMVC中心控制器

1.当发起请求被前端控制器(DispatcherServlet)拦截到请求,通过servlet-mapping匹配拦截

2.根据请求参数生成代理请求,找到请求对应的处理器控制器(Controller)

3.创建数据模型,访问数据库

4.返回模型数据到页面处理器控制器(Controller)

5.返回ModelAndView,Model(封装数据)View(跳转到目标),将模型响应给中心控制器(DispatcherServlet)

6.中心控制器(DispatcherServlet)使用模型与视图渲染结果

7.渲染完成将结果返回给中心控制器(DispatcherServlet)

8.中心控制器(DispatcherServlet)再将结果响应给请求者

SpringMVC原理分析 | Hello程序

DispatcherServlet是前端控制器,Spring的web框架围绕DispatcherServlet设计,DispatcherServlet是整个SpringMVC的控制中心;DispatcherServlet的作用是将请求分发到不同的处理器;用户发出请求,DispatcherServlet接受请求拦截请求

Springmvc中 / 和 /* 的区别

/ :只匹配所有请求,不会匹配jsp页面
/* :匹配所有请求,包括jsp页面

配置版Hello SpringMVC

  • 新建Moudle,添加web支持
  • 确定导入springmvc依赖
  • 配置web.xml,注册DispatcherServlet
<?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">


    <!--配置DispatcherServlet:这个是SpringMVC的核心:请求分发器,前端控制器-->
    <!--
    Springmvc中  / 和 /*的 区别
    /:只匹配所有请求,不会匹配jsp页面
    /*:匹配所有请求,包括jsp页面
    -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--DispatcherServlet要绑定Spring的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--在所有包中查找Spring配置文件-->
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!--启动级别:1,跟随服务器启动-->
        <load-on-startup>1</load-on-startup>

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

</web-app>
  • 编写springmvc-servlet.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--处理器映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!--处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!--视图解析器:模板引擎Thymeleaf,Freemarker……-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>


    <!--BeanNameUrlHandlerMapping:bean-->
    <bean id="/hello" class="com.wei.controller.HelloController"/>

</beans>
  • 创建对应的控制类HelloController类
package com.wei.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

        ModelAndView mv = new ModelAndView();

        //业务代码
        String result = "HelloSpringMVC";

        mv.addObject("msg",result);

        //视图跳转
        mv.setViewName("test");


        return mv;
    }
}
  • 完善前端视图和HelloController之间的对应,在WEB-INF/jsp目录下创建test.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

SpringMVC原理分析

SpringMVC原理分析 | Hello程序

三大核心要素:

  • 处理器映射器(HandlerMapping)
  • 处理器适配器(HandlerAdapter)
  • 视图解析器(ViewResolver)

1.DispatcherServlet表示前端控制器,是整个SpringMVC的控制中心,用户发出请求,DispatcherServlet接受请求并拦截请求

假设请求url为:http://localhost:8080/SpringMVC/hello

  • http://localhost:8080 服务器域名
  • SpringMVC 部署在服务器上的web站点
  • hello 控制器
  • url表示为:请求位于服务器http://localhost:8080上的SpringMVC站点的hello控制器

2.HandlerMapping为处理器映射器,DispatcherServlet调用HandlerMapping;HandlerMapping根据请求url查找Handler

3.HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为hello

4.HandlerExecution将解析后的信息传递给DispatcherServlet,解析控制器映射……

5.HandlerAdapte表示处理器适配器,其按照特殊的规则去执行Handler

6.Handler让具体的Controller执行

7.Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView

8.HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet

9.DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图

10.视图解析器将逻辑视图传递给DispatcherServlet

11.DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图

12.最终将视图呈现给用户

代码实现

  • 新建Moudle,添加web支持
  • 确定导入SpringMVC依赖
  • 配置web.xml,注册DispatcherServlet(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">


    <!--配置DispatcherServlet:这个是SpringMVC的核心:请求分发器,前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--DispatcherServlet要绑定Spring的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--在所有包中查找、绑定的Spring配置文件-->
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <!--启动级别:1,跟随服务器启动-->
        <load-on-startup>1</load-on-startup>

    </servlet>
    <!--
    Springmvc中  / 和 /*的 区别
    /:只匹配所有请求,不会匹配jsp页面
    /*:匹配所有请求,包括jsp页面
    -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
  • 编写绑定Spring配置文件(springmvc-servlet.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--处理器映射器-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <!--处理器适配器-->
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

    <!--
    视图解析器:DispatcherServlet给的ModelAndView
    1.获取ModelAndView数据
    2.解析ModelAndView视图名字
    3.拼接视图找到对应的视图  /WEB-INF/jsp/test.jsp
    4.将数据渲染到视图

    -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>


    <!--BeanNameUrlHandlerMapping:bean-->
    <bean id="/hello" class="com.wei.controller.HelloController"/>

</beans>
  • 编写Controller控制器(HelloController)
package com.wei.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {

        ModelAndView mv = new ModelAndView();

        //业务代码
        String result = "HelloSpringMVC";

        mv.addObject("msg",result);

        //视图跳转
        mv.setViewName("test");


        return mv;
    }
}
  • 创建跳转的视图(test.jsp)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

注解版Hello SpringMVC

  • 配置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">

    <!--注册servlet-->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--通过初始化参数指定springmvc配置文件的位置,进行关联-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--所有请求都会被springmvc拦截-->
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>
  • springmvc-servlet.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:aop="http://www.springframework.org/schema/aop"
       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/aop https://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--自动扫描包,让指定包下的注释生效,由IOC容器统一管理-->
    <context:component-scan base-package="com.wei.controller"/>

    <!--让springmvc不处理静态资源(.css .js .html .mp3 ……类似静态资源),默认资源过滤-->
    <mvc:default-servlet-handler/>

    <!--
    支持mvc注解驱动
    spring中采用@RequestMapping注解完成映射关系
    使@RequestMapping注解生效,必须向上下文中注册HandlerMapping和HandlerAdapter实例
    而annotation-driven配置帮助我们自动完成上述实例的注入
    -->
    <mvc:annotation-driven/>

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
  • 编写控制器HelloController
package com.wei.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {

    @RequestMapping("/h1")
    public String hello(Model model){
        //封装数据,向模型添加属性msg与值,可以在jsp页面取出、渲染
        model.addAttribute("msg","Hello,SpringMVC");

        //返回视图,会被视图解析器处理
        return "hello";
    }
}
  • 编写视图hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

🌼 结语:创作不易,如果觉得博主的文章赏心悦目,还请——点赞👍收藏⭐️评论📝


SpringMVC原理分析 | Hello程序文章来源地址https://www.toymoban.com/news/detail-477900.html

到了这里,关于SpringMVC原理分析 | Hello程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【编译原理实验】 -- 词法分析程序设计原理与实现(C语言实现)

    目录 目标任务 设计要求 一、程序功能描述 二、正则文法 三、程序结构描述 四、代码  五、程序测试  测试用例1 测试结果1 测试用例2 测试结果2 以下为正则文法所描述的 C 语言子集单词符号的示例,请补充单词符号:++,--, , , += , -= ,*=, /= ,(逻辑与),||(逻辑或),

    2024年02月02日
    浏览(111)
  • 【SpringMVC】| SpringMVC执行流程原理 | 常用注解 剥析

    MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分: Model (模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中,JavaBean对象,业务模型等都属于Model。 View (视图):用于展示模型中的数据的

    2024年02月06日
    浏览(53)
  • 【编译原理】词法分析程序设计(C语言)

      给定下表所示的一个简单语言的词法规则描述完成以下任务: (1)画出识别该语言词法规则的 状态转换图 ; (2)依据状态转换图,设计并编制词法分析程序,实现从输入源程序中,识别出各类单词,即 、标识符、常数、运算符、界符 五大类,并输出各个单词

    2024年02月15日
    浏览(66)
  • 关于 TLS Client_Hello 版本的问题分析

    关于 TLS Client_Hello 版本的问题分析 一、 报文结构 如上图,TLS 数据结构由Content Type 、Version、 Length、fragment四部分构成,Version在 Record Layer 和Handshake Protocol中均有出现。 RFC 5246 6.2.1 定义的数据结构 Record Layer中的version定义如下: RFC 5246 6.2.1 record layer Version的描述 Record Layer 中

    2024年02月03日
    浏览(40)
  • Jacobi迭代法的matlab程序(《数值分析原理》)

    Jacobi迭代法是常见的几种迭代法之一,迭代格式如下图所示:(图片来自CHD的ztl老师的PPT)(具体内容详见《数值分析原理》) 该例子使用matlab的命令文件格式,命名为jacobi.m。 举例:设有方程组 取初始向量为x (0)=(-3,1,1) (T),用Jacobi方法求解,要求||x (k+1)-x (k)||小于等于10…

    2023年04月08日
    浏览(40)
  • Android app加壳原理分析及壳程序编写

    Android应用程序加壳是一种保护机制,通过在原始APK文件的外部添加额外的层(壳),使得攻击者更难分析、修改或破解应用程序。这些壳通常包含一些技术手段,旨在防御逆向工程和破解行为。以下是一些常见的Android应用程序加壳原理: 代码加密/混淆: 使用加密算法对D

    2024年01月18日
    浏览(42)
  • SpringMVC实现原理及详解

    在介绍什么是 SpringMVC 之前,我们先看看 Spring 的基本架构。如下图: 我们可以看到,在 Spring 的基本架构中,红色圈起来的 Spring Web MVC ,也就是本系列的主角 SpringMVC,它是属于Spring基本架构里面的一个组成部分,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面,所

    2024年01月19日
    浏览(35)
  • SpringMVC组件原理剖析

    主要剖析DispatcherServlet(前端控制器 )初始化的过程,还有DispatcherServlet执行主流程 DispatcherServlet初始化做了两件事情 获得了一个 SpringMVC 的 ApplicationContext容器 注册了 SpringMVC的 九大组件 前端控制器DispatcherServlet是SpringMVC的入口,也是SpringMVC的大脑,主流程的工作都是在此完

    2024年02月08日
    浏览(38)
  • SpringMVC基本原理

    1.Model I开发模式 Model1的开发模式是:JSP+JavaBean的模式,它的核心是Jsp页面,在这个页面中,Jsp页面负责整合页面和JavaBean(业务逻辑),而且渲染页面,它的基本流程如下: 这样的设计模式到这一个jsp页面负责了视图的展示和业务流程的控制高度耦合的结果是Jsp代码十分复杂

    2024年03月15日
    浏览(32)
  • springMVC-原理及入门案例

    (1)springMVC是以spring为基础,因此在使用时,需要先将spring jar引入. (2)SpringMVC是MVC框架,工作在WEB层,替代Strts2.可以超越struts2框架. (3)SpringMVC相对于Struts2来说,更加简洁,是一个轻量级的框架,没有struts2框架重 (4)SpringMVC通过一套注解(对POJO类),可以快速的实现功能让

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包