《Spring Guides系列学习》guide46 - guide50

news2024/11/26 15:40:47

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。

在这里插入图片描述
接着上篇看过的guide45,接着往下看。

guide46、Serving Web Content with Spring MVC

Spring MVC 是 Spring Framework 的一个模块,它是一个基于 MVC(模型-视图-控制器)设计模式的 Web框架,用于构建 Web 应用程序。

在 Spring MVC
中,请求从客户端发送到控制器(Controller),然后控制器根据业务逻辑处理请求,并将结果传递给视图(View),最后视图将结果渲染成
HTML 或其他格式的响应发送给客户端。

Spring MVC 提供了一组易于使用的 API,用于处理 HTTP 请求和响应、验证用户输入、生成视图等等。它还支持多种视图技术,例如
JSP、Velocity、Freemarker、Thymeleaf 等等,可以根据需求选择适合的视图技术。

写一个controller:

@Controller
public class GreetingController {
    @GetMapping("/greeting")    
    public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {    
     model.addAttribute("name", name);        
    return "greeting";    }}

@RequestParam将查询字符串参数的值绑定name到方法name的参数中greeting(). World参数的值name被添加到一个Model对象中,最终使其可以被视图模板访问。

方法体的实现依赖于视图技术(在本例中为Thymeleaf)来执行 HTML 的服务器端呈现。

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head> 
    <title>Getting Started: Serving Web Content</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>

还有主页html:

<!DOCTYPE HTML>
<html>
<head> 
    <title>Getting Started: Serving Web Content</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p>Get your greeting <a href="/greeting">here</a></p>
</body>
</html>

执行下项目,结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


guide47、Creating Asynchronous Methods

@Async注解是核心:

Spring3开始提供了@Async注解,该注解可以标注在方法或者类上,从而可以方便的实现方法的异步调用。调用者在调用异步方法时将立即返回,方法的实际执行将提交给指定的线程池中的线程执行。

@Async注意事项:

  • @Async标注在类上时,表示该类的所有方法都是异步方法。
  • @Async注解的方法一定要通过依赖注入调用(因为要通过代理对象调用),不能直接通过this对象调用,否则不生效。
@Service
public class MyService {

    @Async
    public CompletableFuture<String> asyncMethod() {
        // 异步执行的方法体
        return CompletableFuture.completedFuture("Async method finished.");
    }

}

@Async注解被应用于asyncMethod()方法上,表明该方法应该被异步执行。方法返回一个CompletableFuture对象,表示异步操作的结果。当调用该方法时,它将在一个不同的线程上执行,并且调用线程不会被阻塞。

请注意,要使用@Async注解,必须在应用程序中启用异步支持。这可以通过在配置类上添加@EnableAsync注解来实现。例如:

@Configuration
@EnableAsync
public class AppConfig {
    // 配置异步执行器
    @Bean
    public Executor asyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);
        executor.setMaxPoolSize(20);
        executor.setQueueCapacity(50);
        executor.setThreadNamePrefix("MyAsyncThread-");
        executor.initialize();
        return executor;
    }}

在上面的示例中,我们配置了一个名为"asyncExecutor"的异步执行器,它使用线程池来管理异步执行的线程。这个执行器将被@Async注解使用。

执行方法也简单:

@RestController
@RequestMapping("/api/async/test/")
public class AsyncController {
    @Autowired
    MyService myService;
    // 有返回值
    @GetMapping("/withReturn")
    public String withReturn() {
        Future<String> future = myService.asyncMethod();
        try {
            String res = future.get();// 阻塞获取返回值
            System.out.println("res = " + res);
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
        return "success";
    }
}

参考文档:https://segmentfault.com/a/1190000041380298 以及gpt3.5-turbo问答能力


guide48、Building an Application with Spring Boot

没啥讲的,就是用spring boot创建一个应用程序。


guide49、Working a Getting Started guide with STS

用sts进行编程的新手入门指南,现在都用Intellij软件了。


guide50、Consuming a RESTful Web Service with jQuery

用jquery去访问restful 服务。

jQuery是一个JavaScript库,它简化了JavaScript编程,提供了许多易于使用的API,使得开发者可以更加方便地操作HTML文档、处理事件、实现动画效果、发起AJAX请求等。

创建hello.js

$(document).ready(function() {
    $.ajax({
        url: "http://rest-service.guides.spring.io/greeting"
    }).then(function(data) {
       $('.greeting-id').append(data.id);
       $('.greeting-content').append(data.content);
    });
});

这就是一个js函数了,访问了url,并且将返回的结果存到data中,将id和content添加到dom元素里。

再写一个index.html

<!DOCTYPE html>
<html>
    <head>
        <title>Hello jQuery</title>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
        <script src="hello.js"></script>
    </head>

