【JavaWeb】渲染技术Jsp

news2024/9/30 7:21:29

🎄欢迎来到@边境矢梦°的csdn博文,本文主要讲解Java web中渲染技术 Jsp 的相关知识🎄


🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈
🎆喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路🎆

Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大)🌑🌒🌓🌔🌕   

目录

🌒一. 问题引出 

🌒 二. 基本介绍

🌕三. 运行原理

🌓四. page指令

🌔五. jsp的三种常用脚本

🌓六. jsp注释

🌔七. jsp内置对象

🌔八. jsp域对象

🌓九. jsp请求转发标签

🌓十. EL表达式

🌓十一. JSTL


一. 问题引出 

由于HTML只能将静态内容输出, 由浏览器来解析打印, 但是如果页面里面的数据不是静态的是动态的, 那么我们就需要把代码写在servlet里面, 写在servlet里面代码很麻烦

html

servlet

引出jsp

 jsp=html+java 片段+标签+javascript+css

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>hello, jsp</title>
</head>
<body>
<h1>JSP, 计算器</h1>
<%
int i = 20;
int j = 70;
int res = i + j;
out.println(i + " + " + j + " = " + res);
%>
</body>
</html>

 二. 基本介绍

  1.  JSP 全称是 Java Server PagesJava 的服务器页面
  2.  JSP 这门技术的最大的特点在于,JSP 就像在写 HTML
    • 相比 html 而言,html 只能为用户提供静态数据,而 JSP 技术允许在页面中嵌套 java 代码, 为用户提供动态数据
    • 相比 Servlet 而言,Servlet 很难对数据进行排版jsp 除了可以用 java 代码产生动态数据的同时,也很容易对数据进行排版
  3.  jsp 技术基于 Servlet, 可以理解成 JSP 就是对 Servlet 的包装.
  4.  会使用 JSP 的程序员, 再使用 thymeleaf 是非常容易的事情, 几乎是无缝接轨.

三. 运行原理

  1. 客户端发送请求:用户在浏览器中输入 URL 或点击链接,向服务器发送 HTTP 请求。

  2. 服务器接收请求:Web 服务器(如 Apache Tomcat)接收到 HTTP 请求。

  3. JSP 编译:服务器将 JSP 文件传递给 JSP 引擎进行处理。JSP 引擎将 JSP 文件编译为 Servlet (Java文件)

  4. Servlet 运行:生成的 Servlet 代码通过 Java 编译器进行编译,生成字节码文件

  5. Servlet 实例化:Servlet 容器(如 Servlet 容器)根据需要实例化 Servlet,一般是通过调用无参构造函数来创建 Servlet 实例。

  6. 请求处理:Servlet 实例接收到来自客户端的请求,并执行相应的 Java 代码。

  7. 动态内容生成:Servlet 可以使用 Java 代码来生成动态内容,包括生成 HTML、XML、JSON 等响应。

  8. 响应发送:Servlet 将生成的动态内容作为响应发送给客户端。

  9. 客户端渲染:浏览器接收到响应,并将响应内容进行解析和渲染,最终在用户的浏览器中显示出动态生成的页面。

JSP 的运行原理可以概括为将 JSP 文件编译成 Java Servlet然后由 Servlet 容器加载、实例化和运行生成的 Servlet。通过在 JSP 文件中嵌入 Java 代码,可以实现与数据库的交互、条件判断、循环处理等逻辑,生成动态的 Web 内容并发送给客户端浏览器。这使得 JSP 成为了创建动态 Web 应用程序的强大工具

注意 :

所以jsp原来还是servlet, 只是那些麻烦的, 不好看的代码被底层实现了, 你只需要面向简单的容易的方式进行编程即可, 也是面向对象的编程思维

四. page指令

