• springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】


    springMVC的简介

    SpringMVC是Spring的一个后续产品,是Spring的一个子项目。

    SpringMVC 是 Spring 为表述层开发提供的一整套完备的解决方案。在表述层框架历经 Strust、WebWork、Strust2 等诸多产品的历代更迭之后,目前业界普遍选择了SpringMVC 作为 Java EE 项目表述层开发的首选方案。

    SpringMVC的特点:

    • Spring 家族原生产品,与 IOC 容器等基础设施无缝对接
    • 基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理
    • 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案
    • 代码清新简洁,大幅度提升开发效率
    • 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可
    • 性能卓著,尤其适合现代大型、超大型互联网项目要求

    springMVC的执行流程

    ​ Spring的web框架围绕DispatcherServlet设计。 DispatcherServlet的作用是将请求分发到不同的处理器。

    DispatcherServlet前置控制器,它是一个实际的Servlet (它继承自HttpServlet 基类)。

    这里用 狂神SSM教程的一张图来详细展开DispatcherServlet的执行流程(springMVC的执行流程)。
    在这里插入图片描述
    当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

    第一个springMVC项目(XML配置版本)

    1.创建项目

    1.1 新建maven项目:

    file–>new—>project,选择maven,next即可
    在这里插入图片描述
    在这里插入图片描述

    1.2 添加web支持

    右键项目名,然后选择add framework support
    在这里插入图片描述
    接着在弹出的框中勾选,然后ok即可
    在这里插入图片描述

    1.3 在pom.xml中导入依赖

    	
    	<dependency>
    		<groupId>org.springframeworkgroupId>
    		<artifactId>spring-webmvcartifactId>
    		<version>5.3.1version>
    	dependency>
    	
    	<dependency>
    		<groupId>ch.qos.logbackgroupId>
    		<artifactId>logback-classicartifactId>
    		<version>1.2.3version>
    	dependency>
    	
    	<dependency>
    		<groupId>javax.servletgroupId>
    		<artifactId>javax.servlet-apiartifactId>
    		<version>3.1.0version>
    		<scope>providedscope>
    	dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    1.4 配置tomcat

    在这里插入图片描述
    点击edit configutations配置本地的tomcat服务器
    在这里插入图片描述
    点击添加,然后找到local tomcat
    在这里插入图片描述
    默认端口号为8080,如果有相同的抢占端口号,可以进行修改(我修改为了8084)
    在这里插入图片描述
    添点击deployment然后添加,ok即可
    在这里插入图片描述
    为web项目添加lib导入项目相关jar包:

    file–>project structue–>artifacts,创建lib目录,然后将项目所有的依赖jar包导入。(这里如果不导入的话,后面服务器启动会404)
    在这里插入图片描述
    好嘞项目准备结束,可以开始编写springMVC相关配置了!


    2.开始配置

    2.1 配置web.xml(核心)

    编写DispatcherServelt配置文件:

    	
        <servlet>
            <servlet-name>springmvcservlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
            <init-param>
             	
                <param-name>contextConfigLocationparam-name>
                <param-value>classpath:springmvc-servlet.xmlparam-value>
            init-param>
            
            <load-on-startup>1load-on-startup>
        servlet>
    
        <servlet-mapping>
            <servlet-name>springmvcservlet-name>
            <url-pattern>/url-pattern>
        servlet-mapping>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2.2 controler层编写

    第一个例子~~~helloWorld

    package com.gothic.sunset;
    
    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 modelAndView = new ModelAndView();
            String str = "HelloWorld!";
            //这里和之前的session request基本一样
            modelAndView.addObject("msg",str);
            //页面跳转  hello即为视图名
            // 被视图解析器后,会加上对应的前缀及后缀  /WEB-INF/jsp/hello.jsp 然后访问web项目的对应路径
            modelAndView.setViewName("hello");
            return modelAndView;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    2.3创建对应视图层hello.jsp

    在WEB-INF下新建一个包jsp,然后新建hello.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        嗯哼
    
    
        ${msg}
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.4编写spring配置文件(核心)

    在resources目录下面新建一个spirngmvc-servlet.xml文件。(根据之前的springMVC执行流程思考一下。)

    配置处理映射器,处理适配器,以及视图解析器:

     	
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    
        
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
        
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
            
            <property name="prefix" value="/WEB-INF/jsp/"/>
            
            <property name="suffix" value=".jsp"/>
        bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    (这里因为这个例子都是根据xml配置来写的,所以需要手动配置)编写helloContorler的Bean:

    	<bean id="/hello" class="com.gothic.sunset.HelloController"/>
    
    • 1

    3.运行测试

    在导航栏后面手动添加hello,正确显示!
    在这里插入图片描述


    分析执行流程

    重点理解springMVC的执行流程(底层机制)(以下内容来自链接: 狂神SSM教程笔记总结

    简要分析执行流程:

    DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
    我们假设请求的url为 : http://localhost:8084/SpringMVC/hello

    如上url拆分成三部分:

    • http://localhost:8084服务器域名
    • SpringMVC部署在服务器上的web站点
    • hello表示控制器

    通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。

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

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

    3. HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。

    4. HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。

    5. Handler让具体的Controller执行。

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

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

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

    9. 视图解析器将解析的逻辑视图名传给DispatcherServlet。

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

    11. 最终视图呈现给用户。


  • 相关阅读:
    Guava Cache介绍-面试用
    【前端】Layui小功能收集整理
    VSCode导出markdown为网页时带有目录
    boost之实用工具
    Django配合python进行requests请求
    docker方式安装单节点MongoDB(4.0.9)
    工厂需要什么样的现场管理能力?
    DNS域名解析
    卡尔曼滤波公式理解
    探索 ArrayList 原理 - 目录结构
  • 原文地址:https://blog.csdn.net/m0_63622279/article/details/128127302