Web应用技术(第十六周/持续更新)

news2024/11/25 1:07:06

本次联系基于how2j的教程完成对SpringBoot的初步学习。

初识Springboot

  • 学习导入:
  • 1.第一个基于SpringBoot的项目:
    • (1)application.java:
      • 该文件中的核心代码:
    • (2)HelloController.java:
      • 该文件的核心部分——两个注解:
        • @RestController:
        • @RequestMapping:
    • (3)pom.xml:
    • (4)运行效果:
    • (5)运行流程:
    • (6)Vue的路由和Web应用程序的路由:
  • 2.SpringBoot部署——war包方式:
  • 3.SpringBoot+MyBatis(注解方式):
  • 4.SpringBoot+MyBatis(配置文件方式):
  • 5.基于SpringBoot的CRUD:

学习导入:

在学习SpringBoot前,我们已经学习过SSM了,即Spring、SpringMVC、MyBatis,SpringBoot是与Spring对标的,那么我们可以在学习之前向自己提两个问题:

  • 什么是SpringBoot?
  • 它和Spring有什么区别和联系(为什么要学SpringBoot)?

Spring Boot是一个用于创建基于Spring框架的快速应用程序的开源Java开发框架。它提供了开箱即用的配置,使得开发者可以更加专注于应用程序的业务逻辑而不是繁琐的配置工作。它的核心思想是约定优于配置,即根据一些默认约定来自动配置应用程序,从而简化了开发流程。

Spring Boot是Spring框架的扩展和增强,它建立在Spring框架之上并提供了许多方便的功能。以下是Spring Boot和Spring的区别和联系:

区别:

  • 编码风格不同:Spring Boot鼓励使用Java Config而非XML配置来构建应用程序,并且提供了一些简化的注解用于快速创建Bean,从而使得开发流程更加高效。

  • 自动化配置不同:Spring框架需要手动配置大量的组件来启动应用程序,例如Servlet容器、数据库连接等。而Spring Boot则采用约定优于配置的方式,自动配置这些组件,从而减少了繁琐的配置工作。

  • 依赖管理不同:Spring Boot提供了一个基于Maven或Gradle的依赖管理工具,可以方便地添加所需的各种依赖库,并自动处理版本冲突问题。

联系:

  • 共享Spring核心功能:Spring Boot建立在Spring框架的核心组件之上,包括IoC容器、AOP、数据访问、Web、测试等。因此,Spring Boot应用程序可以像普通的Spring应用程序一样使用这些核心组件。

  • Spring Boot应用程序可以使用Spring框架的所有扩展:Spring Boot应用程序可以使用Spring框架中的所有扩展,例如Spring Security、Spring Data等。

下面是一个简单的示例代码,演示了如何在Spring Boot中创建一个Web应用程序,并使用Spring框架中的IoC容器来管理Bean:

@RestController // 声明这是一个RESTful API控制器
@SpringBootApplication // 标记这是一个Spring Boot应用程序
public class MyApplication {

    @Autowired
    private MyService myService; // 使用@Autowired注解自动装配MyService Bean

    @GetMapping("/") // 处理HTTP GET请求的路由
    public String home() {
        return "Hello, " + myService.getMessage(); // 返回"Hello, World!"
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args); // 启动Spring Boot应用程序
    }
}

@Service // 标记这是一个Spring管理的Bean
public class MyService {

    public String getMessage() {
        return "World!"; // 返回字符串"World!"
    }
}

在上面的代码中,@RestController和@GetMapping注解是Spring Boot的特有标记,用于创建RESTful API。而@Autowired和@Service注解则是Spring框架的核心组件,用于IoC容器的依赖注入和Bean的创建。可以看到,Spring Boot和Spring框架是密切相关的,共同构建了现代Java应用程序的基础。

1.第一个基于SpringBoot的项目:

how2j上的项目建设和部署流程很清楚,我不赘述了,下面我提供带有注释的代码,并且附上一些我的个人理解。

(1)application.java:

package com.how2java.springboot;

