IDEA2023创建SpringMVC项目

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏: 开发环境篇
✨特色专栏: MySQL学习
🥭本文内容: IIDEA2023创建SpringMVC项目
📚个人知识库: Leo知识库,欢迎大家访问

1. 前言

大家好,我是Leo哥🫣🫣🫣,有朋友问我关于新版本的IDEA如何创建SpringMVC项目或者是SSM项目,并配置Web支持呢。这个问题在我刚升级新版本也是琢磨了很久,现在整理分享给大家。

2. 创建项目

我们这里以创建SpringMVC项目为例,SSM项目同理。不过我们以原生Maven的方式创建,当然也可以通过快捷的 Archetype org.apache.maven.archetypes:maven-archetype-webapp 进行创建,但是这不是我们今天的主题。不多废话,直接开始吧。

创建项目

image-20240406200919832

3. 导入依赖

<dependencies><!-- Spring MVC依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.1.4</version></dependency><!--日志框架Logback依赖--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.5.3</version></dependency><!--Servlet依赖--><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.0.0</version><scope>provided</scope></dependency><!--Spring6和Thymeleaf整合依赖--><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring6</artifactId><version>3.1.2.RELEASE</version></dependency></dependencies>

4. 添加Web支持

首先需要先在main 目录下面创建一个文件夹,webapp。

image-20240406201234605

然后打开Project Structure ,添加Web依赖,如果有的话可以胜率这一步。

image-20240406201358703

然后点击Web,添加一个Deploymentt Descriptors

image-20240406201504260

这里注意要和自己的路径保持一致,如果不一致按照我这个格式进行改! 然后就是 Deployment 版本选择6即可。

image-20240406201604230

然后点击apply,OK即可,看到xml说明我们配置成功了。

image-20240406202043283

5. 其他配置

5. 1 配置Web.xml

Spring MVC是一个web框架,在javaweb中谁来负责接收请求,处理请求,以及响应呢?当然是Servlet。在SpringMVC框架中已经为我们写好了一个Servlet,它的名字叫做:DispatcherServlet,我们称其为前端控制器。既然是Servlet,那么它就需要在web.xml文件中进行配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"version="6.0"><!--配置前端控制器--><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.xml</param-value></init-param><!--为了提高用户的第一次访问效率,建议在web服务器启动时初始化前端控制器--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

DispatcherServlet是SpringMVC框架为我们提供的最核心的类,它是整个SpringMVC框架的前端控制器,负责接收HTTP请求、将请求路由到处理程序、处理响应信息,最终将响应返回给客户端。DispatcherServlet是Web应用程序的主要入口点之一,它的职责包括:

  1. 接收客户端的HTTP请求: DispatcherServlet监听来自Web浏览器的HTTP请求,然后根据请求的URL将请求数据解析为Request对象。
  2. 处理请求的URL: DispatcherServlet将请求的URL(Uniform Resource Locator)与处理程序进行匹配,确定要调用哪个控制器(Controller)来处理此请求。
  3. 调用相应的控制器: DispatcherServlet将请求发送给找到的控制器处理,控制器将执行业务逻辑,然后返回一个模型对象(Model)。
  4. 渲染视图: DispatcherServlet将调用视图引擎,将模型对象呈现为用户可以查看的HTML页面。
  5. 返回响应给客户端: DispatcherServlet将为用户生成的响应发送回浏览器,响应可以包括表单、JSON、XML、HTML以及其它类型的数据

5.2 编写springmvc.xml

SpringMVC框架有它自己的配置文件,该配置文件的名字默认为:-servlet.xml,默认存放的位置是WEB-INF 目录下:

但是我们正常我们的配置文件都是放在resources文件夹下面的,所以我们这里需要做出一点改动。

手动配置我们的springmvc的路径。

<!--手动设置springmvc配置文件的路径及名字-->
<init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value>
</init-param>

