Spring MVC温故而知新 – 从零开始

Spring MVC简介

Spring MVC是一款基于MVC架构模式的轻量级Web框架,目的是将Web开发模块化,对整体架构进行解耦。

Spring MVC有一下优点:

作为Spring框架的一部分,拥有Spring的优点(IOC,AOP等)

支持灵活的URL到页面控制器的映射

提供灵活的数据验证、格式化、数据绑定机制

支持RESTful风格

  Spring MVC请求流程

Spring MVC框架的整体请求流程如下:

 

上图中涉及到Spring MVC的几个功能组件:

前端控制器(DispatcherServlet):接收用户请求并返回请求结果。它的作用相当于一个转发器或中央处理器,控制整个执行流程,对各逐渐进行调度降低组件之间的耦合。

处理器映射器(HandlerMapping):根据用户请求的URL,通过注解或者XML配置,查找相应的处理器Handler

处理器适配(HandlerAdapter):根据映射器查找出的Handler,完成调用处理器中的方法

处理器(Handler):请求处理的具体逻辑,返回数据和视图信息

视图解析器(View Resolver):解析具体视图,通过ModelAndView对象中的View信息,将逻辑视图名解析成真正的视图View

 请求流程具体步骤详解:

1:用户发起请求,请求会被前端控制器(DispatcherServlet)拦截

2:前端控制器(DispatcherServlet)请求处理器映射器(HandlerMapping)查找Handler

3:处理器映射器(HandlerMapping)根据配置找到相应Handler(可以更具注解或者XML配置),可能包含多个Interceptor拦截器,返回给前端控制器

4:前端控制器(DispatcherServlet)请求处理器适配器(HandlerAdapter)去执行相应的Handler

5:适配器交由对应Handler处理器执行

6:  Handler处理器执行完成后返回ModelAndView对象给处理器适配器

7:处理器适配器接受Handler处理器的返回结果,并将该结果返回给前端控制器(DispatcherServlet)

8:前端控制器(DispatcherServlet)接收处理器适配器返回的数据和视图信息,请求视图解析器,解析对应的视图

9:视图解析器根据View信息匹配的相应的视图结果,反回给前端控制器

10:前端控制器接收具体视图,进行视图渲染,将Model数据填充到View视图中,生成最终视图

11:前端控制器向用户返回结果

  从零开始搭建demo

  创建工程:

Eclipse下新建一个动态Web项目

工程默认目录结构:

 

 

  添加jar包依赖

WebContent > WEB-INF > lib 文件夹下导入相应的jar包,其中核心的jar包是spring-webmvc-5.0.0.RELEASE.jar,其他是几个主要是spring用于管理上下文和beande 包、jstl标签库和一个用于打印日志的log包:

  在web.xml中配置前端控制器

 前端控制器相当于Spring MVC的专有servlet,用于拦截所有符合条件的请求,交由框架做后续处理

 

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
        id="WebApp_ID" 
        version="3.1">
        
  <!-- 配置前端控制器-DispatchServlet  -->
  <servlet>
  <servlet-name>springMvcNext</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

  <!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" -->
  <init-param>
          <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
  </init-param>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>springMvcNext</servlet-name>
  <url-pattern>/</url-pattern> <!--根据url-pattern设定的规则拦截用户发来的请求 此处拦截所有请求,包括静态资源 ->
  </servlet-mapping>
 
</web-app>
复制代码

其中<servlet-mapping>标签中定义url匹配规则为符合*.action的形式,对应的servlet名为springMvcNext,而<servlet>配置的控制器为org.springframework.web.servlet.DispatchServlet,该控制器为当前SpringMVC项目的前端控制器,<init-param>标签为当前控制器依赖的参数,两个参数分别代表上下文参数和参数加载路径。

关于classpath:代表web项目编译后编译后的输出路径

配置spring MVC配置

在java源代码更目录下添加applicationContext.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:p="http://www.springframework.org/schema/p"
    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/security http://www.springframework.org/schema/security/spring-security.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 包扫描器  标签将用于激活Spring MVC注释扫描功能,允许使用@Controller和@RequestMapping等注释。-->
    <context:component-scan base-package="com.sl.controller" />
    
    <!-- 注解驱动 -->
    <mvc:annotation-driven />
    
    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"  id="internalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>