    <body>
        <div>
            <p class="greeting-id">The ID is </p>
            <p class="greeting-content">The content is </p>
        </div>
    </body>
</html>

后端应用程序再写个Controller启动下,就可以在页面上看到结果了。
在这里插入图片描述

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

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

相关文章

《Python安全攻防:渗透测试实战指南》极致经典,学完即可包吃包住

前言 网络江湖&#xff0c;风起云涌&#xff0c;攻防博弈&#xff0c;从未间断&#xff0c;且愈演愈烈。从架构安全到被动纵深防御&#xff0c;再到主动防御、安全智能&#xff0c;直至进攻反制&#xff0c;皆直指安全的本质——攻防。未知攻&#xff0c;焉知防! 每一位网络安…

【Python】循环语句 ② ( while 嵌套循环 | 代码示例 - while 嵌套循环 )

文章目录 一、while 嵌套循环1、while 嵌套循环语法2、代码示例 - while 嵌套循环 一、while 嵌套循环 1、while 嵌套循环语法 while 嵌套循环 就是 在 外层循环 中 , 嵌套 内层循环 ; while 嵌套循环 语法格式 : while 外层循环条件:外层循环操作1外层循环操作2while 内存循…

VuePress + GitHub Actions 自动部署

文章目录 前言背景GitHub Actions简介基本概念引用 Actionworkflow 文件 自动部署创建 Action权限问题 小结参考文献 前言 我的第二本开源书籍《后台开发命令 365》上线啦。 为了方便阅读&#xff0c;使用 VuePress 将之前记录的后台常用 Linux 命令博文整理成一个系统的开源…

路径规划算法:基于阴阳对优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于阴阳对优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于阴阳对优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

Compose 没有 inputType 怎么过滤(限制)输入内容?这题我会!

前言 闲话 在我之前的文章 《Compose For Desktop 实践&#xff1a;使用 Compose-jb 做一个时间水印助手》 中&#xff0c;我埋了一个坑&#xff0c;关于在 Compose 中如何过滤 TextField 的输入内容。时隔好几个月了&#xff0c;今天这篇文章就是来填这个坑的。 为什么需要…

Doris

Aggregate 模型 是相同key的数据进行自动聚合的表模型。表中的列按照是否设置了 AggregationType&#xff0c;分为 Key&#xff08;维度列&#xff09;和 Value&#xff08;指标列&#xff09;&#xff0c;没有设置 AggregationType 的称为 Key&#xff0c;设置了 Aggregation…

散列表(哈希表)

目录 散列表 散列函数 散列表常用函数 1. 直接定址法 2. 除留余数法 2.1. exmple 3. 数字分析法 4. 平方取中法 5. 折叠法 处理冲突的方法 1. 开放定址法---线性探测 2. 二次探测法 3. 再Hash法 4. 拉链法(链地址法) 散列表&#xff08;Hash table&#xff0c;也…

Redis缓存击穿及解决问题

缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时候&#xff0c;恰好这时间点对这个 Key有大量的并发请求过来&#xff0c;这些请求发现缓存过期- -般都会从后端DB加载数据并回设到缓存&#xff0c;这个时候大并发的请求可能会瞬间把DB压垮。 解决方案有两种…

第五十四天学习记录:C语言进阶:动态内存管理Ⅱ

常见的动态内存错误 1、对NULL指针的解引用操作 int* p(int*)malloc(4); //p进行相关的判断 *p10;//malloc开辟空间失败&#xff0c;有可能对NULL指针解引用 free(p); pNULL;2、对动态开辟的内存的越界访问 int* p(int*)malloc(40);//10个int if(p!NULL) {int i0;//越界for(…

微服务项目租房网

文章目录 一、租房网项目的介绍1、使用的技术介绍2、使用的组件和开发工具的版本以及作用3、项目模块结构4、项目总体架构 二、环境搭建1、启动前端服务2、CentOS7各个组件的安装2.1 安装Docker2.2 安装JDK2.3 安装Redis(6390)2.4 安装FastDFS(8888)2.5 安装MongoDB(27017)2.6 …

Niagara—— 概述

目录 一&#xff0c;核心组件 Systems Emitters Modules Parameters 二&#xff0c;创建系统或发射器向导 System向导 Emetter向导 三&#xff0c;Niagara VFX工作流程 创建系统 创建或添加发射器 创建或添加模块 Niagara是最新一代VFX系统&#xff0c;无需程序员…

Junit测试框架详解

目录 Junit框架 导入Junit到项目 Junit注解 Test Disabled BeforeAll / AfterAll BeforeEach / AfterEach 参数化 单参数 多参数 CSV获取参数 方法获取参数 断言 assertEquals / assertNotEquals assertNull / assertNotNull 用例执行顺序 测试套件Suite 指定…

使用IIS创建WEB服务

文章目录 前言一、Web服务是什么&#xff1f;1.Web服务概述2.如何获取网页资源3.常见Web服务端软件4.什么是IIS 二、安装IIS1.安装Web服务器角色2.准备网页文件3.配置Web站点4.客户端浏览例&#xff1a;配置IIS站点 三、虚拟主机概述1.虚拟Web主机2.虚拟主机的几种类型3.基于端…

软考信管高级——进度管理

进度管理内容 缩短活动工期方法 赶工&#xff0c;投入更多资源或增加工作时间&#xff0c;以缩短关键活动的工期快速跟进&#xff0c;并行施工&#xff0c;以缩短关键路径长度使用高素质的资源或经验更丰富的人员减小活动范围或降低活动要求改进方法或技术&#xff0c;以提高…

活动回顾|解锁 AIGC 密码,探寻企业发展新商机

5月24日&#xff0c;Google Cloud 与 Cloud Ace 联合主办的线下活动顺利落下帷幕。 本次活动&#xff0c;有近 40 位企业精英到场支持。三位 Google Cloud 演讲嘉宾就本次活动主题&#xff0c;为大家带来了比较深度的演讲内容&#xff0c;干货满满。 &#xff08;*以下的嘉宾演…

期末复习总结【MySQL】聚合查询 + 多表联合查询(重点)

文章目录 前言一、聚合查询1, 聚合函数2, 聚合函数使用示例3, GROUP BY 子句4, HAVING 子句 二、联合查询(重点)1, 笛卡尔积2, 内连接2.1, 示例12.2, 示例22.3, 示例3 3, 外连接4, 自连接 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#…

存量时代下,互联网玩家如何“自我造血”?

毫无疑问&#xff0c;互联网已经进入存量时代。 在过去高增长的增量时代&#xff0c;许多互联网企业追求规模效应&#xff0c;痴迷于“先规模后盈利”的打法&#xff0c;力图用规模构建护城河。然而&#xff0c;随着行业整体增长速度放缓&#xff0c;规模扩张变得更为艰难&…

面了个字节跳动拿 38K 出来的测试,让我见识到了跳槽的天花板

最近内卷严重&#xff0c;各种跳槽裁员&#xff0c;相信很多小伙伴也在准备金九银十的面试计划。 作为一个入职5年的老人家&#xff0c;目前工资比较乐观&#xff0c;但是我还是会选择跳槽&#xff0c;因为感觉在一个舒适圈待久了&#xff0c;人过得太过安逸&#xff0c;晋升涨…

【JavaSE】Java基础语法(十六):抽象类

文章目录 1. 抽象类的概述2. 抽象类的特点3. 抽象类的实用价值4. 抽象类的案例 1. 抽象类的概述 当我们在做子类共性功能抽取时&#xff0c;有些方法在父类中并没有具体的体现&#xff0c;这个时候就需要抽象类了&#xff01; 在Java中&#xff0c;一个没有方法体的方法应该定义…

基于TCP、UDP网络编程

文章目录 网络协议分层套接字UDP和TCP差异UDP的APIDatagramSocketDatagramPacket 基于UDP Socket 实现一个回显程序TCP的APISocket的API基于TCP实现回显程序 网络协议分层 应用层&#xff1a; 应用程序拿到数据怎么用传输层&#xff1a; 负责关注传输过程中起点和终点网络层 &…