在 JSP 中,可以使用<%@ page %>指令来设置页面的相关属性和配置。<%@ page %>指令通常位于 JSP 文件的顶部,以下是一些常用的属性和配置:

  1. contentType:设置响应的内容类型,例如:<%@ page contentType="text/html;charset=UTF-8" %>

  2. pageEncoding:设置当前页面的字符编码,例如:<%@ page pageEncoding="UTF-8" %>

  3. import:引入 Java 类的包或类,例如:<%@ page import="java.util.List" %>

  4. session:设置是否启用会话,例如:<%@ page session="true" %>

  5. buffer:设置页面的输出缓冲区大小,例如:<%@ page buffer="8kb" %>

  6. autoFlush:设置是否自动刷新缓冲区,例如:<%@ page autoFlush="true" %>

  7. isThreadSafe:设置页面是否是线程安全的,例如:<%@ page isThreadSafe="true" %>

  8. errorPage:设置错误处理页面,当页面抛出异常时跳转到指定的错误处理页面,例如:<%@ page errorPage="error.jsp" %>

  9. isErrorPage:设置当前页面是否是错误处理页面,例如:<%@ page isErrorPage="true" %>

  10. extends:指定生成的 Servlet 的继承关系,例如:<%@ page extends="com.example.MyServlet" %>

<%@ page %>指令用于在 JSP 编译时设置页面属性和配置,可以影响生成的 Servlet 的行为和功能。


五. jsp的三种常用脚本

在 JSP(JavaServer Pages)中,有三种常用的脚本用于插入代码和实现动态功能:

  1. 声明脚本(Declaration):使用 <%! %> 标签将 Java 代码插入到 JSP 中。声明脚本用于定义全局的变量、方法或类,这些内容会被编译到 Servlet 类中,并在整个 JSP 页面中可见

    <%!
        int num = 10;
        public void displayMessage() {
            System.out.println("Hello, World!");
        }
    %>
    
  2. 表达式脚本(Expression):使用 <%= %> 标签将表达式结果输出到 JSP 页面。表达式脚本用于在页面中显示变量、方法返回值等内容。

    <p>Number: <%= num %></p>
    <p>Current time: <%= new java.util.Date() %></p>
    
  3. 脚本let(Scriptlet):使用 <% %> 标签将 Java 代码插入到 JSP 中。脚本let用于执行任意的 Java 代码块,可以包含条件语句、循环语句等。

    <% if (num > 0) { %>
        <p>The number is positive.</p>
    <% } else { %>
        <p>The number is negative.</p>
    <% } %>
    

这些脚本可以混合使用,以便实现更复杂的逻辑和动态内容。注意,声明脚本不会直接在页面中显示内容,但可以定义全局变量和方法供其他脚本使用。而表达式脚本和脚本let可以在页面中直接显示或执行相应的代码逻辑。请根据需要选择合适的脚本类型来实现所需的功能。


六. jsp注释

在 JSP(JavaServer Pages)中,有两种注释方式可以使用:

  1. HTML 注释:使用 <!-- --> 标签进行注释,注释内容不会被发送到客户端。

    <!-- 这是一个 HTML 注释 -->
    
  2. Java 注释:使用 // 或 /* */ 进行注释,注释内容在 JSP 页面被转化成 Servlet 时会被编译器忽略。

    <%-- 这是一个 JSP 注释 --%>            // 特别的一种
    
    <% // 这是一个单行的 JSP 注释 %>
    
    <% /* 
         这是一个多行的 JSP 注释
       */ %>
    

HTML 注释是常规的 HTML 注释方式,用于注释掉 HTML 代码。Java 注释则用于注释掉嵌入在 <% %> 标记中的 Java 代码,可以使用单行注释 // 或多行注释 /* */

在 JSP 中使用注释可以起到以下作用:

  • 解释代码的作用和目的
  • 临时禁用或排除某些代码段
  • 提供开发文档和注释

注释可以提高代码的可读性和可维护性,并且在开发过程中有助于团队成员之间的交流和理解。


