当前位置: 首页 > news >正文

大气金融投资企业网站模板2022拉新推广赚钱的app

大气金融投资企业网站模板,2022拉新推广赚钱的app,企业建网站的步骤,如何搞好职业学校网站的建设和管理摘要 Spring Boot框架既支持传统的Servlet技术栈,也支持新兴的响应式(Reactive)技术栈。本篇文章将详细讲述Spring Boot 对两种技术栈的详细支持和使用。 Servlet 概述 基于Java Servlet API构建,它依赖于传统的阻塞I/O模型&…

摘要   

        Spring Boot框架既支持传统的Servlet技术栈,也支持新兴的响应式(Reactive)技术栈。本篇文章将详细讲述Spring Boot 对两种技术栈的详细支持和使用。

Servlet

概述

        基于Java Servlet API构建,它依赖于传统的阻塞I/O模型,每个HTTP请求都会分配一个线程来处理,直到响应返回给客户端。这种模型适用于大多数传统的Web应用,其中大部分操作是同步的,并且涉及到数据库查询或文件读写等I/O密集型任务。

  • 特点

    • 同步编程模型:代码按照顺序执行,等待每个操作完成后再继续下一个操作。

    • 线程池机制:使用线程池管理请求处理线程,但当并发用户数增加时,可能会导致资源耗尽问题。

    • 成熟的生态系统:拥有丰富的库和框架支持(如Spring MVC),并且已经被广泛应用于企业级应用中。

  • 适用场景:适合那些对实时性和高并发要求不是特别高的应用场景,尤其是当业务逻辑较为复杂或者需要大量的数据处理时。

Spring Boot 对Servlet技术栈的实现架构
Spring MVC
简介

        Spring MVC 是 Spring Framework 的核心组件之一,专为构建基于 Servlet 技术的 Web 应用程序而设计。Spring Boot 整合了 Spring MVC 框架,以此提供对传统 Web Servlet 技术栈的全面支持,使得开发者能够便捷地构建和运行基于 Servlet 的 Web 应用。

实现方式

        添加依赖Spring-boot-starter-web。Spring Boot 默认使用Servlet 技术栈的Spring MVC 架构。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

        官网提供了两种实现Spring MVC 架构的示例。第一种是常见的采用 @Controller 或 @RestController 注解的实现方式。

package person.wend.springbootlearnexample.controller;import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/users")
public class MyRestController {@GetMapping("/{userId}")public void getUser(@PathVariable Long userId) {System.out.println("userId = " + userId);}@GetMapping("/{userId}/customers")public void getUserCustomers(@PathVariable Long userId) {System.out.println("userId = " + userId);}@DeleteMapping("/{userId}")public void deleteUser(@PathVariable Long userId) {System.out.println("userId = " + userId);}}

        第二种是基于函数式编程的初始化配置路由的方式。

