# 利刃出鞘_Tomcat 核心原理解析(六)

news2024/12/23 10:24:05

利刃出鞘_Tomcat 核心原理解析(六)

一、Tomcat专题 - 内容

1、Web 应用配置

2、Tomcat 管理配置

3、JVM 配置

4、Tomcat 集群

5、Tomcat 安全

6、Tomcat 性能调优

7、Tomcat 附加功能。

二、Tomcat专题 - Web应用配置介绍

1、Web.xml 配置文件。

web.xml 是 web 应用的描述文件, 它支持的元素及属性来自于Servlet 规范定义 。 在 Tomcat 中, Web 应用的描述信息包括 tomcat/conf/web.xml 中默认配置 以及 Web 应用 WEB-INF/web.xml 下的定制配置。

2、Web 应用 WEB-INF/web.xml 下的定制配置参数。

tomcat-29.png

三、Tomcat专题 - Web应用配置 - context-param

1、打开 idea 创建 名为 servlet_demo01 的 Web Application 项目


	--> idea --> File 
	--> New --> Project 
	--> Java 
		Project SDK: ( 1.8(java version "1.8.0_131" ) 
	--> Java EE : 勾选 ( Web Application )
	--> Next 

	--> Project Name: ( servlet_demo01 )
		Project Location: ( ...\servlet_demo01\ )	
	--> Finish	

2、在项目 servlet_demo01 中,创建 Servlet 类 BbsServlet.java

/**
 *  project_tomcat\servlet_demo01\src\djh\it\web\BbsServlet.java
 *
 *  2024-8-13 创建 Servlet 类 BbsServlet.java
 *  Web应用配置 - context-param
 */
package djh.it.web;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet
public class BbsServlet extends HttpServlet {

    @Override
    protected void doGet( HttpServletRequest req, HttpServletResponse resp ){
        System.out.println("------------>> GET : BbsServlet find all ...");

        String value = req.getServletContext().getInitParameter("project_param_01");
        System.out.println(value);
    }

    @Override
    protected void doPost( HttpServletRequest req, HttpServletResponse resp ){
        System.out.println("------------>> POST : BbsServlet find all ...");
    }

}

3、在项目 servlet_demo01 中, Web应用配置 - context-param

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>bbsServlet</servlet-name>
        <servlet-class>djh.it.web.BbsServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>bbsServlet</servlet-name>
        <url-pattern>/bbs/findAll</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>project_param_01</param-name>
        <param-value>dzs168</param-value>
    </context-param>

</web-app>
<!-- project_tomcat\servlet_demo01\web\WEB-INF\web.xml -->

4、浏览器地址栏输入:localhost:8080/servlet_demo01/bbs/findAll 进行测试,观察控制台输出结果。

dzs168

四、Tomcat专题 - Web应用配置介绍 - 会话配置session-config

1、会话配置

用于配置Web应用会话,包括 超时时间、Cookie配置以及会话追踪模式。它将覆盖 server.xml 和 context.xml 中的配置。

    <!-- 会话配置session-config -->
    <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <name>JESSIONID</name>
            <domain>localhost</domain>
            <path>/</path>
            <comment>Session Cookie</comment>
            <http-only>true</http-only>
            <secure>false</secure>
            <max-age>3600</max-age>
        </cookie-config>
    </session-config>

2、配置解析

1) session‐timeout : 会话超时时间,单位 分钟。

2) cookie‐config: 用于配置会话追踪 Cookie。

name:Cookie的名称
domain:Cookie的域名
path:Cookie的路径
comment:注释
http‐only:cookie 只能通过HTTP方式进行访问,JS无法读取或修改,此项可以增加网站访问的安全性。 secure:此cookie只能通过HTTPS连接传递到服务器,而HTTP 连接则不会传递该信息。注意是从浏览器传递到服务器,服务器端的Cookie对象不受此项影响。 max‐age:以秒为单位表示cookie的生存期,默认为‐1表示是会话Cookie,浏览器关闭时就会消失。

