Java-Spring入门指南(十四)利用IDEA教你构建第一个SpringMVC系统

Java-Spring入门指南(十四)利用IDEA教你构建第一个SpringMVC系统

Java-Spring入门指南(十四)SpringMVC项目实战搭建


前言

  • 在上一篇博客中,我们系统学习了SpringMVC的核心流程与组件分工,明确了DispatcherServlet(前端控制器)、HandlerMapping(处理器映射器)等组件的协作逻辑。
  • 理论之后更需实践,如何从0到1搭建一个可运行的SpringMVC项目,如何将核心组件配置落地,是本次实战的核心目标。
  • 本文将基于Maven+IDEA+Tomcat 11环境,一步步完成SpringMVC项目的搭建、配置与运行,让你直观感受“理论”到“实战”的转化过程。
我的个人主页,欢迎来阅读我的其他文章
https://blog.ZEEKLOG.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-Spring入门指南知识文章专栏
欢迎来阅读指出不足
https://blog.ZEEKLOG.net/2402_83322742/category_13040333.html?spm=1001.2014.3001.5482
在这里插入图片描述

一、首先导入我们的Maven

我的maven如何导入相关的博客
https://blog.ZEEKLOG.net/2402_83322742/article/details/145998804
导入好之后的样子

二、接着导入SpringMVC相关的包

<!-- 1. SpringMVC核心依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.2.10</version></dependency>
  • 作用:包含SpringMVC的所有核心功能,如DispatcherServlet@Controller注解、视图解析器等,是项目的“基石”。
<!-- 2. Servlet API依赖 --><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.1.0</version><scope>provided</scope></dependency>
  • 作用:SpringMVC基于Servlet规范运行,需依赖HttpServletRequestHttpServlet等接口;scope=provided表示该依赖由Tomcat等Servlet容器提供,无需打包到项目中。
<!-- 3. JSP视图依赖 --><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.1</version><scope>provided</scope></dependency>
  • 作用:若使用JSP作为视图技术(如本次实战),需该依赖支持JSP语法解析;同样scope=provided,由Tomcat提供。
<!-- 4. 代码简化工具(Lombok) --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.38</version></dependency>
  • 作用:自动生成Java类的getter/setter、构造方法等,减少冗余代码,提升开发效率(非SpringMVC必需,但推荐使用)。
<!-- 5. 单元测试框架(JUnit 4) --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>
  • 作用:用于编写自动化测试用例,验证Controller、Service等组件的逻辑;scope=test表示仅在测试环境生效。

三、创建Servlet_web环境

  • 创建完模板之后加入web环境
  • 找到springMVC,并且点击+号,创建web文件

右击我们的刚创建好的模板,打开模板设置

在这里插入图片描述

首先需要创建一个项目,然后我们在项目里添加模板

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
  • 然后在WEB-INF文件下创建一个lib文件夹

点击右下角的创建工件

在这里插入图片描述
在这里插入图片描述

单击lib文件夹,导入所有的库文件

在这里插入图片描述


在这里插入图片描述
  • 然后再WEB-INF文件下创建jsp文件夹并在jsp文件夹下创建hello.jsp项目
在这里插入图片描述


并在里面加入jsp代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html><head><title>SpringMVC测试</title></head><body><!-- 接收Controller传递的msg数据并展示 --> ${msg} </body></html>

然后创建com.niit.controller包,并在包里创建HelloController.java代码

在这里插入图片描述
publicclassHelloControllerimplementsController{@OverridepublicModelAndViewhandleRequest(HttpServletRequest request,HttpServletResponse response)throwsException{ModelAndView mv =newModelAndView(); mv.addObject("msg","hello springmvc"); mv.setViewName("hello");return mv;}}

