【SpringMVC】SpringMVC的入门程序——HelloWorld(有点详细)

news2024/11/25 1:40:13

介绍

这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长!

以下为小编最喜欢的两句话:

要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。

一个人为什么要努力? 我见过最好的答案就是:因为我喜欢的东西都很贵,我想去的地方都很远,我爱的人超完美。因此,小编想说:共勉!

目录

一、SpringMVC简介

1、什么是MVC

2、什么是SpringMVC

3、SpringMVC的特点

二、HelloWorld

1、开发环境

2、创建maven工程

3、配置web.xml

1)默认配置方式

2)扩展配置方式

4、创建请求控制器

5、创建springmvc的配置文件

6、测试HelloWorld


一、SpringMVC简介

1、什么是MVC

MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分

M:Model,模型层,指工程中的JavaBean,作用是处理数据

JavaBean分为两类:

  • 一类称为实体类Bean:专门存储业务数据的,如 Student、User 等

  • 一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。

V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据

C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器

MVC的工作流程: 用户通过视图层发送请求到服务器,在服务器中请求被Controller接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果找到相应的View视图,渲染数据后最终响应给浏览器

2、什么是SpringMVC

SpringMVC是Spring的一个后续产品,是Spring的一个子项目

SpringMVC 是 Spring 为表述层开发提供的一整套完备的解决方案。在表述层框架历经 Strust、WebWork、Strust2 等诸多产品的历代更迭之后,目前业界普遍选择了 SpringMVC 作为 Java EE 项目表述层开发的首选方案

注:三层架构分为表述层(或表示层)、业务逻辑层、数据访问层,表述层表示前台页面和后台servlet

3、SpringMVC的特点

  • Spring 家族原生产品,与 IOC 容器等基础设施无缝对接

  • 基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理

  • 表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案

  • 代码清新简洁,大幅度提升开发效率

  • 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可

  • 性能卓著,尤其适合现代大型、超大型互联网项目要求

二、HelloWorld

1、开发环境

IDE:idea 2022.3.2

JDK:jdk1.8

构建工具:maven3.8.1

服务器:tomcat9.0.75(下图中tomcat的名字虽然为10.0.27但是实际使用的是9.0.75,注意分辨)

Spring版本:5.3.1

2、创建maven工程

创建新的项目,选择maven项目

1)创建成功后pom.xml文件为下图的样子(打包方式为war包,因为在tomcat下运行的),不过还需要添加其他的依赖

2)左边的目录栏会出现webapp的文件夹,以及WEB-INF文件夹、子级web.xml、index.jsp

 

 添加其他的一些依赖

<!-- SpringMVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.1</version>
    </dependency>

    <!-- 日志 -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>

    <!-- ServletAPI -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>

小插曲

springmvc pom.xml文件中 <scope>provided</scope>有什么含义?

在SpringMVC的pom.xml文件中,<scope>provided</scope>是用来指定依赖的作用范围,其含义如下:

1)当一个依赖声明为<scope>provided</scope>时,表示这个依赖在编译和测试阶段需要使用,但是在打包成war包或者jar包时不需要打包进去,因为这个依赖在应用程序的服务器容器中已经存在。
2)在开发Web应用程序时,常见的可提供范围依赖包括Java Servlet API、Java Server Pages(JSP)API、JavaServer Faces(JSF)API等。这些API是Web容器提供的,因此编写Web应用程序时需要使用这些API,但是在部署Web应用程序时无需将这些API打包进入war包中。

需要注意的是,虽然<scope>provided</scope>指定的依赖不会打包进入war包或者jar包中,但是在开发和测试阶段需要将这些依赖添加到类路径中,否则会出现编译错误或运行时错误。

使用不同的工具类打war包,war包路径不同

在使用IntelliJ IDEA中通过Tomcat打成war包时,默认情况下war包会生成在工程的/target目录下。

具体来说,使用IntelliJ IDEA打成war包的步骤为:

1. 点击菜单栏中的“Build” -> “Build Artifacts...”打开“Build Artifacts”窗口。
2. 在“Build Artifacts”窗口中,选择需要打包的Web工程,然后点击底部的“Build”按钮。
3. 在弹出的“Build Artifacts”对话框中,选择“Build”或“Rebuild”操作,并勾选“Build 'artifact-name.war'”选项,最后点击“OK”按钮。
4. 打包完成后,war包会生成在工程的/target目录下,其中artifact-name为你在“Build Artifacts”窗口中设置的artifact名称。

需要注意的是,如果你使用的是Tomcat插件来启动Tomcat服务器,那么war包也会自动发布到Tomcat服务器目录中,例如在启动Tomcat时,会发现在Tomcat安装目录下的webapps目录中会出现一个对应Web工程的war包。

3、配置web.xml

注册SpringMVC的前端控制器DispatcherServlet

有两种方式可以去配置

1)默认配置方式

此配置作用下,SpringMVC的配置文件默认位于WEB-INF下,默认名称为springMVC-servlet.xml,一般配置文件都在resources下,所以小编不使用此方式

<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <!--
        设置springMVC的核心控制器所能处理的请求的请求路径
        /所匹配的请求可以是/login或.html或.js或.css方式的请求路径
        但是/不能匹配.jsp请求路径的请求
    -->
    <url-pattern>/</url-pattern>
  </servlet-mapping>

2)扩展配置方式

可通过init-param标签设置SpringMVC配置文件的位置和名称,通过load-on-startup标签设置SpringMVC前端控制器DispatcherServlet的初始化时间

<!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
    <init-param>
      <!-- contextConfigLocation为固定值 -->
      <param-name>contextConfigLocation</param-name>
      <!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--
         配置加载顺序 正数 按顺序执行
 		(作为框架的核心组件,在启动过程中有大量的初始化操作要做
		而这些操作放在第一次请求时才执行会严重影响访问速度
		因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时)
	-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <!--
        设置springMVC的核心控制器所能处理的请求的请求路径
        /所匹配的请求可以是/login或.html或.js或.css方式的请求路径
        但是/不能匹配.jsp请求路径的请求
    -->
    <url-pattern>/</url-pattern>
  </servlet-mapping>

注:

<url-pattern>标签中使用/和/*的区别:

/所匹配的请求可以是/login或.html或.js或.css方式的请求路径,但是/不能匹配.jsp请求路径的请求

因此就可以避免在访问jsp页面时,该请求被DispatcherServlet处理,从而找不到相应的页面

/*则能够匹配所有请求,例如在使用过滤器时,若需要对所有请求进行过滤,就需要使用/*的写法

 web.xml的全部配置

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--字符编码过滤器-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!--指定字符集-->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <!-- 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理 -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
    <init-param>
      <!-- contextConfigLocation为固定值 -->
      <param-name>contextConfigLocation</param-name>
      <!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--
         配置加载顺序 正数 按顺序执行
 		(作为框架的核心组件,在启动过程中有大量的初始化操作要做
		而这些操作放在第一次请求时才执行会严重影响访问速度
		因此需要通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时)
	-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <!--
        设置springMVC的核心控制器所能处理的请求的请求路径
        /所匹配的请求可以是/login或.html或.js或.css方式的请求路径
        但是/不能匹配.jsp请求路径的请求
    -->
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

4、创建请求控制器

由于前端控制器对浏览器发送的请求进行了统一的处理,但是具体的请求有不同的处理过程,因此需要创建处理具体请求的类,即请求控制器

请求控制器中每一个处理请求的方法成为控制器方法

因为SpringMVC的控制器由一个POJO(普通的Java类)担任,因此需要通过@Controller注解将其标识为一个控制层组件,交给Spring的IoC容器管理,此时SpringMVC才能够识别控制器的存在

注意:如果在创建maven项目的时候,不出现java文件夹的话,需要创建一个普通的文件夹,并将它标记为sources root

 变为下图的颜色,即为java类

 HelloController

package com.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author:Lyn.R
 * @date:2023-05-24 23:12:09
 * @Description:
 * @note:
 **/