3) tracking‐mode :用于配置会话追踪模式,Servlet3.0 版本中支持的追踪模式:COOKIE、URL、SSL。
A. COOKIE : 通过HTTP Cookie 追踪会话是最常用的会话追踪机制, 而且Servlet规范也要求所有的Servlet规范都需要支持Cookie追踪。
B. URL : URL重写是最基本的会话追踪机制。当客户端不支持Cookie时,可以采用URL重写的方式。当采用URL追踪模式时,请求路径需要包含会话标识信息,Servlet容器会根据路径中的会话标识设置请求的会话信息。如: http://www.myserver.com/user/index.html;jessionid=1234567890。

C. SSL : 对于SSL请求, 通过SSL会话标识确定请求会话标识。

3、在 web.xml 配置文件中配置会话。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>bbsServlet</servlet-name>
        <servlet-class>djh.it.web.BbsServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>bbsServlet</servlet-name>
        <url-pattern>/bbs/findAll</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>project_param_01</param-name>
        <param-value>dzs168</param-value>
    </context-param>

    <!-- 会话配置session-config -->
    <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <name>JESSIONID</name>
            <domain>localhost</domain>
            <path>/</path>
            <comment>Session Cookie</comment>
            <http-only>true</http-only>
            <secure>false</secure>
            <max-age>3600</max-age>
        </cookie-config>
    </session-config>

</web-app>
<!-- project_tomcat\servlet_demo01\web\WEB-INF\web.xml -->

4、在项目 servlet_demo01 中,修改 Servlet 类 BbsServlet.java

/**
 *  project_tomcat\servlet_demo01\src\djh\it\web\BbsServlet.java
 *
 *  2024-8-13 创建 Servlet 类 BbsServlet.java
 *  Web应用配置 - context-param
 */
package djh.it.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//@WebServlet
public class BbsServlet extends HttpServlet {

    @Override
    protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
        System.out.println("------------>> GET : BbsServlet find all ...");

        String value = req.getServletContext().getInitParameter("project_param_01");
        System.out.println(value);

        //会话SessionId
        String id = req.getSession().getId();
        System.out.println("sessionId : " + id);

//        processRequest(req, resp);
    }

    @Override
    protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException{
        System.out.println("------------>> POST : BbsServlet find all ...");
//        processRequest(req, resp);
    }

//    private  void processRequest(HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException{
//        //设置响应的内容类型为HTML
//        resp.setContentType("text/html; charset=UTF-8");
//        //获取请示参数
//        String parameter = req.getParameter("param");
//        //向控制台打印请示参数
//        System.out.println("Received parameter : " + parameter);
//        //输出响应内容
//        PrintWriter writer = resp.getWriter();
//        writer.println("<h1>Hello,Servlet!</h1>");
//        writer.println("Received parameter : " + parameter);
//
//    }
//
}

4、浏览器地址栏输入:localhost:8080/servlet_demo01/bbs/findAll 进行测试,观察控制台输出结果。

tomcat-30.png

五、Tomcat专题 - Web应用配置介绍

1、Servlet配置

Servlet 的配置主要是两部分, servlet 和 servlet-mapping :

<servlet>
  <servlet‐name>myServlet</servlet‐name>
  <servlet‐class>djh.it.web.MyServlet</servlet‐class>
  <init‐param>
    <param‐name>fileName</param‐name>
    <param‐value>init.conf</param‐value>
  </init‐param>
  <load‐on‐startup>1</load‐on‐startup>
  <enabled>true</enabled>