然后我们就可以直接在resources添加一个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: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/context https://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="org.javatop.springmvc.controller"/><!--视图解析器--><bean id="thymeleafViewResolver" class="org.thymeleaf.spring6.view.ThymeleafViewResolver"><!--作用于视图渲染的过程中,可以设置视图渲染后输出时采用的编码字符集--><property name="characterEncoding" value="UTF-8"/><!--如果配置多个视图解析器,它来决定优先使用哪个视图解析器,它的值越小优先级越高--><property name="order" value="1"/><!--当 ThymeleafViewResolver 渲染模板时,会使用该模板引擎来解析、编译和渲染模板--><property name="templateEngine"><bean class="org.thymeleaf.spring6.SpringTemplateEngine"><!--用于指定 Thymeleaf 模板引擎使用的模板解析器。模板解析器负责根据模板位置、模板资源名称、文件编码等信息,加载模板并对其进行解析--><property name="templateResolver"><bean class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver"><!--设置模板文件的位置(前缀)--><property name="prefix" value="/WEB-INF/templates/"/><!--设置模板文件后缀(后缀),Thymeleaf文件扩展名不一定是html,也可以是其他,例如txt,大部分都是html--><property name="suffix" value=".html"/><!--设置模板类型,例如:HTML,TEXT,JAVASCRIPT,CSS等--><property name="templateMode" value="HTML"/><!--用于模板文件在读取和解析过程中采用的编码字符集--><property name="characterEncoding" value="UTF-8"/></bean></property></bean></property></bean>
</beans>

image-20240406203036105

以上配置主要两项:

  • 第一项:组件扫描。spring扫描这个包中的类,将这个包中的类实例化并纳入IoC容器的管理。
  • 第二项:视图解析器。视图解析器(View Resolver)的作用主要是将Controller方法返回的逻辑视图名称解析成实际的视图对象。视图解析器将解析出的视图对象返回给DispatcherServlet,并最终由DispatcherServlet将该视图对象转化为响应结果,呈现给用户。

注意:如果采用了其它视图,请配置对应的视图解析器,例如:

  • JSP的视图解析器:InternalResourceViewResolver
  • FreeMarker视图解析器:FreeMarkerViewResolver
  • Velocity视图解析器:VelocityViewResolver

5.3 提供视图

在WEB-INF目录下新建templates目录,在templates目录中新建html文件,例如:test.html,并提供以下代码:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Test</title>
</head>
<body>
<H1>TEST OK!!! Hello SpringMVC</H1>
</body>
</html>

5.4 编写Controller

返回逻辑视图名称(决定跳转到哪个页面)

@Controller
public class HelloController {@RequestMapping("/test")public String test(){return "test";}
}

6. 配置Tomcat

第一步:配置Tomcat服务器

image-20240406203450085

第二步:部署web模块到Tomcat服务器

注意:我们这里 /springmvc 就是我们的Web应用的根目录。

image-20240406203518858

7. 测试

开浏览器,在浏览器地址栏上输入地址:http://localhost:8080/springmvc/haha

image-20240406203756336

大功告成!!!

8. 执行流程总结

  1. 浏览器发送请求:http://localhost:8080/springmvc/test
  2. SpringMVC的前端控制器DispatcherServlet接收到请求,
  3. DispatcherServlet根据请求路径 /test 映射到 HelloController#名字随意(),调用该方法。
  4. HelloController#名字随意() 处理请求。
  5. HellController#名字随意() 返回逻辑视图名称 test给视图解析器.
  6. 视图解析器找到 /WEB-INF/templates/test.html 文件,并进行解析,生成视图解析对象返回给前端控制器DispatcherServlet。
  7. 前端控制器DispatcherServlet响应结果到浏览器。

9. 总结

以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。

如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/795953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 全局配置Gradle依赖及插件仓库