七. jsp内置对象

JSP(JavaServer Pages)中内置了一些对象,这些对象可以在 JSP 页面中直接使用,以实现不同的功能和访问与 Web 应用程序相关的信息。以下是一些常见的 JSP 内置对象:

  1. request: 代表客户端的请求,用于获取客户端提交的数据和设置请求属性。

  2. response: 代表服务器对客户端的响应,用于设置响应头信息、输出内容到客户端等操作。

  3. out: 用于在 JSP 页面中输出内容到客户端,等效于 response.getWriter() 方法。

  4. session: 代表客户端与服务器之间的会话,用于存储和获取会话相关的数据。

  5. application: 代表整个 Web 应用程序的上下文,用于在应用程序级别共享数据。

  6. pageContext: 代表 JSP 页面的上下文,包含了其他内置对象的引用,用于访问其他内置对象。

  7. page: 代表当前 JSP 页面的实例,可以用于执行页面重定向、包含其他页面等操作。(this)

  8. exception: 用于处理异常情况,表示当前页面抛出的异常对象。

这些内置对象可通过 JSP 页面中的脚本或表达式直接调用,例如:

<!-- 获取请求参数 -->
<%
   String username = request.getParameter("username");
%>

<!-- 输出内容到客户端 -->
<%
   out.println("Hello, World!");
%>

<!-- 设置会话属性 -->
<%
   session.setAttribute("name", "John");
%>

请注意,这些内置对象在 JSP 开发中非常常用,并提供了许多便捷的方法和属性用于处理 Web 应用程序的不同方面

举例子 : 当请求的 URL 为 example.com/myPage.jsp?username=John 时,我们可以通过以下示例演示每个对象的使用:

request 对象:

<%
    // 获取请求参数
    String username = request.getParameter("username");
%>

response 对象:

<%
    // 设置响应头信息
    response.setContentType("text/html");

    // 输出内容到客户端
    PrintWriter out = response.getWriter();
    out.println("<h1>Hello, World!</h1>");
    out.close();
%>

out 对象:

<%
    // 输出内容到客户端
    out.println("Hello, World!");
%>

session 对象:

<%
    // 存储和获取会话属性
    session.setAttribute("name", "John");
    String name = (String) session.getAttribute("name");
%>

application 对象:

<%
    // 在应用程序级别共享数据
    application.setAttribute("count", 10);
    int count = (int) application.getAttribute("count");
%>

pageContext 对象:

<%
    // 使用 pageContext 获取其他内置对象的引用
    request.setAttribute("message", "Hello, World!");
    String message = (String) pageContext.getRequest().getAttribute("message");
%>

page 对象:

<%!
    // 执行页面重定向
    response.sendRedirect("anotherPage.jsp");
%>

exception 对象:

<%
    try {
        // 产生异常
        int result = 10 / 0;
    } catch (Exception e) {
        // 处理异常
        out.println("An error occurred: " + e.getMessage());
    }
%>

这些示例展示了如何使用每个内置对象来实现不同的功能,包括获取请求参数、设置响应头信息、输出内容、存储会话属性、共享应用程序级别的数据、获取其他内置对象的引用、执行页面重定向、处理异常等操作。


八. jsp域对象

在 JSP(JavaServer Pages)中,域对象是一种用于在不同的作用域内共享数据的机制。JSP 提供了四个不同的域对象,每个对象有不同的作用域范围。以下是 JSP 的四个域对象:

  1. pageContext 域:它是最广泛的作用域,覆盖了整个 JSP 页面在同一个页面中,不同的脚本块之间可以通过 pageContext 域对象共享数据。

  2. request 域:它代表了客户端的请求,其作用范围是在同一个请求中的所有页面和资源之间共享数据。例如,当用户提交一个表单时,在表单的处理页面中可以通过 request 域传递表单数据给其他页面。

  3. session 域:它代表了客户端和服务器之间的会话,其作用范围是一个用户的整个会话期间即从用户第一次访问网站到关闭浏览器的整个过程。session 域对象可以用于在不同的页面之间存储和获取用户特定的信息。

  4. application 域:它代表了整个 Web 应用程序的上下文,其作用范围是在整个应用程序的所有页面和资源之间共享数据。application 域对象通常用于存储全局配置信息或全局数据,可以被多个用户和会话访问。