</servlet>
<servlet‐mapping>
  <servlet‐name>myServlet</servlet‐name>
  <url‐pattern>*.do</url‐pattern>
  <url‐pattern>/myservet/*</url‐pattern>
</servlet‐mapping>

2、servlet 和 servlet-mapping 配置说明:

1) servlet‐name : 指定servlet的名称, 该属性在web.xml中唯一。

2) servlet‐class : 用于指定servlet类名

3) init‐param: 用于指定servlet的初始化参数, 在应用中可以通过 HttpServlet.getInitParameter 获取。

4) load‐on‐startup: 用于控制在Web应用启动时,Servlet的加载顺序。 值小于0,web应用启动时,不加载该servlet, 第一次访问时加载。

5) enabled: true , false 。 若为false ,表示Servlet不处理任何请求。

6) url‐pattern: 用于指定URL表达式,一个 servlet‐mapping可以同时配置多个 url‐pattern。

3、Servlet 中文件上传配置:

<servlet>
    <servlet‐name>uploadServlet</servlet‐name>
    <servlet‐class>djh.it.web.UploadServlet</servlet‐class>
    <multipart‐config>
      <location>C://path</location>
      <max‐file‐size>10485760</max‐file‐size>
      <max‐request‐size>10485760</max‐request‐size>
      <file‐size‐threshold>0</file‐size‐threshold>
    </multipart‐config>
</servlet>

4、Servlet 中文件上传配置 配置说明:

1) location:存放生成的文件地址。

2) max‐file‐size:允许上传的文件最大值。 默认值为‐1, 表示没有限制。

3) max‐request‐size:针对该 multi/form‐data 请求的最大数量,默认值为‐1, 表示无限制。

4) file‐size‐threshold:当数量量大于该值时, 内容会被写入文件。

5、Listener配置

Listener用于监听servlet中的事件,例如context、request、session对象的创建、修改、删除,并触发响应事件。Listener是观察者模式的实现,在servlet中主要用于对context、request、session对象的生命周期进行监控。在servlet2.5规范中共定义了8中Listener。在启动时,ServletContextListener 的执行顺序与web.xml 中的配置顺序一致, 停止时执行顺序相反。

 <listener>
    <listener‐class>org.springframework.web.context.ContextLoaderListener</listener‐class>
</listener>

6、Filter配置

filter 用于配置web应用过滤器, 用来过滤资源请求及响应。 经常用于认证、日志、加密、数据转换等操作, 配置如下:

<filter>
    <filter‐name>myFilter</filter‐name>
    <filter‐class>djh.it.web.MyFilter</filter‐class>
    <async‐supported>true</async‐supported>
    <init‐param>
      <param‐name>language</param‐name>
      <param‐value>CN</param‐value>
    </init‐param>
</filter>
<filter‐mapping>
    <filter‐name>myFilter</filter‐name>
    <url‐pattern>/*</url‐pattern>
</filter‐mapping>

7、Filter 配置说明:

1) filter‐name: 用于指定过滤器名称,在web.xml中,过滤器名称必须唯一。 
2) filter‐class : 过滤器的全限定类名, 该类必须实现Filter接口。 
3) async‐supported: 该过滤器是否支持异步。
4) init‐param :用于配置Filter的初始化参数, 可以配置多个, 可以通过FilterConfig.getInitParameter获取。
5) url‐pattern: 指定该过滤器需要拦截的URL

六、Tomcat专题 - Web应用配置介绍 - 欢迎页面和错误页面

1、tomcat 欢迎页面配置

welcome-file-list 用于指定web应用的欢迎文件列表。


   <welcome-file-list>
       <welcome-file>index.html/welcome-file>
	   <welcome-file>index.htm</welcome-file>
	   <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>

尝试请求的顺序,从上到下。

2、在 servlet_demo01 项目中,更改 index.jsp 欢迎页面为 登录页面 login.jsp

1) project_tomcat\servlet_demo01\web\index.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/8/13
  Time: 14:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h3>index.jsp 欢迎页面,主页页面</h3>
  $END$
  </body>
</html>

2) project_tomcat\servlet_demo01\web\login.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/8/13
  Time: 14:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h3>login.jsp 登录页面,变为主页</h3>
  $END$
  </body>
</html>

3) project_tomcat\servlet_demo01\web\WEB-INF\web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>bbsServlet</servlet-name>
        <servlet-class>djh.it.web.BbsServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>bbsServlet</servlet-name>
        <url-pattern>/bbs/findAll</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>project_param_01</param-name>
        <param-value>dzs168</param-value>
    </context-param>

    <!-- 会话配置session-config -->
    <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <name>JESSIONID</name>
            <domain>localhost</domain>
            <path>/</path>
            <comment>Session Cookie</comment>
            <http-only>true</http-only>
            <secure>false</secure>
            <max-age>3600</max-age>
        </cookie-config>
    </session-config>

   <welcome-file-list>
       <welcome-file>login.jsp</welcome-file>
   </welcome-file-list>

</web-app>
<!-- project_tomcat\servlet_demo01\web\WEB-INF\web.xml -->

4)浏览器地址栏输入: http://localhost:8080/servlet_demo01/

tomcat-31.png

3、tomcat 错误页面配置

1)error-page 用于配置Web应用访问异常时定向到的页面,支持HTTP响应码和异常类两种形式。

    <!-- 错误页面 -->
    <error-page>
        <error-code>404</error-code>
        <location>/404.html</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/500.html</location>
    </error-page>
    <error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/error.jsp</location>
    </error-page>

2)如果在 servlet_demo01 项目中,未配置错误页面,在 servlet 中添加模拟异常,访问时就会出现如下界面:

/**
 *  project_tomcat\servlet_demo01\src\djh\it\web\BbsServlet.java
 *
 *  2024-8-13 创建 Servlet 类 BbsServlet.java
 *  Web应用配置 - context-param
 */