import org.springframework.boot.SpringApplication; //导入SpringApplication类
import org.springframework.boot.autoconfigure.SpringBootApplication; //导入SpringBootApplication类
import org.springframework.boot.builder.SpringApplicationBuilder; //导入SpringApplicationBuilder类
import org.springframework.boot.web.servlet.ServletComponentScan; //导入ServletComponentScan类
import org.springframework.boot.web.support.SpringBootServletInitializer; //导入SpringBootServletInitializer类

@SpringBootApplication //声明该类为Spring Boot应用程序的入口
@ServletComponentScan //扫描带有@WebServlet、@WebFilter、@WebListener注解的组件
public class Application extends SpringBootServletInitializer { //继承SpringBootServletInitializer类,以支持war包形式的部署

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { //重写configure方法,以支持war包形式的部署
		return application.sources(Application.class); //返回SpringApplicationBuilder对象
	}

	public static void main(String[] args) { //应用程序的入口
		SpringApplication.run(Application.class, args); //启动Spring Boot应用程序
	}
}

该文件中的核心代码:

SpringApplication.run(Application.class, args); //启动Spring Boot应用程序

SpringApplication.run(Application.class, args)是用于启动Spring Boot应用程序的方法,其具体解析如下:

  • SpringApplication是Spring Boot中的一个静态类,提供了各种启动和配置Spring Boot应用程序的方法。

  • run()方法是启动Spring Boot应用程序的入口点。它需要两个参数:主要配置类的Class对象和main方法的args数组。

  • Application.class是主要配置类的Class对象。在Spring Boot应用程序中,我们需要创建一个Java类作为主要配置类,并在其中定义应用程序的配置信息、数据源等组件。在这里,我们将Application类作为主要配置类的Class对象传递给run()方法。

  • args是main方法接收到的命令行参数。通常情况下,我们不需要传递任何参数给run()方法,直接传递空数组即可。

当调用SpringApplication.run(Application.class, args)方法时,Spring Boot会执行以下步骤:

  1. 加载主要配置类,并创建Spring IoC容器。

  2. 自动扫描并注册所有的Bean组件。

  3. 根据配置信息自动装配Bean组件之间的依赖关系。

  4. 启动内嵌的Web服务器(例如Tomcat或Jetty)。

  5. 监听HTTP请求,并将请求分发到相应的控制器进行处理。

(2)HelloController.java:

// 定义了Java包名,即该类所在的包。
package com.how2java.springboot.web;

// 导入了org.springframework.web.bind.annotation.RequestMapping类,用于处理HTTP请求的注解。
// 导入了org.springframework.web.bind.annotation.RestController类,用于声明该类为RESTful风格的控制器。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

// 使用@RestController注解标记该类为RESTful控制器。
@RestController
public class HelloController {

    // 使用@RequestMapping注解标记该方法为处理HTTP请求的方法,其中"/hello"表示请求的URL路径。
    @RequestMapping("/hello")
    // 定义了该方法的具体实现,即返回一个字符串"Hello Spring Boot!"。
    public String hello() {
        return "Springboot测试!";
    }

}

该文件的核心部分——两个注解:

@RestController:

@RestController是一个Spring MVC注解,它用于声明一个类为RESTful风格的控制器。在Spring Boot应用程序中,我们通常使用@RestController来定义RESTful Web服务。

具体来说,@RestController注解告诉Spring MVC框架,该类是一个控制器,并且该控制器的每个方法都会返回一个HTTP响应,而不是一个视图。这意味着,当我们使用@RestController注解标记一个控制器类时,Spring MVC框架会自动将该类的方法返回的数据转换成相应的HTTP响应,并将其发送给客户端。

@RequestMapping:

@RequestMapping是SpringMVC的注解,相信大家已经很熟悉了,简单来说,它的功能就是为当前的控制器打一个标记,以便浏览器通过Tomcat 根据HTTP请求的URL,顺利地找到这个控制器。

(3)pom.xml:

<!-- 定义了Maven项目的POM文件 -->
<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">
    <!-- 定义了Maven模型的版本号 -->
    <modelVersion>4.0.0</modelVersion>

  <!-- 定义了项目的groupId -->
  <groupId>com.how2java</groupId>
  <!-- 定义了项目的artifactId -->
  <artifactId>springboot</artifactId>
  <!-- 定义了项目的版本号 -->
  <version>0.0.1-SNAPSHOT</version>
  <!-- 定义了项目的名称 -->
  <name>springboot</name>
 	<packaging>war</packaging>
  <!-- 定义了项目的描述 -->
 
  <description>springboot</description>
  
    <!-- 定义了项目的父级依赖,即使用了Spring Boot的starter parent,版本为1.5.9.RELEASE。 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>

    <!-- 定义了项目的依赖,包括spring-boot-starter-web和junit,其中junit的scope为test,表示只在测试时使用。 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>           
        </dependency>
        
	    <dependency>
		      <groupId>junit</groupId>
		      <artifactId>junit</artifactId>
		      <version>3.8.1</version>
		      <scope>test</scope>
	    </dependency>
    </dependencies>

    <!-- 定义了项目的属性,包括Java版本为1.8。 -->
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <!-- 定义了项目的构建配置,包括使用Spring Boot的Maven插件进行构建。 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

这个文件定义了Maven工程项目的配置信息及项目的相关依赖。

(4)运行效果:

运行Application.java,访问地址:http://127.0.0.1:8080/hello

在这里插入图片描述

(5)运行流程:

当我们运行第一个文件时,实际上启动了一个SpringBoot应用程序。SpringBoot应用程序会启动一个内嵌的Tomcat服务器并开始监听HTTP请求,将请求分发到相应的控制器进行处理。

在第二个文件中,我们定义了一个RESTful控制器,它包含一个处理HTTP请求的方法,即hello()方法。当我们访问http://127.0.0.1:8080/hello时,Tomcat服务器会将请求路由到该控制器的hello()方法中,并返回该方法的返回值,即Springboot测试!字符串。因此,我们可以在浏览器中看到该字符串的内容。

(6)Vue的路由和Web应用程序的路由:

由于最近打算用Vue来做课设,在Vue的学习过程中也见到了这个名词

Vue.js官方文档中,路由(Router)被定义为管理应用程序中视图之间导航的机制。Vue
Router是Vue.js官方提供的路由管理器,允许我们通过URL路径来定义应用程序的不同视图,并且可以通过路由参数来传递数据。

举个例子,如果我们正在开发一个电子商务网站,我们可能需要在不同的页面中展示不同的商品列表。我们可以使用Vue Router来实现这个功能。首先,我们需要在Vue应用程序中安装Vue Router,并在Vue实例中声明路由器:

import Vue from 'vue'
import VueRouter from 'vue-router'
import ProductList from './components/ProductList.vue'
import ProductDetails from './components/ProductDetails.vue'

Vue.use(VueRouter)

const routes = [
  { path: '/', component: ProductList },
  { path: '/product/:id', component: ProductDetails, props: true }
]

const router = new VueRouter({
  routes
})

在这个例子中,我们定义了两个路由:一个是根路径(’/’),对应于商品列表页面,另一个是’/product/:id’,对应于商品详情页面。我们还通过props选项将路由参数传递给ProductDetails组件。

然后,在Vue实例中,我们需要将路由器添加到Vue实例中:

new Vue({
  router,
  el: '#app'
})

最后,在模板中,我们可以使用router-link组件来生成链接到不同的路由:

<router-link to="/">Product List</router-link>
<router-link :to="{ name: 'product', params: { id: 1 }}">Product Details</router-link>

在这个例子中,我们使用router-link组件生成两个链接:一个链接到根路径(’/’),另一个链接到商品详情页面。通过使用路由器和router-link组件,我们可以轻松地实现在Vue应用程序中进行页面导航的功能。


而在Web应用程序中,路由是指将HTTP请求映射到相应的处理程序或控制器的过程。当客户端发送HTTP请求时,服务器会根据请求的URL路径和其他参数选择相应的处理程序或控制器来处理请求,并返回相应的响应。这个过程就是路由。

