【SpringMVC】十分钟跑起来一个SpringMVC项目

server/2025/2/27 16:02:27/

目录标题

  • 1 项目概述
    • 1.项目结构解析
    • 2. MVC项目的结构和每个组件的作用:
    • 3. 项目的工作流程:
    • 4 后期可以扩展的点:
    • 2.源码学习
      • 1. HelloController 类,Spring MVC控制器
      • 2 springmvc-servlet.xml - Spring MVC的主要配置文件
      • 3.web 目录 - Web应用程序资源 WEB-INF/jsp - 存放JSP视图文件
            • 3.1 hello.jsp
            • 3.2 index.jsp
      • 4,WEB-INF/web.xml - Web应用程序的部署描述文件
      • 5. pom.xml - Maven项目的配置文件,用于管理项目依赖和构建过程
      • 6. springmvc-03-annotation.iml - IntelliJ IDEA的项目模块文件
  • 3 逐行学习代码
  • 4 服务器设置 tomcat

1 项目概述

1.项目结构解析

在这里插入图片描述

项目在运行的时候 会自动生成 target文件夹
在这里插入图片描述

2. MVC项目的结构和每个组件的作用:

  1. 项目根目录:springmvc-03-annotation

    • 名称表明这是一个使用注解方式配置的Spring MVC项目
  2. 源代码目录:src/main/java

    • nuc.ss.controller 包:
      • HelloController 类:使用注解配置的控制器类
      • 控制器负责处理用户请求,进行业务逻辑处理,并返回视图
      • 标注显示"100% methods"说明所有方法都已实现
  3. 资源配置目录:src/main/resources

    • springmvc-servlet.xml:Spring MVC的核心配置文件
      • 定义组件扫描
      • 配置视图解析器
      • 配置静态资源处理
      • 配置注解驱动等
  4. Web应用目录:web

    • WEB-INF/ - 安全目录,外部无法直接访问
      • jsp/ 目录:存放JSP视图文件
        • hello.jsp - 展示"Hello World"的视图
        • index.jsp - 应用的首页
      • web.xml - Web应用的部署描述文件
        • 配置DispatcherServlet
        • 配置URL映射
        • 配置字符编码过滤器等
  5. 项目构建文件:

    • pom.xml:Maven项目配置文件
      • 定义项目坐标(groupId, artifactId, version)
      • 管理项目依赖(Spring MVC, Servlet, JSP等)
      • 配置构建插件
      • 管理项目生命周期
  6. target/ 目录:

    • 存放编译后的类文件和资源
    • 包含最终的WAR包
  7. IDE相关文件:

    • springmvc-03-annotation.iml:IntelliJ IDEA的项目模块文件
    • 包含项目配置信息和依赖关系

3. 项目的工作流程:

  1. 用户发送请求到服务器
  2. 请求被DispatcherServlet接收
  3. 根据URL映射到对应的Controller方法
  4. Controller处理请求并返回视图名称
  5. 视图解析器找到对应的JSP文件
  6. 渲染视图并返回给用户
    在这里插入图片描述

4 后期可以扩展的点:

  1. 可以添加Service层处理业务逻辑
  2. 可以添加DAO层处理数据访问
  3. 考虑添加日志配置文件
  4. 可以添加测试目录进行单元测试
  5. 可以考虑使用更现代的视图技术(如Thymeleaf)替代JSP

这个项目结构是典型的Spring MVC应用,适合学习Spring MVC的基础知识和注解配置方式。

2.源码学习

src/main/java - 存放Java源代码

1. HelloController 类,Spring MVC控制器