package djh.it.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//@WebServlet
public class BbsServlet extends HttpServlet {

    @Override
    protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
        System.out.println("------------>> GET : BbsServlet find all ...");

        String value = req.getServletContext().getInitParameter("project_param_01");
        System.out.println(value);

        int i = 1/0;  //模拟异常。

        //会话SessionId
        String id = req.getSession().getId();
        System.out.println("sessionId : " + id);

//        processRequest(req, resp);
    }

    @Override
    protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException{
        System.out.println("------------>> POST : BbsServlet find all ...");
//        processRequest(req, resp);
    }

//    private  void processRequest(HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException{
//        //设置响应的内容类型为HTML
//        resp.setContentType("text/html; charset=UTF-8");
//        //获取请示参数
//        String parameter = req.getParameter("param");
//        //向控制台打印请示参数
//        System.out.println("Received parameter : " + parameter);
//        //输出响应内容
//        PrintWriter writer = resp.getWriter();
//        writer.println("<h1>Hello,Servlet!</h1>");
//        writer.println("Received parameter : " + parameter);
//
//    }
//
}

2)浏览器访问出现如下界面,是不安全的。

tomcat-31.png

4、在 servlet_demo01 项目中,配置错误页面 404.html 和 500.html

1) project_tomcat\servlet_demo01\web\404.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404</title>
</head>
<body>

<h3>404! 您访问的页面不存在,请检查访问路径!</h3>

</body>
</html>

2) project_tomcat\servlet_demo01\web\500.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404</title>
</head>
<body>

<h3>500! 服务器出现异常,请联系管理员!</h3>

</body>
</html>

3) project_tomcat\servlet_demo01\web\error.jsp

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/8/13
  Time: 14:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h3>error.jsp 错误页面</h3>
  $END$
  </body>
</html>

4) project_tomcat\servlet_demo01\web\WEB-INF\web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>bbsServlet</servlet-name>
        <servlet-class>djh.it.web.BbsServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>bbsServlet</servlet-name>
        <url-pattern>/bbs/findAll</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>project_param_01</param-name>
        <param-value>dzs168</param-value>
    </context-param>

    <!-- 会话配置session-config -->
    <session-config>
        <session-timeout>30</session-timeout>
        <cookie-config>
            <name>JESSIONID</name>
            <domain>localhost</domain>
            <path>/</path>
            <comment>Session Cookie</comment>
            <http-only>true</http-only>
            <secure>false</secure>
            <max-age>3600</max-age>
        </cookie-config>
    </session-config>

    <!-- 欢迎页面 -->
   <welcome-file-list>
       <welcome-file>login.jsp</welcome-file>
   </welcome-file-list>

    <!-- 错误页面 -->
    <error-page>
        <error-code>404</error-code>
        <location>/404.html</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/500.html</location>
    </error-page>
<!--    <error-page>-->
<!--        <exception-type>java.lang.Exception</exception-type>-->
<!--        <location>/error.jsp</location>-->
<!--    </error-page>-->

</web-app>
<!-- project_tomcat\servlet_demo01\web\WEB-INF\web.xml -->

5)浏览器再次访问,如下:

  • http://localhost:8080/servlet_demo01/bbs/findAll

500! 服务器出现异常,请联系管理员!

  • http://localhost:8080/servlet_demo01/bbs/findAll666

