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

自适应的网站创意设计理念

自适应的网站,创意设计理念,wordpress列表分页,怎么建设一个手机网站摘要 Spring Boot框架既支持传统的Servlet技术栈#xff0c;也支持新兴的响应式#xff08;Reactive#xff09;技术栈。本篇文章将详细讲述Spring Boot 对两种技术栈的详细支持和使用。 Servlet 概述 基于Java Servlet API构建#xff0c;它依赖于传统的阻塞I/O模型也支持新兴的响应式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 架构。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-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 RouterFunctionServerResponse 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 的默认配置之外自动配置还提供了以下特性 视图解析器相关包含了 ContentNegotiatingViewResolver 和 BeanNameViewResolver 这两个 Bean。ContentNegotiatingViewResolver 可以根据请求的媒体类型如 Accept 头信息和可提供的视图来决定使用哪个视图进行响应。而 BeanNameViewResolver 会根据视图名称来查找相应的 Bean 作为视图例如如果视图名称是 “myView”它会查找名为 “myView” 的 Bean 作为视图进行渲染。 静态资源服务支持提供静态资源服务其中包括对 WebJars 的支持。WebJars 是一种将前端库如 jQuery、Bootstrap 等打包成 JAR 文件的方式这样可以方便地将它们作为依赖添加到 Java 项目中并且 Spring Boot 会自动将其作为静态资源进行处理使得前端资源的管理更加方便。 转换器、通用转换器和格式化器的自动注册会自动注册 Converter、GenericConverter 和 Formatter 这些 Bean。Converter 可用于将一种数据类型转换为另一种数据类型例如将字符串转换为日期类型GenericConverter 是一种更通用的转换机制提供了更灵活的转换方式Formatter 则侧重于对数据进行格式化操作比如将日期对象格式化为特定的字符串形式方便在视图中显示它们的自动注册可以简化开发过程减少手动配置的工作量。 HttpMessageConverters 的支持支持 HttpMessageConverters。HttpMessageConverters 用于将 HTTP 请求或响应中的数据在 Java 对象和 HTTP 消息体之间进行转换。例如将 Java 对象转换为 JSON 或 XML 格式并发送到客户端或者将客户端发送的 JSON 或 XML 数据转换为 Java 对象这对于处理 RESTful API 非常重要。 MessageCodesResolver 的自动注册自动注册 MessageCodesResolver。MessageCodesResolver 通常用于生成和解析消息代码在进行数据校验等场景中它可以根据错误信息生成特定的消息代码以便更好地处理错误信息使应用程序可以根据消息代码进行不同的错误处理操作。 静态 index.html 支持支持静态的 index.html 文件。这意味着如果在静态资源目录下存在 index.html 文件当用户访问应用程序的根路径时Spring Boot 会直接提供该文件作为响应方便进行静态页面的展示这对于一些单页应用程序SPA或者静态站点的部署非常有用。 自动使用 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 ServicesJAX-RS的参考实现。它提供了一组强大的工具和 API使开发人员能够轻松地创建、部署和管理 RESTful 服务。 Spring Boot 集成 Jersey 添加依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-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 {GETProduces(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 {GETProduces(MediaType.APPLICATION_JSON)public User getUser() {User user new User(John, 30);return user;}POSTConsumes(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 依赖配置示例。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdexclusions!-- Exclude the Tomcat dependency --exclusiongroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-tomcat/artifactId/exclusion/exclusions /dependency !-- Use Jetty instead -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-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 编程。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-webflux/artifactId /dependency 依赖冲突问题 :需要注意的是当我们在应用程序中同时添加了spring-boot-starter-web和spring-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-phase20s 在宽限期内拒绝请求 不允许新请求的具体方式取决于所使用的 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.shutdownimmediate 参考文献 Servlet Web Applications :: Spring Boot
http://www.hkea.cn/news/14546689/

相关文章:

  • 上海品划网络做网站海拉尔网站建设
  • 如何做网站长尾关键词布局网页编辑文字
  • 自己做网站地图wordpress 文章空白
  • 网站推广公司有哪些网络科技公司网站首页
  • 网站建设实训步骤免费网站建设好不好
  • 网站备注销苏州中小型网站建设
  • 长沙哪里学网站建设学校做网站的目的
  • 展示型装饰网站模板下载简约大方网站
  • 上海网站开发外包做网站需求
  • 深圳企业网站定做公司做网站流程
  • 番禺网站建设价格轻量应用云服务器
  • 查网站开发者怎么建网站锦州
  • 制作网站用什么软件好企业网络营销站点的功能有哪些
  • 如何创立网站深圳华汇设计
  • 网站建设开发综合实训报告武钢建工集团建设分公司网站
  • 做外贸营销型网站婚礼策划方案
  • 经营网站如何挣钱做h5好的网站
  • 网站建设小程序南宁网站建设价格方案
  • 软件排名工具网站seo重庆
  • 淄博企业网站WordPress搜索增强插件
  • 衡水做wap网站价格中国万网域名注册流程
  • 做网站该去哪找客户如何制作wordpress模板
  • 什邡网站建设公司WordPress下拉菜单栏
  • 做app怎么做怎么快速优化网站排名
  • 域名注册网站建设oppo软件商店官网
  • 网站开发代理会展设计合同范本
  • 苏州新海通网站建设百度图片识别
  • 上海阿里巴巴网站建设又拍 wordpress
  • 国际空间站晋城市建设局 网站
  • app开发流程 网站开发房产建设网站