这些域对象可以通过在 JSP 页面中使用内置对象(如 pageContextrequestsessionapplication)来访问和操作。例如:

<!-- 在 pageContext 域中存储数据 -->
<%
    pageContext.setAttribute("message", "Hello, World!");
%>

<!-- 在 request 域中存储数据 -->
<%
    request.setAttribute("username", "John");
%>

<!-- 在 session 域中存储数据 -->
<%
    session.setAttribute("cart", shoppingCart);
%>

<!-- 在 application 域中存储数据 -->
<%
    application.setAttribute("version", "1.0");
%>

在其他页面或脚本块中,可以通过相应的域对象来获取这些数据:

<!-- 从 pageContext 域中获取数据 -->
<%
    String message = (String) pageContext.getAttribute("message");
%>

<!-- 从 request 域中获取数据 -->
<%
    String username = (String) request.getAttribute("username");
%>

<!-- 从 session 域中获取数据 -->
<%
    ShoppingCart cart = (ShoppingCart) session.getAttribute("cart");
%>

<!-- 从 application 域中获取数据 -->
<%
    String version = (String) application.getAttribute("version");
%>

这些域对象提供了不同的作用域范围,使得开发者可以方便地在不同的页面和作用域中共享数据,实现更灵活和高效的应用程序开发。

JSP 四大域对象注意事项和细节
        1. 域对象是可以像 Map 一样存取数据的对象。四个域对象功能一样。不同的是它们对数 据的存储范围
        2. 从存储范围 ( 作用域范围看 ) pageContext < request < session < application

九. jsp请求转发标签

在 JSP(JavaServer Pages)中,可以使用 <jsp:forward> 标签来进行请求转发。该标签用于将请求转发到另一个 JSP 页面、Servlet 或其他资源,并在转发过程中将控制权传递给目标资源。以下是 <jsp:forward> 标签的语法:

<jsp:forward page="target.jsp" />

其中,page 属性指定了要转发到的目标页面或资源的路径。路径可以是相对路径或绝对路径。

下面是一个示例,演示如何在 JSP 中使用 <jsp:forward> 标签进行请求转发:

<!-- index.jsp -->
<html>
<head>
    <title>Index Page</title>
</head>
<body>
    <h1>Welcome to Index Page</h1>

    <%-- 请求转发到 target.jsp --%>
    <jsp:forward page="target.jsp" />
</body>
</html>
<!-- target.jsp -->
<html>
<head>
    <title>Target Page</title>
</head>
<body>
    <h1>Welcome to Target Page</h1>

    <%-- 在 target.jsp 中展示一些内容 --%>
    <p>This is the target page.</p>
</body>
</html>

在上述示例中,当请求访问 index.jsp 页面时,会执行 <jsp:forward> 标签中指定的请求转发操作,将请求发送到 target.jsp 页面。浏览器会显示 target.jsp 页面的内容。

需要注意的是,使用 <jsp:forward> 标签进行请求转发时,控制权会完全交给目标页面,并且客户端并不知道请求已经被转发,因为浏览器只会接收到目标页面的响应。


十. EL表达式

EL(Expression Language,表达式语言)是一种用于在 JavaEE 技术中访问和操作数据的简洁而强大的语言EL 提供了一种简化表达式的方式,使得在 JSP、JSF、Servlet、Spring 等技术中可以更方便地访问和处理数据。