在Spring Boot应用程序中,路由是通过Spring MVC框架来实现的。当我们定义一个控制器类,并在其中定义一个处理HTTP请求的方法时,我们可以使用Spring MVC的注解来将该方法映射到一个特定的URL路径。例如,在第二个文件中,我们使用了@RequestMapping("/hello")注解将hello()方法映射到/hello路径。当客户端发送一个HTTP GET请求到/hello路径时,Spring MVC框架会自动将该请求路由到hello()方法,并执行该方法的代码。该方法可以返回任何类型的数据,例如字符串、JSON对象等,Spring MVC框架会将该数据转换成相应的HTTP响应,并将其发送给客户端。

2.SpringBoot部署——war包方式:

3.SpringBoot+MyBatis(注解方式):

4.SpringBoot+MyBatis(配置文件方式):

5.基于SpringBoot的CRUD:

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

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

相关文章

一. ATR技术指标的定义与运用

一. ATR的定义 1. 什么是ATR ATR英文全名是Average true range&#xff0c;翻译过来就是平均真实波幅&#xff0c;这个指标主要用来衡量最近N天TR(真实波幅)的平均值。 2. ATR相关计算公式 T R [ ( 最高价 − 最低价 ) &#xff0c; ( 前一次收盘价 − 最高价 ) &#xff0…

macOS Sonoma 14.0 Beta 1 (23A5257q) Boot ISO 原版可引导镜像

macOS Sonoma 14.0 Beta 1 (23A5257q) Boot ISO 原版可引导镜像 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Windows 和…

OAuth2.0 授权 OpenID Connect 身份认证

文章目录 OAuth2.0历史由来名词解释授权码模式&#xff08;authorization code 最常用&#xff09;先换取code&#xff0c;再根据 code 换取 access_token原因 简化模式&#xff08;implicit&#xff09;密码模式&#xff08;resource owner password credentials&#xff09;客…

【P49】JMeter 查看结果树(View Results Tree)

文章目录 一、查看结果树&#xff08;View Results Tree&#xff09;参数说明二、准备工作三、测试计划设计 一、查看结果树&#xff08;View Results Tree&#xff09;参数说明 可以查看取样器的请求参数、返回结果 使用场景&#xff1a;一般在调试测试计划期间用来查看取样…

Bigdata1234.cn课堂测试

Java源文件中有一个公共类名称为Test&#xff0c;则该源文件名必须是&#xff1a;Test.java . Java中的基本数据类型共有8个&#xff1a;byte、short、int、long、float、double、char、boolean。 . Eclipse中内容补全的快捷键是alt/ Eclipse 中自动导包的快捷键是 Ctrl Sh…

MySQL数据库从入门到精通学习第8天(表数据的查询)

表数据的查询 基本查询语句单表查询聚合函数查询多表连接查询子查询合并查询结果定义表和字段的别名使用正则表达式查询 基本查询语句 SELECT 语句非常的强大&#xff0c;是最常用的查询语句。他具有一个固定的格式&#xff0c;如下&#xff1a; SELECT 查询的内容 FROM 数据…

【Mysql数据库从0到1】-入门基础篇--mysql 多表查询

【Mysql数据库从0到1】-入门基础篇--mysql 多表查询 &#x1f53b;一、mysql 多表查询1.1 &#x1f343; 7种sql joins 的实现1.2 &#x1f343; 错误写法---笛卡尔积错误1.3 &#x1f343; 正确的多表select写法 &#x1f53b;二、内连接( inner) join&#x1f53b;三、 外连接…

100天精通Golang(基础入门篇)——第2天:学习Go语言的前世今生:一门强大的编程语言的崛起

&#x1f337; 博主 libin9iOak带您 Go to Golang Language.✨ &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &#x1f30a; 《I…

如何构建一个可实盘的跨期套利策略?

一、策略摘要 跨期套利&#xff0c;在同一个品种但不同月份的期货合约上建立仓位相同、方向相反的交易头寸&#xff0c;最后以对冲或交割方式结束交易、获得收益。因其合约价差具有较好的稳定性&#xff0c;被众多交易者所青睐。本篇内容我们将通过掘金量化平台构建一个可交易…