代码核心逻辑解释

  • ModelAndView:是Controller的返回结果,同时包含“模型数据”(给视图的数- 据)和“视图名称”(要渲染的视图)。
  • addObject("msg", "hello springmvc"):将数据存入模型,JSP页面可通过${msg}获取该值。
  • setViewName("hello"):指定逻辑视图名为“hello”,后续视图解析器会将其拼接为/WEB-INF/jsp/hello.jsp(物理路径)。

(1)配置springmvc.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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!-- 处理器映射器--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean><!-- 处理器适配器--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean><!-- 视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"></property><property name="suffix" value=".jsp"></property></bean><!-- handler--><bean id="/hello"class="com.niit.controller.HelloController"></bean></beans>
  1. 处理器映射器(BeanNameUrlHandlerMapping)
    • 作用:根据Bean的id(URL路径)匹配Controller,例如id="/hello"对应处理http://localhost:8080/hello请求。
  2. 处理器适配器(SimpleControllerHandlerAdapter)
    • 作用:适配“实现Controller接口的控制器”,调用其handleRequest方法处理请求(若使用注解式Controller,需配置其他适配器)。
  3. 视图解析器(InternalResourceViewResolver)
    • 作用:将逻辑视图名转为物理视图路径,例如“hello”→prefix + "hello" + suffix/WEB-INF/jsp/hello.jsp
  4. Handler(Controller)配置

作用:将HelloController注册为Spring Bean,id="/hello"指定其处理的URL路径。

在这里插入图片描述

(2)配置web.xml里面的中央处理器

DispatcherServlet是SpringMVC的“前端控制器”,所有HTTP请求都会先经过它,需在web.xml(位于webapp/WEB-INF目录下)中配置。

<!-- 配置中央处理器--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
在这里插入图片描述

(3)为什么需要配置前端控制器?

  • 统一请求入口:所有请求先经过DispatcherServlet,避免为每个Controller单独配置Servlet(解决传统Servlet开发的“配置爆炸”问题)。
  • 协调组件工作:DispatcherServlet会自动查找并调用HandlerMappingHandlerAdapterViewResolver等组件,无需手动关联。
  • 初始化配置:通过init-param指定springmvc.xml的路径,让DispatcherServlet加载SpringMVC的组件配置。

五、配置最新的tomcat 11

tomcat官方网站
https://tomcat.apache.org/
在这里插入图片描述


在这里插入图片描述

然后下载最新的tomcat11,并配置到我们的IDEA系统中

在这里插入图片描述
在这里插入图片描述


然后将服务器里面的URL改为http://localhost:8080/hello

并且部署里面的应用程序上下文改为/

在这里插入图片描述
在这里插入图片描述

六、运行项目

点击运行,如果直接显示hello springmvc则项目构建成功

在这里插入图片描述

我的个人主页,欢迎来阅读我的其他文章
https://blog.ZEEKLOG.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-Spring入门指南知识文章专栏
欢迎来阅读指出不足
https://blog.ZEEKLOG.net/2402_83322742/category_13040333.html?spm=1001.2014.3001.5482
非常感谢您的阅读,喜欢的话记得三连哦
在这里插入图片描述

Read more

Monorepo 架构全解析:从概念到落地的完整指南

Monorepo 架构全解析:从概念到落地的完整指南

一、什么是 Monorepo? 1.1 核心概念 Monorepo(单体仓库)是一种软件开发架构模式,它将多个相关项目、应用或模块的源代码集中存储在单一的代码仓库中进行管理。与传统的多仓库(Multi-repo)模式不同,Monorepo 允许团队在一个统一的上下文中开发多个相关组件,从而简化了代码共享和项目间依赖管理。 1.2 与多仓库(Multi-repo)的对比 特性/方面Monorepo(单体仓库)Multi-repo(多仓库)代码组织所有项目代码在一个仓库中每个项目独立仓库代码共享直接通过引用共享代码,无需发布包需要将共享代码发布为npm包才能复用依赖管理统一依赖版本,避免版本冲突各仓库可能使用不同版本的依赖,易出现冲突代码变更跨项目变更可在一次提交中完成需要在多个仓库中进行多次提交和协调构建测试可统一构建、测试所有项目需要单独构建、测试每个仓库存储效率依赖只安装一次,节省空间相同依赖在各仓库中重复安装权限管理较难实现细粒度的权限控制可针对不同仓库设置不同权限初始复杂度配置相对复杂,需要专用工具支持配置简单,容易上手 1.3 适用场景 Monorep