EL 表达式以 ${} 的形式包裹在文本和脚本之间,可以用于以下几个方面:

  1. 访问变量和属性:EL 可以用于访问 Java 对象中的属性、数组、集合等。例如,${user.name} 将访问一个名为 “user” 的变量或属性中的 “name” 属性。

  2. 执行方法调用:EL 可以调用对象中的方法,并传递参数。例如,${userService.getUserList()} 可以调用一个名为 “userService” 的对象中的 “getUserList()” 方法。

  3. 操作集合和映射:EL 可以用于遍历集合或映射中的元素。例如,${listUsers} 可以用于遍历名为 “listUsers” 的 List 集合,并获取每个用户对象。

  4. 运算符和逻辑表达式:EL 支持常见的算术、逻辑和比较运算符,例如 ${x + y}${age > 18} 等。

以下是一些常见的 EL 表达式示例:

<!-- 访问变量和属性 -->
<p>Welcome, ${user.name}</p>

<!-- 执行方法调用 -->
<p>The current time is ${java.time.LocalDateTime.now()}</p>

<!-- 遍历集合 -->
<ul>
  <c:forEach items="${listUsers}" var="user">
    <li>${user.name}</li>
  </c:forEach>
</ul>

<!-- 运算符和逻辑表达式 -->
<p>${x + y}</p>
<p>${age > 18}</p>

需要注意的是,EL 表达式通常与 JSP 的标准标签库(JSTL)结合使用,以获得更强大的数据操作和控制流。在 JSP 中,可以通过引入 JSTL 的标签库声明来使用 EL 表达式:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

通过使用 EL 表达式,可以简化和提高代码的可读性,使得在 JSP 和其他 JavaEE 技术中进行数据操作更加方便和灵活。


十一. JSTL

JSTL(JavaServer Pages Standard Tag Library)是一个由 Java 社区开发的标准标签库,为 JSP 页面提供了一系列可重用的标签和函数,使得在 JSP 中进行逻辑处理和数据操作更加方便和简单。

JSTL 包含了多个模块,其中核心模块是最常用的,包含了基本的控制流标签、循环标签、条件标签和格式化标签。以下是 JSTL 的一些常用功能模块及其对应的 URI:

  • Core 核心模块:提供了基本的控制流标签、条件判断、循环处理和格式化等功能。URI 为 http://java.sun.com/jsp/jstl/core

  • Format 格式化模块:提供了日期、时间和数字的格式化标签和函数。URI 为 http://java.sun.com/jsp/jstl/fmt

  • XML XML 模块:提供了处理 XML 数据的标签和函数。URI 为 http://java.sun.com/jsp/jstl/xml

  • SQL SQL 模块:提供了对数据库进行 SQL 查询和操作的标签和函数。URI 为 http://java.sun.com/jsp/jstl/sql

  • Functions 函数模块:提供了一组常用的函数以进行字符串操作、日期计算、逻辑运算等。URI 为 http://java.sun.com/jsp/jstl/functions

要在 JSP 中使用 JSTL 标签,需要在 JSP 页面中引入 JSTL 的标签库声明,例如:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

然后就可以在 JSP 页面中使用 JSTL 的标签了,例如使用 c:if 条件标签:

<c:if test="${condition}">
  <!-- 根据条件显示内容 -->
</c:if>

还可以使用 fmt:formatDate 进行日期格式化:

<fmt:formatDate value="${date}" pattern="yyyy-MM-dd" />

JSTL 中的标签和函数提供了强大的功能,可以简化 JSP 页面中的逻辑处理和数据操作,使得代码更具可读性和可维护性。可以根据具体需求选择合适的 JSTL 模块,并根据模块的 URI 引入相应的标签库声明,以便在 JSP 页面中使用对应的标签和函数。

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

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

相关文章

MySQL~SQL语句

一、SQL 1.什么是SQL&#xff1f; Structured Query Language&#xff1a;结构化查询语言 每一种数据库操作的方式存在不一样的地方&#xff0c;称为“方言”。 2.SQL通用语法 SQL 语句可以单行或多行书写&#xff0c;以分号结尾 可使用空格和缩进来增强语句的可读性 MyS…