package person.wend.springbootlearnexample.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.servlet.function.RequestPredicate;
import org.springframework.web.servlet.function.RouterFunction;
import org.springframework.web.servlet.function.ServerResponse;import static org.springframework.web.servlet.function.RequestPredicates.accept;
import static org.springframework.web.servlet.function.RouterFunctions.route;@Configuration(proxyBeanMethods = false)
public class MyRountingConfig {private static final RequestPredicate ACCEPT_JSON = accept(MediaType.APPLICATION_JSON);@Beanpublic RouterFunction<ServerResponse> routerFunction(MyUserHandler userHandler) {return route().GET("/{user}", ACCEPT_JSON, userHandler::getUser).GET("/{user}/customers", ACCEPT_JSON, userHandler::getUserCustomers).DELETE("/{user}", ACCEPT_JSON, userHandler::deleteUser).build();}
}
package person.wend.springbootlearnexample.config;import org.springframework.stereotype.Component;
import org.springframework.web.servlet.function.ServerRequest;
import org.springframework.web.servlet.function.ServerResponse;@Component
public class MyUserHandler {public ServerResponse getUser(ServerRequest request) {System.out.println("request = " + request);return ServerResponse.ok().body("getUser");}public ServerResponse getUserCustomers(ServerRequest request) {System.out.println("request = " + request);return ServerResponse.ok().body("getUserCustomers");}public ServerResponse deleteUser(ServerRequest request) {System.out.println("request = " + request);return ServerResponse.ok().body("deleteUser");}}
自动装配Spring MVC

        Spring Boot 为 Spring MVC 提供了自动配置功能,该功能适用于大多数应用程序。它取代了对 @EnableWebMvc 的需求,并且两者不能同时使用。除了 Spring MVC 的默认配置之外,自动配置还提供了以下特性:

  1. 视图解析器相关:包含了 ContentNegotiatingViewResolver 和 BeanNameViewResolver 这两个 Bean。ContentNegotiatingViewResolver 可以根据请求的媒体类型(如 Accept 头信息)和可提供的视图,来决定使用哪个视图进行响应。而 BeanNameViewResolver 会根据视图名称来查找相应的 Bean 作为视图,例如,如果视图名称是 “myView”,它会查找名为 “myView” 的 Bean 作为视图进行渲染。

  2. 静态资源服务:支持提供静态资源服务,其中包括对 WebJars 的支持。WebJars 是一种将前端库(如 jQuery、Bootstrap 等)打包成 JAR 文件的方式,这样可以方便地将它们作为依赖添加到 Java 项目中,并且 Spring Boot 会自动将其作为静态资源进行处理,使得前端资源的管理更加方便。

  3. 转换器、通用转换器和格式化器的自动注册:会自动注册 Converter、GenericConverter 和 Formatter 这些 Bean。Converter 可用于将一种数据类型转换为另一种数据类型,例如将字符串转换为日期类型;GenericConverter 是一种更通用的转换机制,提供了更灵活的转换方式;Formatter 则侧重于对数据进行格式化操作,比如将日期对象格式化为特定的字符串形式,方便在视图中显示,它们的自动注册可以简化开发过程,减少手动配置的工作量。

  4. HttpMessageConverters 的支持:支持 HttpMessageConverters。HttpMessageConverters 用于将 HTTP 请求或响应中的数据在 Java 对象和 HTTP 消息体之间进行转换。例如,将 Java 对象转换为 JSON 或 XML 格式并发送到客户端,或者将客户端发送的 JSON 或 XML 数据转换为 Java 对象,这对于处理 RESTful API 非常重要。

  5. MessageCodesResolver 的自动注册:自动注册 MessageCodesResolver。MessageCodesResolver 通常用于生成和解析消息代码,在进行数据校验等场景中,它可以根据错误信息生成特定的消息代码,以便更好地处理错误信息,使应用程序可以根据消息代码进行不同的错误处理操作。

  6. 静态 index.html 支持:支持静态的 index.html 文件。这意味着如果在静态资源目录下存在 index.html 文件,当用户访问应用程序的根路径时,Spring Boot 会直接提供该文件作为响应,方便进行静态页面的展示,这对于一些单页应用程序(SPA)或者静态站点的部署非常有用。

  7. 自动使用 ConfigurableWebBindingInitializer Bean:自动使用 ConfigurableWebBindingInitializer Bean(本文后续会提及)。这个 Bean 可以对 Web 请求参数绑定进行初始化操作,例如可以设置数据绑定的日期格式、绑定过程中忽略的字段等,确保请求参数可以正确地绑定到 Java 对象上。

        如果您想要保留 Spring Boot 的这些 MVC 自定义特性,并进行更多的 MVC 自定义操作(如拦截器、格式化器、视图控制器以及其他功能),您可以添加自己的 @Configuration 类,其类型为 WebMvcConfigurer,但不要使用 @EnableWebMvc。

        如果您想要提供 RequestMappingHandlerMapping、RequestMappingHandlerAdapter 或 ExceptionHandlerExceptionResolver 的自定义实例,同时又想保留 Spring Boot 的 MVC 自定义特性,可以声明一个类型为 WebMvcRegistrations 的 Bean,并使用它来提供这些组件的自定义实例。这些自定义实例将接受 Spring MVC 的进一步初始化和配置。如果您想参与并在需要时覆盖后续的处理过程,可以使用 WebMvcConfigurer。

        如果您不想使用自动配置,并且想要完全掌控 Spring MVC,可以添加自己的、带有 @EnableWebMvc 注解的 @Configuration 类。或者,按照 @EnableWebMvc 的 API 文档中描述的那样,添加自己的带有 @Configuration 注解的 DelegatingWebMvcConfiguration。

Jersey

        Jersey 是一个开源的、用于构建 RESTful Web 服务的框架,它是 Java API for RESTful Web Services(JAX-RS)的参考实现。它提供了一组强大的工具和 API,使开发人员能够轻松地创建、部署和管理 RESTful 服务。

Spring Boot 集成 Jersey
添加依赖
 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