复制代码
  添加控制器Controller与视图View

  

Src目录下添加包com.sl.controller,添加控制器代码如下:

复制代码
package com.sl.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloWorldController {
    
    @RequestMapping("/index")  //处理URL路径中以/index开头的所有请求: 包括 /index/* 和 /index.html
    public ModelAndView helloWorld() {

        String message = "Hello Spring MVC";
        return new ModelAndView("index", "message", message);
    }
}
复制代码

在WEB-INF/view中添加视图文件index.jsp

复制代码
<html>
<head>
    <title>Spring MVC </title>
</head>
<body>
    ${message}
</body>
</html>
复制代码

运行结果:

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 1 University students can understand innovation through learning from the past. 2. Students can better review by breaking down complex concepts into smaller components and studying the material in an organized way. 3. When learning from the past to understand innovation, it is important to focus on understanding the big picture and to not get bogged down in the details. ### 回答2: 1. 大学生如何理解故而故而是一种学习方法,它要求我们在学习识之前先回顾和巩固已经学过的识。大学生理解故而意味着要在学习识之前,先回顾和复习以前学过的相关识或基础识。通过故,我们能够加深对已有识的理解和记忆,从而更好地理解和掌握识。 2. 学生如何更好地去复习? 学生要更好地复习,可以采取以下策略: 首先,制定一个合理的复习计划,将要复习的内容分配到不同的时间段,确保每个科目都有足够的时间。 其次,采用多种复习方法,如阅读教材、做练习题、参加讨论等,以帮助加深理解和牢固记忆。 另外,与同学或老师一起讨论复习内容,通过讲解和互动来加深理解。 此外,保持良好的学习习惯,比如及时复习、做好笔记等,能够帮助学生更好地掌握和复习识。 3. 故而的过程需要注意什么? 在故而的过程中,需要注意以下几点: 首先,要有针对性,根据自己的学习需求和复习目标,选择性地回顾和复习相关识点。 其次,要有系统性,将复习内容进行分类整理,形成一个清晰的识框架,有助于加深理解和记忆。 另外,要关注重难点,重点复习那些相对较难或容易遗忘的识点,加强对这些内容的学习和理解。 还要有耐心和恒心,故而是一个持续的过程,需要长期坚持和不断巩固。 最后,要善于总结和归纳,通过整理和回顾复习过程中的笔记和练习,提炼出关键概念和思维模式,便于记忆和应用。 ### 回答3: 1. 大学生如何理解故而? 大学生可以理解为通过回顾过去的识和经验,来获取的见解和理解。故是指回顾已经学过的识,了解其中的原理、概念和重要点。而则是指通过对识的学习,扩展和更自己的识体系。故而相辅相成,是一个持续学习和发展的过程。 2. 学生如何更好地去复习? 学生可以通过以下方式更好地进行复习: - 制定合理的复习计划:根据时间安排和课程难度,合理分配复习时间,确保每个学科都有足够的复习时间。 - 多种复习方法结合:采用不同的学习方式,如阅读教材、做练习题、参与讨论、制作思维导图等,帮助巩固记忆和理解识。 - 主动参与课堂:积极参与讨论和提问,与同学和老师交流,加深对识的理解和记忆。 - 不断反思和总结:及时检查自己的复习情况,发现不足和问题,并及时调整学习方法和计划。 3. 故而的过程需要注意什么? 在故而的过程中,学生需要注意以下几点: - 有目的性地故:针对具体的识点或者问题进行回顾,明确自己的学习目标和重点。 - 理解和记忆结合:不仅要理解概念和原理,还要通过多次的复习和记忆,帮助信息在大脑中形成长期记忆。 - 理论联系实际:将学到的识应用到实际情境中,加深对识的理解和记忆。 - 及时巩固复习成果:通过做练习题、整理笔记、与同学讨论等方式,巩固复习的成果,确保识掌握得更牢固。 - 长期持续学习:故而是一个持续的过程,要保持学习的热情和动力,不断更自己的识体系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java程序员-张凯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值