理解构建LLM驱动的聊天机器人时的向量数据库检索的局限性 - (第1/3部分)

本博客是一系列文章中的第一篇&#xff0c;解释了为什么使用大型语言模型&#xff08;LLM&#xff09;部署专用领域聊天机器人的主流管道成本太高且效率低下。在第一篇文章中&#xff0c;我们将讨论为什么矢量数据库尽管最近流行起来&#xff0c;但在实际生产管道中部署时从根本…

有哪些好用的思维导图软件?这几款软件很好用

有哪些好用的思维导图软件&#xff1f;思维导图软件是一类专门用于制作和管理思维导图的工具软件。它能够帮助用户将复杂的思维过程、信息和知识进行有机的组织和整理&#xff0c;从而达到更好的思维和工作效果。下面就给大家介绍几种好用的思维导图绘制软件。 第一种软件&…

广州道可维斯受邀参加首届金蝶暨佛山数字化生态峰会

2023首届金蝶暨佛山数字化生态峰会&#xff0c;于7月28日在佛山隆重举行。此次大会由金蝶软件集团主办&#xff0c;共有超150家软件行业企业莅临参与&#xff0c;共同探讨数字化行业的最新动态和趋势。 活动当日,道可维斯的客户成功中心主任梁健&#xff0c;做了以“企业内容管…

C++程序获取python脚本控制台输出的一种方法

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 最近要使用C程序调用python脚本&#xff0c;调用方法是通过启动python进程来调用&#xff0c;其中遇到的一个问题是在C程序中需要获取python脚本的控制台…

公文需要重点强调的内容,可以采用格式进行突出显示

在公文的写作中&#xff0c;对于需要重点强调的内容&#xff0c;可以采用加粗、斜体或下划线等格式进行突出显示&#xff0c;以使读者更容易理解和把握公文的重点和主旨。 具体来说&#xff0c;可以使用以下几种方式进行突出显示&#xff1a; 1.加粗&#xff1a;将需要强调的关…

Go 语言入门指南:基础语法和常用特性解析

文章目录 Hello,World变量、指针及赋值变量和常量指针赋值 选择和循环选择循环 基本数据类型整型整型的取值范围 运算符二元运算符一元运算符 浮点型复数和布尔类型 字符串runeUnicode和UTF-8按字节访问按字符rune访问特点 数组数组的定义1. 使用默认初始值2. 定义并初始化3. 省…

蓝桥杯单片机第十三届国赛 真题+代码

注&#xff1a;PWM没搞出来 iic.c /* # I2C代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行编写相关代码或以该代码为基础&#xff0c;根据所选单片机类型、运行速度和试题中对单片机时钟频率的要求&#xff0c;进行代码调试和修…

​《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(9)-Fiddler如何设置捕获Https会话​

1.简介 由于近几年来各大网站越来越注重安全性都改成了https协议&#xff0c;不像前十几年前直接是http协议直接裸奔在互联网。还有的小伙伴或者童鞋们按照上一篇宏哥的配置都配置好了&#xff0c;想大展身手抓一下百度的包&#xff0c;结果一试傻眼了&#xff0c;竟然毛都没有…

ChatGML2新手速通!自定义魔法指令,一键开启大模型奇妙之旅!

我们的宗旨是&#xff01; 让人人都有大模型用&#xff01; 让人人都能轻松上手使用大模型&#xff01; ChatGLM2-6B是中英双语对话模型 ChatGLM-6B 的第二代版本&#xff0c;相比第一代&#xff0c;第二代支持更强大的性能、更长的上下文、更高效的推理。 飞桨AI Studio已支…

数据库转换分析软件:EasyMorph 5.X Crack

