基于Spring MVC的作业管理系统启动流程分析

简介: 本文针对基于Spring MVC的作业管理系统分析其启动流程,包括serlvet注册、IoC容器创建、bean初始化、MVC的流程。

简介


本文针对基于Spring MVC的作业管理系统分析其启动流程,包括serlvet注册、IoC容器创建、bean初始化、MVC的流程。


流程分析


1.servlet注册


1.1 web.xml文件


在为原来的项目添加Spring MVC框架支持或者使用Spring MVC新建项目以后,我们可以看到在web目录下的WEB-INF文件夹下可以看到生成了web.xml文件。该文件下有如下配置用于设置servlet:


<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>


其中init-param标签指定了servlet配置文件的路径,该项目中配置文件为resources目录下的dispatcher-servlet.xml文件。

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


另外通过servlet-mapping标签下的url-pattern标签可以指定url的格式。


1.2 dispatcher-servlet.xml文件

<context:component-scan base-package="org.example.javaee.class01.controller"/>


配置文件中的以上一行代码指定了controller文件夹的路径,controller即为MVC中的C的部分。

<!--指定视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 视图的路径,value值根据你命名的文件夹一致 -->
        <property name="prefix" value="/jsp/"/>
        <!-- 视图名称后缀  -->
        <property name="suffix" value=".jsp"/>
</bean>


该部分代码配置了视图解析器的使用以及jsp文件的路径与后缀。


1.3 controller


controller文件夹下有一个HMSController.java。所有servlet的执行函数均位于该文件下。

@Controller
@RequestMapping("/hms")


类之前的两个注解分别指定了该类为一个controller类以及url的之前的一部分。

@RequestMapping("/addHk")
public String addHk() {
    return "addHomework";
}


方法前都有一个注解,访问对应注解的url就会执行该函数,如以上接口表示访问https://localhost:8080/hms/addHk这个url即可访问jsp目录下的addHomework.jsp,jsp文件的前缀和后缀已经在servlet配置文件中设定好了。


2.IoC容器创建与bean的初始化


Spring IOC容器是框架的核心,IOC是控制反转的意思,可以用来降低程序代码之间的耦合度。把强耦合的代码依赖从代码中移出去,放到统一的XML配置文件中,将程序对组件的主要控制权交给IOC,由IOC统一加载和管理。bean共有以下三种方式定义


2.1 基于XML的配置


web.xml下指定了定义bean的xml文件位置:

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
</context-param>


在applicationContext.xml文件下进行了bean的定义:

<?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 id="Homework" class="org.example.javaee.class01.model.Homework" scope="prototype"></bean>
    <bean id="Student" class="org.example.javaee.class01.model.Student" scope="prototype"></bean>
    <bean id="StudentHomework" class="org.example.javaee.class01.model.StudentHomework" scope="prototype"></bean>
    <bean id="HomeworkJDBC" class="org.example.javaee.class01.jdbc.HomeworkJDBC"></bean>
</beans>


2.2 基于注解的配置


Spring提供了四个注解,这些注解的作用与上面的XML定义bean效果一致,在于将组件交给Spring容器管理。组件的名称默认是类名(首字母变小写),可以自己修改:


  • @Component:当对组件的层次难以定位的时候使用这个注解


  • @Controller:表示控制层的组件


  • @Service:表示业务逻辑层的组件


  • @Repository:表示数据访问层的组件


通过在类前添加注解可以实现bean的定义:


@Component
public class Homework {
    .....
}


HMSController类前添加注解扫描model文件夹:

@ComponentScan("org.example.javaee.class01.model.*")


使用AnnotationConfigApplicationContext来获取bean:

public AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(HMSController.class);


2.3 基于Java类的配置


步骤如下:


  1. 使用@Configuration注解需要作为配置的类,表示该类将定义Bean的元数据。


  1. 使用@Bean注解相应的方法,该方法名默认就是Bean的名称,该方法返回值就是Bean的对象。


  1. AnnotationConfigApplicationContext或子类进行加载基于java类的配置。

@Configuration  
public class BeansConfiguration {  
    @Bean  
    public Student student(){  
        Student student=new Student();  
        return student;  
    }  
}

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeansConfiguration.class);  
Student student = (Student) context.getBean("student");


3.MVC的流程


该项目技术架构主要由javaBean组件、业务逻辑处理、实体、前端四部分组成,主要基于Spring MVC框架,其流程可由下图解释:


微信图片_20220531171945.png


                                                  Spring MVC流程


主要过程为:


  1. 用户发送请求至前端控制器DispatcherServlet。


  1. DispatcherServlet收到请求调用HandlerMapping处理器映射器。


  1. 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。


  1. DispatcherServlet调用HandlerAdapter处理器适配器。


  1. HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。


  1. Controller执行完成返回ModelAndView。


  1. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。


  1. DispatcherServlet将ModelAndView传给ViewReslover视图解析器。


  1. ViewReslover解析后返回具体View。


  1. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。


  1. DispatcherServlet响应用户。



相关文章
|
2月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
2月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
529 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
2月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
60 2
|
2月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
206 2
|
2月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
158 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
3月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
140 5
|
3月前
|
消息中间件 设计模式 缓存
spring源码设计模式分析(四)-观察者模式
spring源码设计模式分析(四)-观察者模式
|
3月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
3月前
|
XML 存储 Java
Spring-源码深入分析(二)
Spring-源码深入分析(二)
|
3月前
|
XML 设计模式 Java
Spring-源码深入分析(一)
Spring-源码深入分析(一)