404! 您访问的页面不存在,请检查访问路径!

上一节关联链接请点击
# 利刃出鞘_Tomcat 核心原理解析(五)

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

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

相关文章

人工智能在病理组学领域的最新进展|文献速递·24-08-09

小罗碎碎念 本期推文主题&#xff1a;人工智能在病理组学领域的最新进展 这一期推文和往期不太一样——往期几乎都是顶刊&#xff0c;而这一期选了一些分数不那么高的文章。这样做有两个原因&#xff1a; 验证一下在IF较低的期刊中能否找到灵感对比一下&#xff0c;期刊之间的…

子进程与父进程运行不同程序

往文件里面写内容&#xff0c;fork在open之前&#xff0c;会接着父进程写的内容写,继承父进程的状态信息&#xff0c;文件描述符一直往下 往文件里面写内容&#xff0c;fork在open之后&#xff0c;分别打开文件&#xff0c;后运行的会覆盖先运行的内容 让低8位有效 进程的终止…

LVS-NAT + LVS-DR

LVS 现在lvs已经是linux内核标准的一部分&#xff0c;使用lvs可以达到的技术目标是&#xff1a;通过linux达到负载均衡技术和linux操作系统实现一个高性能高可用的linux服务器集群&#xff0c;他具有良好的可靠性&#xff0c;可延展性和可操作性&#xff0c;从而以低廉的成本实…

AQS的同步队列和条件队列原理