@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "success";
    }
}

5、创建springmvc的配置文件

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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--扫描组件-->
    <context:component-scan base-package="com.springmcv"/>
    <!--视图解析器-->
    <bean id="internalResourceView" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--告诉前端控制器,所有的静态资源都不要拦截-->
    <mvc:default-servlet-handler/>
    <!--    <mvc:resources mapping="/js/**/" location="/js/"/>-->
    <!--开启SpringMVC 框架注释支持  默认加载 映射器和适配器-->
    <!--    <mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/>-->
    <mvc:annotation-driven/>
</beans>

6、测试HelloWorld

index.jsp

 WEB-INF/pages/success.jsp(这个地方对应你的controller层return返回的地方,因为之前配置了视图解析器)

 最后的详细目录

运行成功,在浏览器的下面的地址localhost:8080/SpringMVC_helloworld_war_exploded/

可以看到index.jsp成功的目录 ,点击图中的hello

 

注意:可能运行成功时,控制台出现中文乱码(虽然现在没什么影响,但是当出现一些错误时,没有日志的提醒还是很难受的,所以建议将它解决)

更改tomcat的conf/logging.properties

控制台不出现乱码

注意:更改之后可能需要重启才能成功

 以上就是小编所实践的内容,希望能够帮助到大家,感谢各位大佬的观看!!!

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

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

相关文章

GP05丨多因子IC对冲

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 大家好&#xff0c;今天我们分享股票社群第5期量化策略——多因子IC对冲。 在前几期中&#xff0c;我们分享了GP01多因子、ETF轮动策略及Plus版本、网格等等。本期我们继续分享多因子策略。 策略背景与…

大数据治理入门系列:数据血缘关系

血缘关系在人类社会中扮演着重要角色。大多数家庭是基于血缘关系形成的&#xff0c;而家庭作为社会的基本单元&#xff0c;对维系社会稳定发挥着重要关系。其实&#xff0c;数据之间也存在类似的血缘关系。数据从产生、加工、流转&#xff0c;一直到消亡&#xff0c;每个环节必…

为什么要分库分表?

不急于上手实战 ShardingSphere 框架&#xff0c;先来复习下分库分表的基础概念&#xff0c;技术名词大多晦涩难懂&#xff0c;不要死记硬背理解最重要&#xff0c;当你捅破那层窗户纸&#xff0c;发现其实它也就那么回事。 什么是分库分表 分库分表是在海量数据下&#xff0…

【新星计划·2023】TCP协议与UDP协议讲解

前言 对于TCP协议与UDP协议&#xff0c;大家应该都有所耳闻。我们常用的网络通讯&#xff0c;比如浏览网页&#xff0c;软件聊天&#xff0c;都是通过这两种协议来进行数据传输的&#xff0c;下面我就来给大家讲解一下这两个协议。 一、什么是TCP、UDP TCP(Transmission Con…

什么是接地电阻?如何测量防雷接地电阻

防雷工程里经常出现“接地”这个词。 这种称为“接地”的布线&#xff08;施工&#xff09;旨在减少电能泄漏到使用电力的设备等原始路线外&#xff08;泄漏时&#xff09;对周围财产和人体的影响。 此外&#xff0c;为了可靠地工作设备&#xff0c;以检测漏电断路器&#xff…

股东刚减持,股价却起飞?用Python量化A股解禁数据,利空出尽是利好? | 邢不行

2019年6月11日&#xff0c;宁德时代上市一周年之际&#xff0c;有45%的股票迎来了解禁。 这些由大股东、高管、早期投资者持有的股份&#xff0c;原先无法交易&#xff0c;但从这一天起就可以自由卖出了。 很多人出于对解禁后巨大卖盘的担忧纷纷提前卖出&#xff0c;导致宁德时…

linux查看服务端口命令大全

目录&#xff1a; 零、 linux怎么查看所有服务端口一、常用命令二、lsof -i 需要 root 用户的权限来执行三、netstat命令四、扩展资料 零、 linux怎么查看所有服务端口 1、打开linux系统&#xff0c;在linux的桌面的空白处右击。 2、在d出的下拉选项里&#xff0c;点击打开终端…

