[maven] maven 创建 web 项目并嵌套项目

news2024/11/14 15:26:49

[maven] maven 创建 web 项目并嵌套项目

这里主要就创建另外一个 web 项目,并且创建一个 parent 项目比较方便的管理一下两个子项目。

maven web 项目

web 创建和 quickstart 的过程是差不多的,只不过这里换乘 webapp,配置方便的话可以搞的东西挺多的……这里就搞 servlet,上古版本的东西了。

create new web application

在这里插入图片描述

创建新的 maven 项目这里就换成 webapp,创建后的项目,pom 也会不太一样:

❯ tree productweb
productweb
├── pom.xml
├── src
│   └── main
│       └── webapp
│           ├── WEB-INF
│           │   └── web.xml
│           └── index.jsp
└── target
    ├── classes
    ├── m2e-wtp
    │   └── web-resources
    │       └── META-INF
    │           ├── MANIFEST.MF
    │           └── maven
    │               └── com.goldenaarcher.product
    │                   └── productweb
    │                       ├── pom.properties
    │                       └── pom.xml
    └── test-classes

14 directories, 6 files

❯ cat productweb/pom.xml
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.goldenaarcher.product</groupId>
  <artifactId>productweb</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>productweb Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>productweb</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

简单的过一下 pom 的配置:

  • 如 pom 显示的一样,这里打包的包是 war 而不是 jar。
  • finalName 这个选项设置会重写默认的项目名

这时候项目还是没有办法运行的,因为目前项目没有服务器,所以这个时候需要完成服务器相关的配置。

  1. eclipse 中添加 tomcat

    完成这一步项目就不会报错,可以正常 build

    这个也可以通过直接在 pom 里面设置,这里是直接配置本地已经下载好的 tomcat

    具体步骤就是在项目属性里面选择 targeted runtime:

    在这里插入图片描述

    如果 tomcat 的配置像在之前的笔记 Mac 中安装 tomcat 及 Eclipse 配置 Tomcat 提过的一样已经搞好了,也可以通过 tomcat 进行修改:

    在这里插入图片描述

  2. 添加 servlet 的依赖

    依赖如下:

        <dependency>
          <groupId>org.apache.geronimo.specs</groupId>
          <artifactId>geronimo-servlet_3.0_spec</artifactId>
          <version>1.0</version>
          <scope>provided</scope>
        </dependency>
    

两个都配置好了就可以运行 mvn clean install 了:

[[1;34mINFO[m] [1m--- [0;32mmaven-war-plugin:3.2.2:war[m [1m(default-war)[m @ [36mproductweb[0;1m ---[m
[[1;34mINFO[m] Packaging webapp
[[1;34mINFO[m] Assembling webapp [productweb] in [/Users/usr/study/maven/productweb/target/productweb]
[[1;34mINFO[m] Processing war project
[[1;34mINFO[m] Copying webapp resources [/Users/usr/study/maven/productweb/src/main/webapp]
[[1;34mINFO[m] Webapp assembled in [24 msecs]
[[1;34mINFO[m] Building war: /Users/usr/study/maven/productweb/target/productweb.war
[[1;34mINFO[m]
[[1;34mINFO[m] [1m--- [0;32mmaven-install-plugin:2.5.2:install[m [1m(default-install)[m @ [36mproductweb[0;1m ---[m
[[1;34mINFO[m] Installing /Users/usr/study/maven/productweb/target/productweb.war to /Users/usr/.m2/repository/com/goldenaarcher/product/productweb/0.0.1-SNAPSHOT/productweb-0.0.1-SNAPSHOT.war
[[1;34mINFO[m] Installing /Users/usr/study/maven/productweb/pom.xml to /Users/usr/.m2/repository/com/goldenaarcher/product/productweb/0.0.1-SNAPSHOT/productweb-0.0.1-SNAPSHOT.pom
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] [1;32mBUILD SUCCESS[m
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m
[[1;34mINFO[m] Total time:  1.631 s
[[1;34mINFO[m] Finished at: 2023-09-11T21:12:28-04:00
[[1;34mINFO[m] [1m------------------------------------------------------------------------[m

注意这里 war 就已经打包好了

准备工作

maven 创建项目的时候,可能会漏结构,所以需要确认一下结构。Maven resource folder isn’t created 中提到的是资源文件夹没有创建,不过我这里是连 java 都瘸了……所以说,如果 main 没有三个文件夹,就需要创建缺失的文件夹,,随后更新一下 maven 项目,此时结构如下:

cd productweb
❯ mkdir src/main/java
❯ mkdir src/main/resources
❯ tree .
.
├── pom.xml
├── src
│   └── main
│       ├── java
│       ├── resources
│       └── webapp
│           ├── WEB-INF
│           │   └── web.xml
│           └── index.jsp
└── target
    ├── classes
    ├── m2e-wtp
    │   └── web-resources
    │       └── META-INF
    │           ├── MANIFEST.MF
    │           └── maven
    │               └── com.goldenaarcher.product
    │                   └── productweb
    │                       ├── pom.properties
    │                       └── pom.xml
    ├── maven-archiver
    │   └── pom.properties
    ├── productweb
    │   ├── META-INF
    │   ├── WEB-INF
    │   │   ├── classes
    │   │   └── web.xml
    │   └── index.jsp
    ├── productweb.war
    └── test-classes

21 directories, 10 files

resources 还是挺重要的,一些资源的同步就靠这个文件夹。

创建 servlets

创建产品 servlet

这里点击项目右键选择创建新的 servlet,现在这个年代已经不是热门选项了,有可能需要到 more 里面去找:

在这里插入图片描述

下一步提供 servlet 的名称:

在这里插入图片描述

选择 URL mapping:

在这里插入图片描述

完成创建:

在这里插入图片描述

完成后的结构如下:

❯ tree src/main/java
src/main/java
└── com
    └── goldenaarcher
        └── product
            └── servlets
                └── CreateProductServlet.java

5 directories, 1 file

servlet 的文件内容为:

package com.goldenaarcher.product.servlets;

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

/**
 * Servlet implementation class CreateProductServlet
 */
public class CreateProductServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public CreateProductServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

展示产品 servlet

也是右键新建生成一个 servlet,这里选择 doGet,然后生成一个空的 java 模板。

关于 mapping

这个跟自动生成有关系,有可能是通过注解 @WebServlet 实现,或者是通过 webapp/WEB-INF 下的 web.xml 实现 mapping,eclipse 自动生成 xml 文件:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
  	<servlet-name>CreateProductServlet</servlet-name>
  	<display-name>CreateProductServlet</display-name>
  	<description></description>
  	<servlet-class>com.goldenaarcher.product.servlets.CreateProductServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>CreateProductServlet</servlet-name>
  	<url-pattern>/CreateProductServlet</url-pattern>
  </servlet-mapping>
</web-app>

stack overflow 上也有一个回答解释了 mapping 的问题: Not getting automatically web.xml file while creating servlet in Eclipse Juno 4.2

简单的说就是,@WebServlet("/CreateProductServlet") 可以代替这几行代码:

  <servlet>
  	<servlet-name>CreateProductServlet</servlet-name>
  	<display-name>CreateProductServlet</display-name>
  	<description></description>
  	<servlet-class>com.goldenaarcher.product.servlets.CreateProductServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>CreateProductServlet</servlet-name>
  	<url-pattern>/CreateProductServlet</url-pattern>
  </servlet-mapping>

两种配置可以同时存在,但是同一个 servelet 不能被 map 两次,否则会运行失败。

tomecat 10 更新

tomcat10 的包从 javax.servlet.jsp 变成了 jakarta.servlet.jsp,所以要下载对应的新 dependency

		<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
		<dependency>
			<groupId>jakarta.servlet</groupId>
			<artifactId>jakarta.servlet-api</artifactId>
			<version>6.0.0</version>
			<scope>provided</scope>
		</dependency>

创建 HTML

这个页面就是创建产品的页面,它的目录为 src/main/webapp 完整代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Create Product</title>
    <style>
      div {
        display: flex;
      }

      input {
        display: block;
      }
    </style>
  </head>
  <body>
    <h3>Enter Product Details:</h3>
    <form method="post" action="CreateProductServlet">
      <div>Product Id: <input name="id" /></div>
      <div>Product Name: <input name="name" /></div>
      <div>Product Description: <input name="description" /></div>
      <div>Product Price: <input name="price" /></div>
      <div>
        <input type="submit" />
      </div>
    </form>
  </body>
</html>

此时的结构为:

❯ tree src
src
└── main
    ├── java
    │   └── com
    │       └── goldenaarcher
    │           └── product
    │               └── servlets
    │                   ├── CreateProductServlet.java
    │                   └── DisplayProductDetailsServelet.java
    ├── resources
    └── webapp
        ├── WEB-INF
        │   └── web.xml
        ├── index.jsp
        └── product.html

10 directories, 5 files

运行项目

在这里插入图片描述

这回直接在 tomcat 上进行运行,这时候页面显示如下:

在这里插入图片描述

在这里插入图片描述

下一步要做的,就是把 product service 和 product web 两个项目连起来,实现一个可以运行的页面。

多模块项目

为了方便管理,主要这样可以只用跑一次 maven 相关的指令。

清理结构

我这里创建了一个新的文件夹,然后把两个 product 相关的文件夹搬进去了。这个可以用 GUI 也可以用命令行。

调整完了结构如下:

❯ tree -L 3
.
├── pom.xml
├── productservices
│   ├── pom.xml
│   ├── src
│   │   ├── main
│   │   └── test
│   └── target
│       ├── classes
│       ├── generated-sources
│       ├── generated-test-sources
│       ├── maven-archiver
│       ├── maven-status
│       ├── productservices-1.0.jar
│       ├── surefire-reports
│       └── test-classes
└── productweb
    ├── pom.xml
    ├── src
    │   └── main
    └── target
        ├── classes
        ├── generated-sources
        ├── m2e-wtp
        ├── maven-archiver
        ├── maven-status
        ├── productweb
        └── productweb.war

23 directories, 5 files

新增&修改 pom 文件

总共需要修改 3 个 pom 文件

新增 parent 文件夹下的 pom

创建 parent 文件夹下的 pom 文件:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.goldenaarcher.product</groupId>
	<artifactId>productparent</artifactId>
	<version>1.0</version>
	<packaging>pom</packaging>

	<name>productparent</name>
	<!-- FIXME change it to the project's website -->
	<url>http://www.example.com</url>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<modules>
		<module>productservices</module>
		<module>productweb</module>
	</modules>
</project>

这里主要需要注意的就是亮点:

  1. packaging 的格式是 pom
  2. modules 下包含所有的子项目

更新子项目的 pom

更新 parent 下的部分都是共同的,所有子项目都要重新定义一下父项目

productservices pom
	<parent>
		<groupId>com.goldenaarcher.product</groupId>
		<artifactId>productparent</artifactId>
		<version>1.0</version>
	</parent>

	<artifactId>productservices</artifactId>
	<name>productservices</name>
	<!-- FIXME change it to the project's website -->
	<url>http://www.example.com</url>
productweb pom

除了 parent,web 这里海需要更新 dependency,因为 web 需要调用 service 中的 bo 去实现具体功能。

	<parent>
		<groupId>com.goldenaarcher.product</groupId>
		<artifactId>productparent</artifactId>
		<version>1.0</version>
	</parent>

	<artifactId>productweb</artifactId>
	<packaging>war</packaging>

	<name>productweb Maven Webapp</name>
	<!-- FIXME change it to the project's website -->
	<url>http://www.example.com</url>

	<dependencies>
    <!-- 省略其他 -->
		<dependency>
			<groupId>com.goldenaarcher.product</groupId>
			<artifactId>productservices</artifactId>
			<version>1.0</version>
		</dependency>
	</dependencies>

servelt 的 java 实现

这里主要实现的就是从 request 中获取数据,传到 bo 中实现功能即可

实现 CreateProductServlet

这里会从 THML 中获取对应的数据,调用 bo 里的 create 创建一个 product

package com.goldenaarcher.product.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.goldenaarcher.product.bo.ProductBO;
import com.goldenaarcher.product.bo.ProductBOImpl;
import com.goldenaarcher.product.dto.Product;

/**
 * Servlet implementation class CreateProductServlet
 */
public class CreateProductServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Integer id = Integer.parseInt( request.getParameter("id"));
		String name = request.getParameter("name");
		String desc = request.getParameter("description");
		Integer price = Integer.parseInt( request.getParameter("price"));

		Product product = new Product();
		product.setId(id);
		product.setDescription(desc);
		product.setName(name);
		product.setPrice(price);

		ProductBO bo = new ProductBOImpl();
		bo.create(product);

		PrintWriter out = response.getWriter();
		out.print("product created");
	}

}

实现 DisplayProductDetailsServelet

因为这里需要从 query param 中获取 id,所以如果没提供 query param 就会抛出 parse 异常

package com.goldenaarcher.product.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.goldenaarcher.product.bo.ProductBO;
import com.goldenaarcher.product.bo.ProductBOImpl;
import com.goldenaarcher.product.dto.Product;

/**
 * Servlet implementation class DisplayProductDetailsServelet
 */
public class DisplayProductDetailsServelet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ProductBO bo = new ProductBOImpl();
		Product product = bo.findProduct(Integer.parseInt(request.getParameter("id")));

		PrintWriter out = response.getWriter();
		out.print("Product details: ");
		out.print("Product ID: " + product.getId());
		out.print("Product Name: " + product.getName());
		out.print("Product Description: " + product.getDescription());
		out.print("Product Price: " + product.getPrice());
	}

}

最终创建和运行

这里会把 build install 拆分成几个部分简单解释一下

reactor

reactor 指的是 maven 能够根据项目的依赖,调整打包顺序的能力,maven 会根据其依赖关系调整打包的顺序。

❯ mvn clean install
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] productparent                                                      [pom]
[INFO] productservices                                                    [jar]
[INFO] productweb Maven Webapp                                            [war]
[INFO]
[INFO] --------------< com.goldenaarcher.product:productparent >---------------
[INFO] Building productparent 1.0                                         [1/3]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ productparent ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ productparent ---
[INFO] Installing /Users/usr/study/maven/parent/pom.xml to /Users/usr/.m2/repository/com/goldenaarcher/product/productparent/1.0/productparent-1.0.pom

打包子项目

这里 maven 会将 service 的项目打包到 m2 的文件夹中让其他的项目使用,这里 web 就需要调用 service 中的内容。

[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ productservices ---
[INFO] Building jar: /Users/usr/study/maven/parent/productservices/target/productservices-1.0.jar
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ productservices ---
[INFO] Installing /Users/usr/study/maven/parent/productservices/target/productservices-1.0.jar to /Users/usr/.m2/repository/com/goldenaarcher/product/productservices/1.0/productservices-1.0.jar
[INFO] Installing /Users/usr/study/maven/parent/productservices/pom.xml to /Users/usr/.m2/repository/com/goldenaarcher/product/productservices/1.0/productservices-1.0.pom
[INFO]

其他项目打包部分与其他的 maven 差不多,这里不多赘述。

这里的功能实现完了,war 也打包完了,可以直接放到服务器上运行。本质上来说,war 中的内容和 target 中的 productweb 结构是一样的,前者是后者的压缩版。

最终运行结果

依旧是在 eclipse 中的 tomcat 运行服务器,所有的功能都实现了,最终的运行结果如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

CSS 会不太一样,我笔记里改了一点 CSS。

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

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

相关文章

Android 实战项目分享(一)用Android Studio绘制贝塞尔曲线的艺术之旅

一、项目概述 欢迎来到创意之源&#xff01;我们精心打造的绘图应用程序将带你进入一个充满艺术和技术的奇妙世界。通过使用Android Studio&#xff0c;我们实现了绘制贝塞尔曲线的功能&#xff0c;让你能够轻松创作出令人惊叹的艺术作品。不论你是热爱绘画的大学生还是渴望学习…

VS2015+opencv 3.4.6开发环境

VS2015+opencv 3.4.6开发环境 一、安装包下载二、安装过程三、VS环境配置四、测试一、安装包下载 这里提供两种下载方法:   1. opencv官网   2. csdn资源下载 二、安装过程 2.1 下载opencv-3.4.6 安装包 2.2 双击开始安装,选择要安装目录,点击Extract。  2.3 等待解…

I/O多路复用三种实现

一.select 实现 &#xff08;1&#xff09;select流程 基本流程是&#xff1a; 1. 先构造一张有关文件描述符的表; fd_set readfds 2. 清空表 FD_ZERO() 3. 将你关心的文件描述符加入到这…

天翎知识管理系统:智能化搜索引擎,快速定位知识资源

关键词&#xff1a;知识管理系统、全文检索 编者按&#xff1a;在当今知识经济时代&#xff0c;企业所面临的知识资源越来越丰富&#xff0c;如何高效地管理和利用这些资源成为了一个重要的问题。天翎知识管理系统凭借其智能化搜索引擎&#xff0c;可以帮助企业快速定位知识资源…

论文管理系统设计与实现

毕业论文管理系统的设计与实现 学生&#xff1a; 指导教师&#xff1a; 内容摘要&#xff1a;毕业论文管理系统是典型的MIS信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而…

LeetCode【4. 寻找两个正序数组的中位数】

快乐安康 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 public double findMedianSortedArrays(int[] nums1, int[] nums2) {if (nums1.length &…

干净优雅的做iOS应用内全局交互屏蔽

本文字数&#xff1a;4930字 预计阅读时间&#xff1a;28分钟 01 交互屏蔽的需求 很多应用开发者都会遇到这样一个需求&#xff0c;当程序需要处理某个敏感的核心任务&#xff0c;或者执行某些动画时&#xff0c;需要杜绝一切外部干扰&#xff0c;优先保证任务的完成&#xff0…

EF Core 迁移失败、数据丢失 手动处理

一、环境 windows 10 Visual studio 2022 dotnet 6.0.404 Microsoft.EntityFrameworkCore.Tools 6.0.14 二、问题 有一记录房产交易数据的实体&#xff0c;已有生产数据&#xff0c;现需更改、添加字段&#xff0c;产生了迁移不成功和数据丢失的问题。 原实体定义 //唯一复合索…

数据结构与算法——11.递归

这篇文章我们来讲一个很常用的算法思想——递归 目录 1.递归的概述 2.用递归求阶乘 3.用递归反向打印字符串 4.用递归来求解二分查找 5.用递归解决冒泡排序 6.用递归解决插入排序 7.用递归解决斐波那契数列 8.用递归解决兔子问题 9.用递归解决青蛙爬楼梯问题 10.递归…

CSS - 鼠标移入整行高亮显示,适用于会员套餐各参数对比页面(display: table,div 转表格形式)

效果图 可根据基础示例和进阶示例&#xff0c;复制进行改造样式。 如下图所示&#xff0c;本文提供 2 个示例。 基础示例 找个 HTML 页面&#xff0c;一键复制运行。 <body><h1 style"text-align: center;">基础示例</h1><section class"…

软件设计模式系列之六——单例模式

1 模式的定义 单例模式&#xff08;Singleton Pattern&#xff09;是一种常见的创建型设计模式&#xff0c;其主要目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。这意味着无论何时何地&#xff0c;只要需要该类的实例&#xff0c;都会返回同一个…

JAVA高级技术入门(单元测试,反射,注解,动态代理)

JAVA高级技术入门&#xff08;单元测试&#xff0c;反射&#xff0c;注解&#xff0c;动态代理&#xff09; 一、Junit单元测试二、反射1.认识反射&#xff0c;获取类概念&#xff1a;快速入门&#xff1a;获取Class对象的三种方式 2.1获取类的构造器2.2获取类的构造器的作用&a…

计算机系统概述之计算机的发展历程

计算机系统概述之计算机的发展历程 计算机的发展历程计算机系统硬件的发展微处理器的发展 软件的发展CAD/ CAM/CIMS的简单介绍 思维导图总结 计算机的发展历程 计算机系统 计算机系统由硬件和软件组成。 硬件&#xff1a;指的是计算机实体&#xff0c;如&#xff1a;主机&#…

【深度学习】 Python 和 NumPy 系列教程(廿四):Matplotlib详解:2、3d绘图类型(10)3D箱线图(3D Box Plot)

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 0. 设置中文字体 1. 3D线框图&#xff08;3D Line Plot&#xff09; 2. 3D散点图&#xff08;3D Scatter Plot&#xff09; 3. 3D条形图&#xff08;3D Bar Plot&#xff09; 4. 3D曲面图…

动态规划——01背包

背包问题经典资料背包九讲&#xff0c;可以上网查一下相关资料。 下面的资料来自代码随想录和自己的一些个人理解&#xff0c;如有需要可以跳转代码随想录进行学习&#xff1a;代码随想录 (programmercarl.com) 背包一共分为01背包&#xff0c;完全背包&#xff0c;多重背包&am…

leetcode:70. 爬楼梯

一、题目 函数原型&#xff1a;int climbStairs(int n) 二、思路 此题运用递归思想。当只有1个台阶&#xff0c;那么只有1种方法爬到楼顶——跨一个台阶&#xff1b;当有2个台阶时&#xff0c;有2种方法爬到楼顶——跨一个台阶跨两次或直接跨两个台阶。当有3个台阶或更多台阶时…

实现客户端pineline的思路

背景&#xff1a; redis集群不支持客户端的mget操作&#xff0c;但是业务上对这个redis集群的批量操作的需求一直都在&#xff0c;所以有各种客户端实现了各式各样的pineline实现,本文就记录下我们公司的实现方式 pineline实现思路 1.pineline要快 pineline之所以快是因为可…

深度学习训练过程可视化工具

1.深度学习网络结构画图工具 地址&#xff1a;https://cbovar.github.io/ConvNetDraw/ 2.caffe可视化工具 输入&#xff1a;caffe配置文件 输出&#xff1a;网络结构 地址&#xff1a;http://ethereon.github.io/netscope/#/editor 3.深度学习可视化工具Visual DL Visual D…

数据变换:数据挖掘的准备工作之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

【毕设选题】flink大数据淘宝用户行为数据实时分析与可视化

文章目录 0 前言1、环境准备1.1 flink 下载相关 jar 包1.2 生成 kafka 数据1.3 开发前的三个小 tip 2、flink-sql 客户端编写运行 sql2.1 创建 kafka 数据源表2.2 指标统计&#xff1a;每小时成交量2.2.1 创建 es 结果表&#xff0c; 存放每小时的成交量2.2.2 执行 sql &#x…