EasyMorph 为您和您的团队提供数据超能力。无需编码技能。不要问 IT 人员。 自己做。 内置动作 即使您不是 IT 专家&#xff0c;也可以从任何地方检索数据并自动执行复杂的数据转换 无需 SQL 或编程知识 — 设计简单且 100% 可视化 减少对企业IT部门的依赖&#xff0c;减少繁琐…

揭秘爱数AnyShare认知助手:大模型深度产品化,深化人与机器的“分工协作”

文 | 智能相对论 作者 | 叶远风 大模型竞逐日趋白热化&#xff0c;百模大战热闹非凡。 但是&#xff0c;对产业主体或者普通看客而言&#xff0c;大模型究竟如何改变一线业务、实现工作方式的变革甚至组织转型&#xff0c;很多人并没有具象化的认知。 技术厉害、产品牛&…

HEVC 率失真优化技术介绍

背景 为了将具有庞大数据量的视频在有限信道内传输、存储、高压缩率的编码算法往往会造成编码重建视频与原始视频存在差别&#xff0c;即重建视频产生失真&#xff0c;该类压缩被称为有损压缩。对于有损压缩算法&#xff0c;其性能需要根据编码输出的比特率和编码带来的失真度…

Mongo 集群部署

1. 集群架构 # mongos:提供路由数据库集群请求的入口,所有的请求都通过 mongos 进行协调,不需要在应用程序添加一个路由选择器,mongos 自己就是一个请求分发中心,它负责把对应的数据请求转发到对应的 shard 服务器上。在生产环境通常有多 mongos 作为请求的入口,防止其中…

消息服务概述

消息服务的作用&#xff1a; 在多数应用尤其是分布式系统中&#xff0c;消息服务是不可或缺的重要部分&#xff0c;它使用起来比较简单&#xff0c;同时解决了不少难题&#xff0c;例如异步处理、应用解耦、流量削锋、分布式事务管理等&#xff0c;使用消息服务可以实现一个高…

适用于 Linux 系统的综合日志审计和报告

从 Linux 设备以及各种其他日志源收集日志&#xff0c;并从单个控制台监控它们&#xff0c;以轻松了解网络活动。 Linux 系统日志如何工作 Linux 操作系统日志包含多个日志文件&#xff0c;其中包含有关网络中发生的事件的详细信息。在服务器上执行的每个操作都可以通过日志进…

【C语言】从零开始学习数组

&#x1f341; 博客主页:江池俊的博客 &#x1f4ab;收录专栏&#xff1a;C语言——探索高效编程的基石 &#x1f4bb; 其他专栏&#xff1a;数据结构探索 &#x1f4a1;代码仓库&#xff1a;江池俊的代码仓库 &#x1f3aa; 社区&#xff1a;C/C之家社区 &#x1f341; 如果觉…

【项目方案】OpenAI流式请求实现方案

文章目录 实现目的效果比对非stream模式stream模式实现方案方案思路总体描述前端方案对比event-source-polyfill代码示例前端实现遇到的问题与解决方法后端参考资料时序图关键代码示例后端实现时遇到的问题与解决方法实现目的 stream是OpenAI API中的一个参数,用于控制请求的…

UE5.1.1 创建C++项目失败

因一直使用Unity开发环境&#xff0c;安装Unreal后&#xff0c;并未详细配置过其开发环境&#xff0c;默认创建蓝图工程无异常&#xff0c;但创建UE C项目时总共遇到两个错误&#xff1a; 错误一 Running /Epic/UE/UE_5.1/Engine/Build/BatchFiles/Build.bat -projectfiles -…

LeetCode 75 第十二题(11)盛最多水的容器

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 配合着示例给出的图片我们可以得知找出盛水最多的容器是什么意思,给一个数组,找出数组中两个元素能围成的最大的矩阵面积是多少. 比较直观的想法是套两层for循环暴力解出来,但是这题是中等难度题,一般中等题是没法用暴力得…