责任链模式-参数校验

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、责任链模式概念二、责任链模式主要应用场景三、责任链模式的优点四、责任链模式的缺点五、场景案例&#xff1a;参数校验1.UML图2.代码实现2.1.请求体定义2…

【信号变化检测】使用新颖的短时间条件局部峰值速率特征进行信号变化/事件/异常检测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

day16 - 提取图像前景

在我们平时使用购物软件是会发现通常在搜索框右侧都会有一个相机的标志&#xff0c;这个标志是可以让用户通过图片来搜索自己需要购买的内容。拍照购物将用户拍摄的商品与商品图库的图像进行对比&#xff0c;找到最为相似的商品。但是由于用户拍摄的图像是任意的随机的&#xf…

使用Arcgis免费获取全国地质数据

使用Arcgis免费使用全国地质数据 如今是大数据并发的时代&#xff0c;并且还是数据大开放的时代。全国地质资料馆开放了大量的地质资料数据&#xff0c;供全民使用。今天我在这里教大家使用免费的数据&#xff0c;帮助我们工作。 全国地质资料馆地址&#xff1a; http://www.ng…

基于广义Benders分解法的综合能源系统优化规划(matlab程序)

目录 1 主要内容 广义benders分解法流程图&#xff1a; 优化目标&#xff1a; 约束条件&#xff1a; 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《综合能源系统协同运行策略与规划研究》第四章内容基于广义Benders分解法的综合能源系统优化规划&…

图学习 [1]

图学习 [1] 图学习的主要任务 节点预测。节点预测任务是指利用图结构中已有的节点和边信息&#xff0c;通过机器学习算法对图中新添加的节点进行分类或回归预测的任务。链路预测。链路预测任务是指利用图结构中已有的节点和边信息&#xff0c;通过机器学习算法预测未来可能存…

【C++初阶】友元 + 内部类 + 匿名对象

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

欢迎所有用户! Elastic 扩展知识中心和支持中心

作者&#xff1a;Cory Mangini 对于所有云用户&#xff0c;我们有一些好消息&#xff1a;你现在可以访问我们的知识中心&#xff0c;在云试用期间请求技术支持&#xff0c;并通过 Elastic Support Hub 提出账单案例。 这意味着你可以利用我们的 Elasticians 多年来积累的丰富知…

基于html+css的图展示90

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

day20 - 绘制物体的运动轨迹

在我们平常做目标检测或者目标追踪时&#xff0c;经常要画出目标的轨迹图。绘制轨迹图的一种方法就是利用光流估计来进行绘制。 本期我们主要来介绍视频中光流估计的使用和效果&#xff0c;利用光流估计来绘制运动轨迹。 完成本期内容&#xff0c;你可以&#xff1a; 掌握视…

通过js来判断是否是横屏如果是就自刷新页面解决横屏之后只有屏幕一半宽度的问题

判断页面是横屏还是竖屏 window.addEventListener("load", rotate, false);window.addEventListener("onorientationchange" in window ? "orientationchange" : "resize", rotate, false);function rotate() {if (window.orientatio…

首个机器学习实时特征平台测试基准论文被 VLDB 2023 录取

国际顶级数据库学术会议 VLDB 2023 将于 2023 年 8 月份在加拿大温哥华举办。近日&#xff0c;由清华大学、新加坡国立大学、以及 OpenMLDB 社区联合完成的科研成果 - 业界第一个严谨的机器学习实时特征平台测试基准&#xff0c;被大会录取并且受邀在现场报告。论文题目为&…

Mybatis-动态SQL

1.什么是动态SQL? Mabits是一个Java持久化框架&#xff0c;它提供了动态SQL的功能。动态SQL是一种根据不同条件动态生成SQL语句的技术。在Mabits中&#xff0c;动态SQL通常是通过使用一组特殊的标签和代码块来实现的&#xff0c;这些标签和代码块可以根据条件包含或排…