全局配置gradle依赖及插件仓库之后就不需要每个项目来一次国内仓库替换了。 直接在.gradle文件夹下添加文件init.gradle / init.gradle.kt for kotlin dsl. 如果同时存在init.gradle和init.gradle.kt&#xff0c;则优先按照init.gradle中的配置 除非手动指定初始化脚本 --in…

java.awt.FontFormatException: java.nio.BufferUnderflowException

Font awardFont Font.createFont(Font.TRUETYPE_FONT, awardFontFile).deriveFont(120f).deriveFont(Font.BOLD);使用如上语句创建字体时出现问题。java.awt.FontFormatException: java.nio.BufferUnderflowException异常表明在处理字体数据时出现了缓冲区下溢&#xff08;Buf…

Spring Boot实现Filter解决跨域问题

Filter&#xff08;过滤器&#xff09;是 Java Web 开发中的一种重要组件&#xff0c;用于在 Servlet 容器中对请求进行预处理或后处理&#xff0c;以及对响应进行处理。Filter 通常用于实现一些与请求和响应相关的功能&#xff0c;如身份验证、日志记录、字符编码转换、跨域请…

Linux使用docker集群部署

目录 一&#xff0c;环境准备 1.1.安装docker 1.2.配置镜像就加速器 二&#xff0c;docker部署 2.1.创建网络 ​编辑 2.2.安装redis 2.3.安装MySQL 2.4.安装JDK,TomCat及部署后台项目 2.5.安装Nginx及配置静态资源 一&#xff0c;环境准备 1.1.安装docker 安装yum-u…

windows访问wsl中的docker

1、启动windows路由转发功能&#xff1a; 找到任务管理器 --》服务–》打开服务–》 ROUTing and Remote Access 2、关闭wsl中linux的防火墙 3、查看docker系统和linux系统的ip和网关 以下面为例 # docker系统 eth0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu…

Spring Boot-01-通过一个项目快速入门

官方参考文档&#xff1a;Spring Boot Reference Documentation 0. 概述 Spring的缺点&#xff1a; 1. 配置繁琐&#xff1a;虽然Spring的组件代码是轻量级&#xff0c;但它的配置却是重量级的。 2. 依赖繁琐&#xff1a;项目的依赖管理也是一件耗时耗力的事情。分析要导入哪…

qt MVC软件设计模式

在Qt中使用MVC&#xff08;Model-View-Controller&#xff09;软件设计模式可以帮助你将数据模型、用户界面和控制逻辑有效地分离&#xff0c;从而使得代码更清晰&#xff0c;更易于维护和扩展。以下是在Qt中使用MVC模式的一般思路&#xff1a; Model&#xff08;模型&#xff…

动手学深度学习 | Jupyter Notebook 打开指定目录

目录 1 下载课件代码 2 在目录中打开 3 展示目录失败 3.1 问题分析 3.2 问题解决 ⚠️ 写在前面&#xff1a; 无语子&#xff0c;打开个目录花了我一天时间下文中提到的 “d2l-zh” 和 “pytorch” 均为目录名jupyter notebook 的安装请参考其它博客 1 下载课件代码…

传入标签 sql按标签筛选数据 数据必须符合标签

可以使用 SQL 的 WHERE 子句来按标签筛选数据。以下是一个示例 SQL 查询语句&#xff1a; SELECT * FROM 表名 WHERE 标签字段 要筛选的标签;其中&#xff0c;表名是要从中筛选数据的表的名称&#xff0c;标签字段是包含标签值的字段的名称&#xff0c;要筛选的标签是希望筛选…

计算机出现msvcr110.dll丢失是什么意思?七种方法解决msvcr110.dll丢失

msvcr110.dll文件是一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;由Microsoft Corporation开发。它是Visual C Redistributable for Visual Studio 2012的必要部分&#xff0c;包含了C运行时库函数的代码&#xff0c;这些函数为执行C/C应用程序提供了基础服务。这…

基于Socket简单的TCP网络程序