注册端点
package person.wend.springbootlearnexample.config;import org.glassfish.jersey.server.ResourceConfig;
import org.springframework.stereotype.Component;
import person.wend.springbootlearnexample.controller.JerseyController;
import person.wend.springbootlearnexample.controller.UserJerseyController;@Component
public class MyJerseyConfig extends ResourceConfig {public MyJerseyConfig() {register(JerseyController.class);register(UserJerseyController.class);}
}
Jersey 基于 JAX-RS 标准

        Jersey 遵循 JAX-RS 规范,这意味着它提供了标准的注解和 API 来开发 RESTful Web 服务。例如,使用 @Path 注解来定义资源的 URI 路径,@GET@POST@PUT@DELETE 等注解来定义 HTTP 方法。以下是一个简单的示例:

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;@Path("/hello")
public class HelloResource {@GET@Produces(MediaType.TEXT_PLAIN)public String sayHello() {return "Hello, World!";}
}

在上述代码中:

  • @Path("/hello") 定义了资源的 URI 路径为 /hello

  • @GET 表示这个方法将处理 HTTP 的 GET 请求。

  • @Produces(MediaType.TEXT_PLAIN) 表示该方法将产生纯文本类型的响应。

强大的请求和响应处理

        Jersey 支持多种媒体类型的请求和响应处理,包括 JSON、XML、HTML、纯文本等。通过 @Consumes 和 @Produces 注解可以指定请求和响应的数据类型。例如:

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;@Path("/user")
public class UserResource {@GET@Produces(MediaType.APPLICATION_JSON)public User getUser() {User user = new User("John", 30);return user;}@POST@Consumes(MediaType.APPLICATION_JSON)@Produces(MediaType.APPLICATION_JSON)public Response createUser(User user) {// 处理用户创建逻辑return Response.status(Response.Status.CREATED).entity(user).build();}
}
  • @Consumes(MediaType.APPLICATION_JSON) 表示 createUser 方法接受 JSON 类型的请求体。

  • @Produces(MediaType.APPLICATION_JSON) 表示该方法将返回 JSON 类型的响应。

Spring Boot 对Servlet 技术栈的嵌入式容器支持

        当您希望采用传统的Servlet栈来构建应用时,您需要添加spring-boot-starter-web依赖,该依赖默认集成了spring-boot-starter-tomcat,意味着您的应用将使用Tomcat作为Web容器。此外,Spring Boot还支持使用Jetty和Undertow作为可选的Web容器。

 Spring Boot 替换容器示例

        以下是一个使用jetty 替换默认的tomcat 的Maven 依赖配置示例。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!-- Exclude the Tomcat dependency --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>
<!-- Use Jetty instead -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

Reactive

概述

        Reactive 引入了非阻塞I/O模型和事件驱动架构,旨在提高系统的可伸缩性和响应能力。它允许应用程序以异步方式处理请求,从而可以在更少的线程上处理更多的并发连接。这使得Reactive Stack非常适合构建微服务架构下的高性能Web服务。

  • 特点

    • 异步编程模型:采用回调函数或观察者模式实现异步操作,避免了长时间等待资源释放的问题。

    • 背压机制:通过Reactive Streams规范提供流控能力,确保上游不会过快地发送数据给下游,造成系统过载。

    • 轻量级线程:利用协程(Coroutines)或其他轻量级线程替代传统线程,降低了上下文切换开销。

    • 现代Web容器:通常运行在像Netty这样的非阻塞服务器上,也可以兼容Servlet 3.1+容器。

  • 适用场景:特别适用于需要处理大量并发连接、低延迟要求的应用程序,例如实时聊天室、物联网平台、在线游戏等。

实现方式

  •  添加依赖:我们需要引入 spring-boot-starter-webflux依赖以支持响应式Web 编程。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
  • 依赖冲突问题 :需要注意的是,当我们在应用程序中同时添加了spring-boot-starter-webspring-boot-starter-webflux模块的依赖时, Spring Boot 会选择自动配置 Spring MVC,而不是 WebFlux。