私募证券基金动态-23年5月报

成交量&#xff1a;5月日均11,342.95亿元 2023年5月A股两市日均成交9,284.12亿元&#xff0c;环比下降18.15%、同比上升10.56%。5月整体20个交易日&#xff0c;仅有月初5个交易日单日成交金额过万亿。 管理人&#xff1a;新提交备案6家&#xff0c;备案通过0家 2023年5月新提…

Shape-Erased Feature Learning for Visible-Infrared Person Re-Identification

Shape-Erased Feature Learning for Visible-Infrared Person Re-Identification&#xff08;形状擦除特征学习在可见红外人物再识别中的应用&#xff09; 期刊合集&#xff1a;最近五年&#xff0c;包含顶刊&#xff0c;顶会&#xff0c;学报>>网址 文章来源&#xff1…

Lecture 10 Distributional Semantics

目录 Problems of Lexical Database 词汇数据库的问题分布假设根据上下文猜测单词含义Word vectors 词向量词嵌入Count-based Word Vectors 基于计数的方法Document as Context: The Vector Space Model 向量空间模型TF-IDFDimensionality Reduction 降维 Words as Context 单词…

跨数据中心高可用架构设计

前言 随着常年的码代码&#xff0c;做设计&#xff0c;笔者做过基础编码&#xff0c;云计算平台&#xff0c;架构师&#xff0c;见过不少应用设计&#xff0c;系统设计&#xff0c;中间件&#xff0c;了解现有的技术体系发展模式&#xff0c;集中式->分布式&#xff1b;cap…

阿里8年,肝到P7只剩这份笔记了,已助朋友拿到15个Offer....

时光飞逝&#xff0c;转眼间在阿里工作了8年&#xff0c;工作压力大&#xff0c;节奏快&#xff0c;但是从技术上确实得到了成长&#xff0c;尤其是当你维护与大促相关的系统的时候&#xff0c;熬到P7也费了不少心思 我的职业生涯开始和大多数测试人一样&#xff0c;刚开始接触…

Redis进阶:分布式锁问题

分布式锁问题 1. 分布式锁问题1.1 问题介绍1.2 解决方案1.2.1 分布式锁主流的实现方案1.2.2 使用Redis实现分布式锁1.2.3 分布式锁需要满足的四个条件 1.3 实现分布式锁 1. 分布式锁问题 1.1 问题介绍 单机单体中的锁机制在分布式集群系统中失效&#xff1b;单纯的Java API并…

Linux快速安装MySQL

文章目录 Linux上安装MySQL1. 安装MySQL1&#xff09;上传MySQL安装包以及MySQL驱动jar包2&#xff09;解压MySQL安装包3&#xff09;卸载系统自带的mariadb4&#xff09;安装MySQL依赖5&#xff09;安装mysql-client6&#xff09;安装mysql-server7&#xff09;启动MySQL8&…

案例27:基于Java宠物领养系统开题报告设计

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

性能测试之Docker监控

相信很多程序员在进行性能测试时常常会遇到一些问题&#xff0c;比如如何监控Docker容器的运行状态。这时候&#xff0c;Docker监控工具就派上了用场。 我曾经也遇到过这样的问题&#xff0c;不知道如何获取Docker容器的性能数据&#xff0c;直到我发现了Docker监控工具。使用…

干货分享 | TSMaster小功能之实时注释在图形中的使用技巧

今天给大家介绍TSMaster功能之实时注释在图形中的使用技巧&#xff0c;主要通过手动注释、自动化注释、实时注释在记录与回放中的运用等三方面来进行介绍。 一、实时注释的作用 在了解实时注释的使用技巧之前&#xff0c;我们先了解一下实时注释是什么以及它的作用。 实时注释…

算法修炼之筑基篇——筑基二层初期(解决最长回文子串问题,马拉车(manacher)算法模板)

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇 &#x1f353;专栏&#xff1a;算法修炼之筑基篇 ✨博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;学习了算法修炼之练气篇想必各位蒟蒻们的基础已经非常的扎实了&#xff0c;下来…