package nuc.ss.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
@RequestMapping("/hello")
public class HelloController {@RequestMapping("/h1")public String hello(Model model) {//封装数据model.addAttribute("msg","Hello,这是最简单的SpringMVC!!!");return "hello";//会被视图解析器处理}
}

src/main/resources - 存放配置文件

2 springmvc-servlet.xml - Spring MVC的主要配置文件

springmvc-servlet.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:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 --><context:component-scan base-package="nuc.ss.controller"/><!-- 让Spring MVC不处理静态资源(css,js) --><mvc:default-servlet-handler /><!--支持mvc注解驱动在spring中一般采用@RequestMapping注解来完成映射关系要想使@RequestMapping注解生效必须向上下文中注册DefaultAnnotationHandlerMapping和一个AnnotationMethodHandlerAdapter实例这两个实例分别在类级别和方法级别处理。而annotation-driven配置帮助我们自动完成上述两个实例的注入。--><mvc:annotation-driven /><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后缀 --><property name="suffix" value=".jsp" /></bean></beans>

3.web 目录 - Web应用程序资源 WEB-INF/jsp - 存放JSP视图文件

3.1 hello.jsp
<%--&lt;%&ndash;--%>
<%--  Created by IntelliJ IDEA.--%>
<%--  User: Administrator--%>
<%--  Date: 2020/7/13 0013--%>
<%--  Time: 14:26--%>
<%--  To change this template use File | Settings | File Templates.--%>
<%--&ndash;%&gt;--%>
<%--<%@ page contentType="text/html;charset=UTF-8" language="java" %>--%>
<%--<html>--%>
<%--<head>--%>
<%--    <title>Title</title>--%>
<%--</head>--%>
<%--<body>--%>
<%--${msg}--%>
<%--</body>--%>
<%--</html>--%><%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Spring MVC Demo</title><style>body {font-family: Arial, sans-serif;margin: 0;padding: 20px;background-color: #f0f2f5;display: flex;justify-content: center;align-items: center;min-height: 100vh;}.card {background: yellowgreen;padding: 30px;border-radius: 8px;box-shadow: 0 2px 4px rgba(0,0,0,0.1);text-align: center;}.message {color: #cb2525;font-size: 24px;}</style>
</head>
<body>
<div class="card"><div class="message">${msg}</div>
</div>
</body>
</html>
3.2 index.jsp
<%--Created by IntelliJ IDEA.User: AdministratorDate: 2020/7/13 0013Time: 14:21To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>$Title$</title></head><body>$END$</body>
</html>

4,WEB-INF/web.xml - Web应用程序的部署描述文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--1.注册servlet--><servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--通过初始化参数指定SpringMVC配置文件的位置,进行关联--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><!-- 启动顺序,数字越小,启动越早 --><load-on-startup>1</load-on-startup></servlet><!--所有请求都会被springmvc拦截 --><servlet-mapping><servlet-name>SpringMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

5. pom.xml - Maven项目的配置文件,用于管理项目依赖和构建过程

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>SpringMVC</artifactId><groupId>nuc.ss</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springmvc-03-annotation</artifactId><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>
</project>

6. springmvc-03-annotation.iml - IntelliJ IDEA的项目模块文件

<?xml version="1.0" encoding="UTF-8"?>
<module version="4"><component name="FacetManager"><facet type="web" name="Web"><configuration><descriptors><deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/web/WEB-INF/web.xml" /></descriptors><webroots><root url="file://$MODULE_DIR$/web" relative="/" /></webroots><sourceRoots><root url="file://$MODULE_DIR$/src/main/java" /><root url="file://$MODULE_DIR$/src/main/resources" /></sourceRoots></configuration></facet></component>
</module>

这是一个使用注解配置方式的Spring MVC示例项目,从项目名称 springmvc-03-annotation 可以看出这可能是一个学习或练习项目。项目使用Maven进行依赖管理,并采用了JSP作为视图技术。

3 逐行学习代码

我来帮您详细注释每个关键代码文件:

  1. HelloController.java:控制器类
java">package nuc.ss.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;@Controller  // 标识这是一个Spring MVC控制器
@RequestMapping("/hello")  // 类级别的请求映射,指定这个控制器的基础URL路径
public class HelloController {@RequestMapping("/h1")  // 方法级别的请求映射,完整访问路径为/hello/h1public String hello(Model model) {  // Model用于向视图传递数据// 向模型中添加属性,key为"msg",value为显示的消息// 这个数据可以在视图(JSP)中通过${msg}获取model.addAttribute("msg", "Hello,这是最简单的SpringMVC!!!");// 返回视图名称,会被视图解析器处理// 根据配置会在返回的字符串前加上前缀/WEB-INF/jsp/,后加上后缀.jspreturn "hello";}
}
  1. springmvc-servlet.xml:Spring MVC配置文件
<?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:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="..."> <!-- 这里是XML Schema位置定义 --><!-- 启用注解扫描,自动扫描包下的所有注解 --><!-- 会扫描指定包下的@Controller, @Service, @Repository, @Component等注解 --><context:component-scan base-package="nuc.ss.controller"/><!-- 配置静态资源处理,使Spring MVC不处理静态资源 --><!-- 例如.js,.css等文件会交由默认的servlet处理 --><mvc:default-servlet-handler /><!-- 启用Spring MVC注解驱动 --><!-- 自动注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter --><!-- 支持@Controller、@RequestMapping等注解 --><mvc:annotation-driven /><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 配置视图路径前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 配置视图路径后缀 --><property name="suffix" value=".jsp" /></bean>
</beans>
  1. web.xml:Web应用配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0"><!-- 配置Spring MVC的前端控制器 --><servlet><!-- servlet的名称 --><servlet-name>SpringMVC</servlet-name><!-- DispatcherServlet是Spring MVC的核心,负责接收请求并分发 --><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置Spring MVC配置文件的位置 --><init-param><param-name>contextConfigLocation</param-name><!-- 指定配置文件位置 --><param-value>classpath:springmvc-servlet.xml</param-value></init-param><!-- 配置servlet启动顺序,数字越小优先级越高 --><load-on-startup>1</load-on-startup></servlet><!-- 配置servlet映射 --><servlet-mapping><servlet-name>SpringMVC</servlet-name><!-- /表示拦截所有请求,不包括.jsp --><!-- /*表示拦截所有请求,包括.jsp --><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
  1. hello.jsp:视图文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Spring MVC Demo</title><style>/* 页面样式设置 */body {font-family: Arial, sans-serif;margin: 0;padding: 20px;background-color: #f0f2f5;display: flex;justify-content: center;  /* 水平居中 */align-items: center;      /* 垂直居中 */min-height: 100vh;}.card {background: yellowgreen;  /* 卡片背景色 */padding: 30px;border-radius: 8px;      /* 圆角边框 */box-shadow: 0 2px 4px rgba(0,0,0,0.1);  /* 阴影效果 */text-align: center;}.message {color: #cb2525;          /* 文字颜色 */font-size: 24px;}</style>
</head>
<body>
<div class="card"><div class="message">${msg}  <!-- 显示从控制器传来的消息 --></div>
</div>
</body>
</html>
  1. index.jsp 的详细注释
jspCopy<%-- Created by IntelliJ IDEA.  // IDE创建信息User: Administrator        // 创建用户Date: 2020/7/13 0013      // 创建日期Time: 14:21               // 创建时间To change this template use File | Settings | File Templates.  // 模板修改提示
--%><%@ page contentType="text/html;charset=UTF-8" language="java" %>  <%-- 页面指令:设置内容类型和编码 --%>
<html><head><title>$Title$</title>  <%-- 页面标题占位符 --%></head><body>$END$  <%-- 内容占位符,表示编辑器光标默认位置 --%></body>
</html>

这是一个基础的 JSP 模板文件,主要包含:

文件信息注释

IDE 创建信息
创建者信息
创建时间
模板修改提示

页面指令

<%@ page … %> - JSP页面指令
contentType=“text/html” - 指定内容类型为HTML
charset=UTF-8 - 使用UTF-8字符编码
language=“java” - 使用Java作为脚本语言

占位符

T i t l e Title Title - 标题占位符
E N D END END - 内容占位符

这是一个最基础的页面模板,通常用作:

新建JSP页面的起点
快速创建页面的模板
统一项目中JSP页面的基本结构

  1. pom.xml

:Maven配置文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="..."><!-- 父项目配置 --><parent><artifactId>SpringMVC</artifactId><groupId>nuc.ss</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springmvc-03-annotation</artifactId><!-- 构建配置 --><build><resources><!-- 配置Java源码目录下的资源文件处理 --><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource><!-- 配置资源目录下的资源文件处理 --><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources></build>
</project>

7 springmvc-03-annotation.iml 的注释说明:

<?xml version="1.0" encoding="UTF-8"?>
<module version="4"><component name="FacetManager"><!-- Web模块配置 --><facet type="web" name="Web"><configuration><!-- Web应用描述符配置 --><descriptors><!-- web.xml的位置配置 --><deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/web/WEB-INF/web.xml" /></descriptors><!-- Web资源根目录配置 --><webroots><!-- 指定web目录为Web应用的根目录 --><root url="file://$MODULE_DIR$/web" relative="/" /></webroots><!-- 源代码根目录配置 --><sourceRoots><!-- Java源代码目录 --><root url="file://$MODULE_DIR$/src/main/java" /><!-- 资源文件目录 --><root url="file://$MODULE_DIR$/src/main/resources" /></sourceRoots></configuration></facet></component>
</module>

这些配置文件共同构成了一个基础的Spring MVC项目结构。主要的处理流程是:

  1. 用户请求首先被web.xml
  2. 中配置的DispatcherServlet接收
  3. 根据springmvc-servlet.xml的配置,请求被路由到对应的Controller
  4. Controller处理请求并返回视图名称
  5. 视图解析器解析视图名称,找到对应的JSP文件
  6. JSP文件被渲染后返回给用户

这样的结构提供了一个清晰的MVC分层,便于后续维护和扩展。

4 服务器设置 tomcat

在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/18f6ec45b4f14210addd1b6a8df7cfed.png

在这里插入图片描述


http://www.ppmy.cn/server/171076.html

相关文章

【深度学习神经网络学习笔记(一)】深度学习介绍

深度学习介绍 深度学习介绍前言1、深度学习和机器学习的区别1.1 特征提取方面1.2 深度学习应用场景1.3 深度学习代表算法-神经网络 2、神经网络的结构组成3、深度学习的效果特点 深度学习介绍 前言 深度学习作为机器学习的一个前沿领域&#xff0c;正推动着从图像识别到自然语…

W803|联盛德|WM IoT SDK2.X测试|(1)开箱:开发板及说明

前几天关注的联盛德微电子新推出了WM IoT SDK2.X&#xff0c;正式发布后&#xff0c;邀请用户参加“免费试用&#xff0c;赢千元大礼”活动&#xff0c;填写信息&#xff0c;等待统一发送&#xff0c;很快收到了板子。 活动地址&#xff1a;联盛德微电子WM IoT SDK2.X正式发布…

WSL,Power shell 和CMD, Git bash的区别

在 Windows 系统中&#xff0c;WSL、PowerShell、CMD、Git Bash 和 Git Bash&#xff08;管理员&#xff09; 是不同的命令行工具和环境&#xff0c;它们各自有不同的用途和特点。以下是它们的详细关系和区别&#xff1a; 1. WSL&#xff08;Windows Subsystem for Linux&…

VScode 开发

目录 安装 VS Code 创建一个 Python 代码文件 安装 VS Code VSCode&#xff08;全称&#xff1a;Visual Studio Code&#xff09;是一款由微软开发且跨平台的免费源代码编辑器&#xff0c;VSCode 开发环境非常简单易用。 VSCode 安装也很简单&#xff0c;打开官网 Visual S…

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片 根据您的需求&#xff0c;目前需要了解以下几个关键点及分步解决方案&#xff1a; --- 一、现状分析 1. Ollama 的限制&#xff1a; - 目前Ollama主要面向文本大模型&#xff0c;原生不支持直接上传/处理图片 …

六十天前端强化训练之第一天HTML5语义化标签深度解析与博客搭建实战

欢迎来到编程星辰海的博客讲解 目录 一、语义化标签的核心价值 1.1 什么是语义化&#xff1f; 1.2 核心优势 二、语义标签详解与使用场景 2.1 布局容器标签 2.2 内容组织标签 三、博客结构搭建实战 3.1 完整HTML结构 3.2 核心结构解析 3.3 实现效果说明 四、学习要点…

WPS接入DeepSeek模型免费版本

WPS灵犀正式上线DeepSeek R1&#xff01; 参考原文&#xff1a;WPS接入DeepSeek模型免费版本 今年年初&#xff0c;WPS 官方正式发布重磅消息&#xff1a;WPS 全面接入 DeepSeek R1 大模型。用户只需将 WPS 更新到最新版本&#xff0c;登录账号后&#xff0c;点击界面左侧的「…

Spring框架基本使用(Maven详解)

前言&#xff1a; 当我们创建项目的时候&#xff0c;第一步少不了搭建环境的相关准备工作。 那么如果想让我们的项目做起来方便快捷&#xff0c;应该引入更多的管理工具&#xff0c;帮我们管理。 Maven的出现帮我们大大解决了管理的难题&#xff01;&#xff01; Maven&#xf…