  • 如果项目中同时存在两个依赖,但是我们仍然想使用Webflux 架构,我们可以将所选应用程序类型设置为 SpringApplication.setWebApplicationType(WebApplicationType.REACTIVE) 来强制使用webflux 模块。

@SpringBootApplication
public class SpringBootLearnExampleApplication {public static void main(String[] args) {SpringApplication springApplication = new SpringApplication(SpringBootLearnExampleApplication.class);// 将应用设置为响应式应用springApplication.setWebApplicationType(WebApplicationType.REACTIVE);SpringApplication.run(SpringBootLearnExampleApplication.class, args);}}
  • Spring webFlux 的代码实现有两种方式,基于注释的和函数式编程,两种方式的实现代码与Spring MVC 架构的实现代码基本一致,只不过内部实现原理不同,WebFlux 的函数式是基于WebFlux.fn,而Spring MVC的函数式是基于WebMvc.fn。代码示例请参考上述Spring MVC 的代码实现示例。

Spring WebFlux 自动装配

      Spring WebFlux的自动装配与 Spring MVC 的自动装配过程和功能均保持一致,需要注意的是关于WebFlux 自定义注解与MVC 框架不一致。比如如果您希望保留 Spring Boot 对 WebFlux 的这些自定义设置,同时进行更多的 WebFlux 自定义配置(如添加拦截器、自定义格式化器、设置视图控制器等其他功能),可以添加自定义的 @Configuration 类,使其实现 WebFluxConfigurer 接口,但不要使用 @EnableWebFlux 注解。

Spring Boot 对Reactive 技术栈的嵌入式容器支持

        WebFlux默认采用Netty作为其网络通信框架。不过,您也可以选择配置Tomcat、Jetty或Undertow来替代Netty作为WebFlux的底层传输层。

Servlet Stack 与 Reactive Stack  比较

特性

Servlet Stack

Reactive Stack

编程模型

同步

异步

线程管理

线程池

轻量级线程/协程

I/O模型

阻塞I/O

非阻塞I/O

性能优化

适用于中等规模并发

适用于大规模并发

生态系统

成熟稳定

相对年轻

Web容器

Servlet容器(如Tomcat, Jetty)

非阻塞服务器(如Netty)

数据流处理

可以实现但较为复杂

内置支持

示例框架

Spring MVC,Jersey 

Spring WebFlux

优雅关机

        默认情况下,所有四个嵌入式 Web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于 servlet 的 Web 应用程序均启用了优雅关闭。优雅关闭是关闭应用程序上下文的一部分,在停止SmartLifecyclebean 的最早阶段执行。此停止处理使用超时,提供宽限期,在此期间允许完成现有请求,但不允许新请求。

        要配置超时时间,请配置spring.lifecycle.timeout-per-shutdown-phase属性,如以下示例所示:

spring.lifecycle.timeout-per-shutdown-phase=20s

在宽限期内拒绝请求

