28-springMVC概述和简单的入门案例

Spring MVC是Spring Framework的一部分,是一个基于Java的Web应用程序开发框架。它提供了一种模型-视图-控制器(Model-View-Controller,MVC)的架构模式来构建灵活、可扩展和松耦合的Web应用程序。

在Spring MVC中,应用程序被划分为以下几个主要组件:

  1. 模型(Model):模型表示应用程序的数据和业务逻辑。它可以是POJO(Plain Old Java Object)类、或者是与数据库交互的领域对象,负责封装和处理数据。

  2. 视图(View):视图负责展示模型数据给用户,并接收用户的输入。它可以使用JSP(JavaServer Pages)、Thymeleaf、HTML等模板技术来呈现最终的用户界面。

  3. 控制器(Controller):控制器是MVC的核心,负责接收用户的请求并进行处理。它根据请求的处理逻辑选择相应的模型和视图,并将处理结果返回给用户。

Spring MVC框架提供了一系列的组件和功能,用于帮助开发人员构建Web应用程序:

  • DispatcherServlet(调度器):作为核心控制器,负责接收所有的HTTP请求并将其分派给相应的处理器进行处理。

  • HandlerMapping(处理器映射器):根据请求的URL路径或其他条件,将请求映射到适当的处理器。

  • Handler(处理器):执行实际的业务逻辑,处理请求,并返回模型数据和视图信息。

  • ViewResolver(视图解析器):根据视图名称解析出具体的视图对象。

  • View(视图):负责展示模型数据,并最终生成响应结果。

Spring MVC还提供了处理数据绑定、表单验证、异常处理、国际化等常见Web开发任务的支持。它与Spring Framework的其他模块(如Spring Data、Spring Security等)无缝集成,为开发者提供了一种完整的、一致的编程模型。


下面是一个基于 Spring MVC 的详细案例,包括 Java 配置文件的编写:

1.创建一个 Maven 项目,添加以下依赖,并导入相关的库文件:

<dependencies>
    <!-- Spring MVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.9</version>
    </dependency>
    
    <!-- JSP 支持 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    
    <!-- Servlet API -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

 <build>
        <plugins>

            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>


    </build>

2. 创建一个配置类 AppConfig.java,用于替代传统的 XML 配置文件:

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    
}

3.创建一个控制器类 HelloController.java,处理请求并返回相应的视图:

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

@Controller
public class HelloController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello(Model model) {
        String message = "Hello, World!";
        model.addAttribute("message", message);
        return "hello";
    }
}

4.创建一个 JSP 视图 hello.jsp,用于展示消息内容:

<!DOCTYPE html>
<html>
<head>
    <title>Hello</title>
</head>
<body>
    <h1>${message}</h1>
</body>
</html>

5.创建一个启动类 AppInitializer.java,初始化 Spring MVC 配置:

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载mvc容器的配置
    @Override
    protected WebApplicationContext createServletApplicationContext() {
        AnnotationConfigWebApplicationContext ctx = new 
        AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    //设置那些请求归属mvc处理
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //加载springmvc容器配置
    @Override
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }
}

通过以上步骤,创建了一个简单的 Spring MVC 示例。当访问应用程序的根路径或 /hello 路径时,将调用 HelloController 中的 hello() 方法,然后返回 hello.jsp 视图,显示 "Hello, World!" 消息。


启动服务器初始化过程

  • 服务器启动,执行ServletContainersInitConfig类,初始化web容器
  • 执行createServletApplicationContext方法,创建了WebApplicationContext对象
  • 加载SpringMvcConfig对应的bean
  • 执行@ComponentScan
  • 加载UserController,每个@RequestMapping的名称对应一个具体的方法
  • 执行getServletMappings方法,定义所有的请求都通过SpringMVC 

单次请求过程

  • 发送请求localhost/save
  • web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理
  • 解析请求路径/save
  • 由/save匹配执行对应的方法save()
  • 执行save()
  • 检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方

SpringMVC入门程序开发总结 (1+N)

一次性工作:

  • 创建工程,设置服务器,加载工程
  • 导入坐标
  • 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
  • SpringMvC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)

多次工作:

  • 定义处理请求的控制器类
  • 定义处理请求的控制器方法,并配置映射路径 (@RequestMapping) 与返json数据 (@ResponseBody) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值