⭐小白苦学IT的博客主页 ⭐初学者必看&#xff1a;Linux操作系统入门 ⭐代码仓库&#xff1a;Linux代码仓库 ❤关注我一起讨论和学习Linux系统 TCP单例模式的多线程版本的英汉互译服务器 我们先来认识一下与udp服务器实现的不同的接口&#xff1a; TCP服务器端 socket()&…

设置你的第一个React应用

目录 一、React入门 1.1 你好React 1.2 创建React 1.3 应用结构 二、总结 2.1 定义组件 2.2 组件源码 三、组件详解 注意事项 3.1 组件三部曲 3.2 组件通信 —— props 3.3 对象数组迭代 —— map() 3.4 事件处理 3.5 钩子函数 —— useState() 初次学习最终效果…

最长上升子序列2

最长上升子序列2 时间限制&#xff1a;1秒 内存限制&#xff1a;64M 题目描述 给定一个长度为 N 的数列&#xff0c;求数值严格单调递增的子序列的长度最长是多少。 输入描述 第一行包含整数 N。 第二行包含 N 个整数&#xff0c;表示完整序列。 输出描述 输出一…

wireshark数据流分析学习日记day3-从 Pcap 导出对象

从 HTTP 流量导出文件 过滤http请求 发现get请求上传了两个文件 保存即可 也可以保存网页 点击保存 改文件名为html结尾以便于访问 请谨慎使用此方法。如果从 pcap 中提取恶意 HTML 代码并在 Web 浏览器中查看它&#xff0c;则 HTML 可能会调用恶意域&#xff0c;这就是为什么…

HTML——5.表单、框架、颜色

一、表单 HTML 表单用于在网页中收集用户输入的数据&#xff0c;例如登录信息、搜索查询等。HTML 提供了一系列的表单元素&#xff0c;允许用户输入文本、选择选项、提交数据等。 <!DOCTYPE html> <html lang"en"> <head> <meta charset&q…

01.IDEA中出现Cannot resolve symbol ‘SpringApplication异常

试了很多次&#xff0c;看了这篇文章终于发现了问题。IDEA解决springboot工程中Cannot resolve symbol SpringApplication异常-CSDN博客 我存在的问题在于Maven home path有误&#xff0c;改正之后就没有问题&#xff0c;不标红了。

C语言实现快速排序算法

1. 什么是快速排序算法 快速排序的核心思想是通过分治法&#xff08;Divide and Conquer&#xff09;来实现排序。 算法的基本步骤是: 1. 选择一个基准值&#xff08;通常是数组中的某个元素&#xff09;&#xff0c;将数组分成两部分&#xff0c;使得左边的部分所有元素都小于…

RabbitMQ3.13.x之六_RabbitMQ使用场景

RabbitMQ3.13.x之六_RabbitMQ使用场景 文章目录 RabbitMQ3.13.x之六_RabbitMQ使用场景1. 为什么选择 RabbitMQ&#xff1f;1. 可互操作2. 灵活3. 可靠 2. 常见用户案例1. 服务解耦2. 远程过程调用3. 流处理4. 物联网 1. 为什么选择 RabbitMQ&#xff1f; RabbitMQ 是一个可靠且…

C语言 | Leetcode C语言题解之第8题字符串转换整数atoi

题目&#xff1a; 题解&#xff1a; int myAtoi(char * s){int i0;int out0;int pol1;int lenstrlen(s);if(len0) return 0;while(s[i] ) i; //删除空格if(s[i]-){ //判断正负pol-1;i;}else if(s[i]){pol1;i;}else{pol1;}while(s[i]!\0){if(s[i]<0||s[i]>9){ /…

算法学习(十七)规律

规律 1. 概念 模拟题目过程探索问题规律找出隐含条件 2. 解题技巧&#xff08;我的总结&#xff09; 1> 将 问题中的抽象条件 找出实际意思 题目说明实现649. Dota2 参议院题中每个议员最好表现 禁止后面最近的对方议员 或 禁止前面最远的对方议员我的提交1702. 修改后的…