        不允许新请求的具体方式取决于所使用的 Web 服务器。实现可能会在网络层停止接受请求,或者它们可能会返回带有特定 HTTP 状态代码或 HTTP 标头的响应。使用持久连接也可以改变停止接受请求的方式。Jetty、Reactor Netty 和 Tomcat 将停止在网络层接受新请求。Undertow 将接受新连接,但会立即响应服务不可用 (503)。以下是四种Web 服务器的优雅关闭API 接口详情:

TomcatWebServer (Spring Boot 3.4.1 API)

NettyWebServer (Spring Boot 3.4.1 API)

JettyWebServer (Spring Boot 3.4.1 API)

UndertowWebServer (Spring Boot 3.4.1 API)

禁用优雅关机

server.shutdown=immediate

参考文献

Servlet Web Applications :: Spring Boot


文章转载自:
http://wanjiatitubation.bbrf.cn
http://wanjiafabrikoid.bbrf.cn
http://wanjiaisraelitic.bbrf.cn
http://wanjiaproviral.bbrf.cn
http://wanjiathinnish.bbrf.cn
http://wanjialaurustinus.bbrf.cn
http://wanjiabeing.bbrf.cn
http://wanjiasuccous.bbrf.cn
http://wanjiabackwoodsy.bbrf.cn
http://wanjiamithraistic.bbrf.cn
http://wanjiaplatycephalic.bbrf.cn
http://wanjiaposterolateral.bbrf.cn
http://wanjiafyce.bbrf.cn
http://wanjiabazoo.bbrf.cn
http://wanjiacalced.bbrf.cn
http://wanjiaseti.bbrf.cn
http://wanjiapaviour.bbrf.cn
http://wanjiarailway.bbrf.cn
http://wanjiaemma.bbrf.cn
http://wanjiaunclasp.bbrf.cn
http://wanjiahepplewhite.bbrf.cn
http://wanjiacavalry.bbrf.cn
http://wanjiaalum.bbrf.cn
http://wanjiaheld.bbrf.cn
http://wanjiascincoid.bbrf.cn
http://wanjiacompandor.bbrf.cn
http://wanjiatimeouts.bbrf.cn
http://wanjiamediaevalist.bbrf.cn
http://wanjiapaludament.bbrf.cn
http://wanjiamulligatawny.bbrf.cn
http://wanjiarorqual.bbrf.cn
http://wanjiahcs.bbrf.cn
http://wanjiaunposed.bbrf.cn
http://wanjiaworkaday.bbrf.cn
http://wanjiadink.bbrf.cn
http://wanjiaspirochaeta.bbrf.cn
http://wanjiabeetlebung.bbrf.cn
http://wanjiacaptious.bbrf.cn
http://wanjiadespiteously.bbrf.cn
http://wanjialandfall.bbrf.cn
http://wanjiastrepyan.bbrf.cn
http://wanjiaremoulade.bbrf.cn
http://wanjiamusicality.bbrf.cn
http://wanjiacoop.bbrf.cn
http://wanjiaprint.bbrf.cn
http://wanjiasylvatic.bbrf.cn
http://wanjiawarner.bbrf.cn
http://wanjianewsstand.bbrf.cn
http://wanjiahundredth.bbrf.cn
http://wanjiaquarrelsomely.bbrf.cn
http://wanjianirvana.bbrf.cn
http://wanjiaantifertility.bbrf.cn
http://wanjiachasse.bbrf.cn
http://wanjiasubmaxilary.bbrf.cn
http://wanjiaabyssalbenthic.bbrf.cn
http://wanjiaencomiastic.bbrf.cn
http://wanjiaentomologize.bbrf.cn
http://wanjiagox.bbrf.cn
http://wanjiainch.bbrf.cn
http://wanjiametalmark.bbrf.cn
http://wanjiadeducible.bbrf.cn
http://wanjiachangeably.bbrf.cn
http://wanjiakeratogenous.bbrf.cn
http://wanjiametallotherapy.bbrf.cn
http://wanjiaodalisque.bbrf.cn
http://wanjiainane.bbrf.cn
http://wanjiaextracondensed.bbrf.cn
http://wanjiacodiscoverer.bbrf.cn
http://wanjiarevue.bbrf.cn
http://wanjiayawping.bbrf.cn
http://wanjiaacetylsalicylate.bbrf.cn
http://wanjialepidocrocite.bbrf.cn
http://wanjiatubbing.bbrf.cn
http://wanjiacrimson.bbrf.cn
http://wanjiafladge.bbrf.cn
http://wanjiascarifier.bbrf.cn
http://wanjiainterdine.bbrf.cn
http://wanjiahalakist.bbrf.cn
http://wanjiahiccup.bbrf.cn
http://wanjiaupblown.bbrf.cn
http://www.15wanjia.com/news/112212.html

相关文章:

  • 厦门营销网站制作新闻发稿发布平台
  • 网站如何做淘宝客seo咨询常德
  • wap视频网站建设难吗广告营销留电话网站
  • 石家庄网站建设价格低网络服务平台
  • 广州百度推广外包电子商务seo名词解释
  • wordpress标签页收藏广东网站营销seo费用
  • 房产网站制作公司营销心得体会感悟300字
  • 郑州门户网站建设成都网站推广
  • 徐州营销网站建设报价seo发外链的网站
  • 网站关键词怎么改学企业管理培训班
  • 如何学习网站开发百度竞价排名费用
  • 网站设计大全百度地图导航网页版
  • 北京做网站制作的公司网络服务器配置与管理
  • 新的南宁网站建设公司软文300字案例
  • 购物网站导航模板百度seo网站
  • 做公司网站成本山东自助seo建站
  • 临沂网站制作平台专业制作网页的公司
  • 商务网站建设的主流程发布外链的步骤
  • 代理网站系统西安seo
  • 呼和浩特网站制作 建设百度高级搜索页面的网址
  • dw怎么用div css做网站6自助建站网站模板
  • 杭州专业设计网站网络推广员是什么
  • wordpress投诉功能北京seo优化推广
  • jsp网站怎么做的好看湘潭高新区最新新闻
  • 网站开发 入门 pdf关键词查询神器
  • 可以免费建设网站搜索引擎营销原理
  • 网站建设 大公司chrome浏览器
  • 大连网站建站谷歌关键词搜索
  • 网站如何交换链接seo基础课程
  • 佛山全网营销型网站建设百度搜索风云榜单