文章目录 二者区别实现原理同步队列原码-内部类Node源码-获取锁源码-释放锁条件队列原码-内部类Node源码-等待源码-唤醒Demo-比较典型的条件队列使用场景二者区别 首先,AQS中的 同步队列 和 条件队列 是两种不同队列: 目的不同:同步队列主要用于实现锁机制(也就是锁的获取…

4.3.2 C++ 平面拟合的实现

4.3.2 C 平面拟合的实现 参考教程&#xff1a; gaoxiang12/slam_in_autonomous_driving: 《自动驾驶中的SLAM技术》对应开源代码 (github.com) Eigen打印输出_打印eigen矩阵-CSDN博客 1. 编写 Plane fitting 1.1 创建文件夹 通过终端创建一个名为Plane_fitting的文件夹以保…

Cookie和Session的区别(详细讲解)

Session 和 Cookie 的区别 在网络通信过程中&#xff0c;使用的是HTTP协议&#xff0c;它是一种无状态协议&#xff0c;比如&#xff0c;在登录一个网站时&#xff0c;登录成功后&#xff0c;之后在访问这个网站的其他页面时&#xff0c;都需要重新登录&#xff0c;无法识别出…

[240812] X-CMD 发布 v0.4.5:更新 gtb、cd、chat、hashdir 模块功能

目录 &#x1f4c3;Changelog✨ gtb✨ cd✨ chat✨ hashdir &#x1f4c3;Changelog ✨ gtb 调整了 fzf 预览窗口中书籍文本的显示效果&#xff0c;通过识别文本中的特殊字符、日期、章节标题等信息&#xff0c;为其赋予不同的颜色。 ✨ cd cd 模块新增功能&#xff1a;在找…

网络编程day03 20240813

一、相关练习 1、通过w(红色臂角度增大)s&#xff08;红色臂角度减小&#xff09;d&#xff08;蓝色臂角度增大&#xff09;a&#xff08;蓝色臂角度减小&#xff09;按键控制机械臂 机械臂需要发送16进制数&#xff0c;共5个字节&#xff0c;协议如下&#xff1a; 0xff 0x0…

数据库核心技术:存储与索引概览

文章目录 存储与索引技术概览存储结构索引技术 MySQL存储结构索引技术事务与锁优势 PostgreSQL存储结构索引技术事务与锁优势 Oracle存储结构索引技术事务与锁优势 SQL Server存储结构索引技术事务与锁优势 选型考量存储结构索引技术事务与锁的支持综合因素未来趋势 结语 数据库…

【微信小程序】网络数据请求

1. 小程序中网络数据请求的限制 2. 配置 request 合法域名 3. 发起 GET 请求 调用微信小程序提供的 wx.request() 方法,可以发起 GET 数据请求,示例代码如下: 4. 发起 POST 请求 调用微信小程序提供的 wx.request() 方法,可以发起 POST 数据请求,示例代码如下: 5. …

今日头条的账号id在哪里看(网页版)

今日头条的账号id在哪里看&#xff08;网页版&#xff09; 1.https://mp.toutiao.com/profile_v4/index2.登录今日头条账号3.设置->头条号ID 1.https://mp.toutiao.com/profile_v4/index 2.登录今日头条账号 3.设置->头条号ID 打开下方链接&#xff1a; https://mp.to…

进程的执行与结束

一、文件的读写 1、fork之前open 子进程会继承父进程已打开的文件相关信息 所以&#xff0c;此时父子进程会影响一个offset值 2、fork之后open 父子进程各自有各自的打开文件的信息&#xff0c;相互之间不会有影响。 二、 进程的执行 //进程运行时&#xff0c;典型场景 1…

量化策略开发步骤系列(3)关键投资组合指标

量化策略开发步骤系列&#xff08;3&#xff09;关键投资组合指标 投资组合指标波动性夏普比率最大回撤赢/输百分比每笔交易的平均利润/亏损每期交易次数风险价值&#xff08;VaR&#xff09; 这是量化交易系列文章的第二系列——量化策略开发步骤&#xff0c;第一系列请参考专…

Prometheus+Grafana-3-Nginx监控-Redis监控

一、监控Nginx 1.Nginx需要开启stub_status 这里我的nginx容器名为mynignx&#xff0c;进入容器查看。 docker exec -it mynginx bash #进入容器 nginx -v 2>&1 | grep -o with-http_stub_status_module #查看 修改nginx.conf ...location /stub_status {stub_stat…

华为od统一考试B卷【AI面板识别】python实现

思路 n int(input())class Light:def __init__(self, id, x1, y1, x2, y2):self.id idself.x1 x1self.y1 y1self.x2 x2self.y2 y2self.height y2 - y1def get_lights_info(n):lights []for _ in range(n):id, x1, y1, x2, y2 map(int, input().strip().split())lights…

量产工具——复习及改进(后附百问网课程视频链接)

目录 一、函数的使用 1.显示系统 1.1 mmap函数 2.输入系统 2.1 ts_setup()函数 2.2 ts_read()函数 2.3 socket()函数 2.4 bind()函数 2.5 recvfrom()函数 2.6 inet_aton()函数 2.7 sendto()函数 2.8 pthread_create()函数 2.9 pthread_cond_signal()函数 2.10 pthre…

思科路由器的基本配置1

#路由技术基础# #路由器的基本配置1# #1调整超级终端的参数 #2退出配置向导&#xff0c;输入“NO”即可进入正常配置方式 #3路由器的模式切换 Router> &#xff01;进入用户模式 Router>enable &#xff01;进入特权模…

opencv-python实战项目一:获取鼠标框选区域的颜色

文章目录 一&#xff1a;简介二&#xff1a;框选区域选择颜色方案三、算法实现步骤3.1 按鼠标事件截取图像3.2将图像模糊后转化为hsv并求均值3.3 判断hsv处于何种颜色 四&#xff1a;整体代码实现五&#xff0c;效果: 一&#xff1a;简介 在计算机视觉领域&#xff0c;颜色检测…

19-ESP32-C3加大固件储存区

1默认编译情况。 2、改flash4M。ESP-IDF Partition Table Editor修改。 3、设置输入Partition Table 改自定义.CSV。保存。 4、查看命令输入Partition Table Editor打开-分区表编辑器UI。按图片增加。 nvs,data,nvs,0x9000,0x6000,, phy_init,data,phy,0xF000,0x1000,, factory…

计算机毕业设计Hadoop+Hive居民用电量分析 居民用电量可视化 电量爬虫 机器学习 深度学习 大数据毕业设计 Spark

《Hadoop居民用电量分析》开题报告 一、研究背景与意义 能源问题在全球范围内一直是热点议题&#xff0c;尤其是随着居民生活水平的提高和城市化进程的加快&#xff0c;居民用电量急剧增长&#xff0c;对电力系统的稳定运行和能源管理提出了更高要求。如何科学合理地管理和分…