Spring MVC 入门案例:从代码到原理的深度剖析

一、引言

Spring MVC 是一种基于 Java 的实现了 MVC 设计模式的请求驱动类型的轻量级 Web 框架,它为开发 Web 应用提供了强大而灵活的解决方案。本文将通过一个简单的 Spring MVC 入门案例,详细介绍其工作流程,帮助读者深入理解 Spring MVC 的运行机制。

二、环境准备

在开始编写代码之前,我们需要准备好开发环境。本案例使用 Maven 进行项目管理,因此需要在 pom.xml 中添加必要的依赖。以下是 pom.xml 的代码:


  4.0.0
  com.qcby
  01
  war
  1.0-SNAPSHOT
  01 Maven Webapp
  http://maven.apache.org
  
  
    5.3.23
    4.0.1
    2.3.3
    4.13.2
  

  
    
    
      org.springframework
      spring-context
      ${spring.version}
    
    
      org.springframework
      spring-web
      ${spring.version}
    
    
      org.springframework
      spring-webmvc
      ${spring.version}
    

    
    
      javax.servlet
      javax.servlet-api
      ${servlet.api.version}
      provided
    

    
    
      javax.servlet.jsp
      javax.servlet.jsp-api
      ${jsp.api.version}
      provided
    

    
    
      junit
      junit
      ${junit.version}
      test
    
  
  
    01
  

这些依赖包含了 Spring 框架、Servlet API、JSP API 以及测试所需的 JUnit 库。

三、配置文件编写

3.1 web.xml 配置

 web.xml 是 Web 应用的核心配置文件,主要用于配置 Servlet、过滤器等。以下是 web.xml 的代码:




  Spring MVC Application

  
  
    characterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
    
      forceEncoding
      true
    
  
  
    characterEncodingFilter
    /*
  

  
    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:springmvc.xml
    
    1
  

  
    dispatcherServlet
    *.do
  

 

  • 字符编码过滤器:用于设置请求和响应的字符编码为 UTF-8,避免中文乱码问题。
  • DispatcherServlet:Spring MVC 的核心 Servlet,负责接收所有的请求并进行分发处理。通过 contextConfigLocation 指定其配置文件为 springmvc.xml
  • Servlet 映射:将所有以 .do 结尾的请求映射到 DispatcherServlet

3.2 springmvc.xml 配置

springmvc.xml 是 Spring MVC 的配置文件,主要用于启用注解驱动、配置组件扫描和视图解析器。以下是 springmvc.xml 的代码:




    
    

    
    

    
    
        
        
    

 

  • 注解驱动:启用 Spring MVC 的注解功能,如 @Controller@RequestMapping 等。
  • 组件扫描:指定 Spring 容器扫描的包路径,自动发现并注册带有 @Controller 等注解的组件。
  • 视图解析器:用于将控制器返回的逻辑视图名解析为实际的 JSP 页面路径。

四、控制器编写

 控制器是 Spring MVC 中处理请求的核心组件,负责接收请求、处理业务逻辑并返回视图。以下是 HelloController.java 的代码:

package cn.tx.demo1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;

@Controller
@RequestMapping("say")
public class HelloController {
    @RequestMapping(path = "hello.do", method = RequestMethod.GET, params = "username")
    public String sayHello(String username) {
        try {
            PrintStream out = new PrintStream(System.out, true, "UTF-8");
            out.println("入门方法执行了2...");
            out.println(username);
        } catch (UnsupportedEncodingException e) {
            System.out.println("入门方法执行了2...");
        }
        return "suc";
    }
}

 

  • @Controller 注解:将该类标记为控制器,Spring 容器会自动扫描并注册该类。
  • @RequestMapping 注解:用于映射请求路径和请求方法。这里将 /say/hello.do 的 GET 请求映射到 sayHello 方法,并且要求请求参数中包含 username
  • sayHello 方法:接收 username 参数,打印相关信息,并返回逻辑视图名 suc

五、视图页面编写

5.1 首页 index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    入门程序


<%--超链接--%>

入门

用户名:
入门程序

 该页面提供了一个表单和一个超链接,用于向 HelloController 发送请求。

 

 5.2 成功页面 suc.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    成功


入门成功了2...

当请求处理成功后,会跳转到该页面。

 如下:

Spring MVC 入门案例:从代码到原理的深度剖析_第1张图片

Spring MVC 入门案例:从代码到原理的深度剖析_第2张图片 

六、工作流程分析 

6.1 请求发送

 用户在浏览器中访问 index.jsp 页面,通过表单或超链接发送请求到 /say/hello.do

6.2 请求接收

请求到达 DispatcherServletDispatcherServlet 根据 web.xml 中的配置,将请求转发给 Spring MVC 框架处理

6.3 处理器映射

DispatcherServlet 根据 @RequestMapping 注解的配置,找到对应的控制器方法 HelloController.sayHello

6.4 处理器执行

调用 sayHello 方法,处理业务逻辑,接收并打印 username 参数。

6.5 视图解析

sayHello 方法返回逻辑视图名 sucDispatcherServlet 根据 springmvc.xml 中配置的视图解析器,将逻辑视图名解析为实际的 JSP 页面路径 /WEB-INF/pages/suc.jsp

6.6 视图渲染

DispatcherServlet 将请求转发到 suc.jsp 页面,渲染并返回给用户。

你可能感兴趣的:(spring,mvc,java)