By Ne0inhk
看完!我不允许你还不知道 Spring Boot如何读取Resource目录文件

看完!我不允许你还不知道 Spring Boot如何读取Resource目录文件

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》专栏19年编写主要介绍使用JAVA开发RabbitMQ的系列教程,从基础知识到项目实战 🌸《设计模式》专栏以实际的生活场景为案例进行讲解,让大家对设计模式有一个更清晰的理解 🌛《开源项目》本专栏主要介绍目前热门的开源项目,带大家快速了解并轻松上手使用 🍎 《前端技术》专栏以实战为主介绍日常开发中前端应用的一些功能以及技巧,均附有完整的代码示例 ✨《开发技巧》本专栏包含了各种系统的设计原理以及注意事项,并分享一些日常开发的功能小技巧 💕《Jenkins实战》专栏主要介绍Jenkins+Docker的实战教程,让你快速掌握项目CI/CD,是2024年最新的实战教程 🌞《Spring Boot》专栏主要介绍我们日常工作项目中经常应用到的功能以及技巧,代码样例完整 👍《Spring Security》专栏中我们将逐步深入Spring Security的各个

By Ne0inhk
Spring Security 从入门到实战:搞定认证授权,再也不用手写权限逻辑

Spring Security 从入门到实战:搞定认证授权,再也不用手写权限逻辑

✨道路是曲折的,前途是光明的! 📝 专注C/C++、Linux编程与人工智能领域,分享学习笔记! 🌟 感谢各位小伙伴的长期陪伴与支持,欢迎文末添加好友一起交流! * 目录 * 前言 * 一、Spring Security 是什么? * 1.1 核心功能 * 二、技术组成分布 * 三、认证流程解析 * 3.1 请求处理流程 * 3.2 过滤器链结构 * 四、快速开始 * 4.1 添加依赖 * 4.2 基础配置 * 五、认证机制详解 * 5.1 内存认证(开发测试) * 5.2 数据库认证(生产推荐) * 六、授权控制方式 * 6.1 注解方式

By Ne0inhk
Flutter 组件 flutterw_sidekick_plugin 适配鸿蒙 HarmonyOS 实战:侧翼脚手架扩展,构建工程自动化与环境一致性治理架构

Flutter 组件 flutterw_sidekick_plugin 适配鸿蒙 HarmonyOS 实战:侧翼脚手架扩展,构建工程自动化与环境一致性治理架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 flutterw_sidekick_plugin 适配鸿蒙 HarmonyOS 实战:侧翼脚手架扩展,构建工程自动化与环境一致性治理架构 前言 在鸿蒙(OpenHarmony)生态迈向大规模团队协作、涉及多分支并行开发及复杂的 SDK 版本管控的背景下,如何确保每一位开发者的本地构建环境(Flutter/Dart SDK)与生产基准完全对齐,已成为保障项目交付质量的“工程定海神针”。在鸿蒙设备这类强调定制化编译工具链与私有插件依赖的环境下,如果团队缺乏统一的脚手架工具,由于由于本地 SDK 版本的微小代差(如空安全检测差异),极易由于由于“环境不一致”导致代码在不同机器上产生不可预知的编译崩溃。 我们需要一种能够深度集成 Sidekick、支持自定义命令扩展且具备“强制版本锁死”能力的脚手架治理方案。 flutterw_sidekick_plugin 为 Flutter 开发者引入了基于 Sidekick

By Ne0inhk