JavaEE Tomcat Servelet第一个helloworld程序

news2024/11/25 12:36:34

Tomcat & Servelet第一个程序helloworld!

在这里插入图片描述

文章目录

  • JavaEE & Tomcat & 第一个Servelet程序
    • 1. HTTP服务器 - Tomcat
      • 1.1 Tomcat的目录结构:
      • 1.2 启动Tomcat
      • 1.3 Tomcat的优点
    • 2. Servelet框架
      • 2.1 创建Maven项目
      • 2.2 引入依赖
      • 2.3 创建目录
      • 2.4 写代码
      • 2.5 打包代码
      • 2.6 部署
      • 2.7 验证程序
    • 3. 简化
    • 4. Servlet程序中常见的问题
      • 4.1 404
      • 4.2 405
      • 4.3 500
      • 4.4 返回空白页面
      • 4.5 无法访问此网站

JavaEE & Tomcat & 第一个Servelet程序

1. HTTP服务器 - Tomcat

HTTP本质上就是一个TCP服务器(HTTP基于TCP)

这个服务器按照HTTP协议的约定,解析请求,构造响应

  • 你自己写一个HTTP服务器,也完全没问题!

不过我们Java圈子和生态中,有一个现成的,最流行的,apache社区开源的http服务器 = = =》 Tomcat

直接去官网下载就行了:Apache Tomcat® - Apache Tomcat 8 Software Downloads

在这里插入图片描述

新的不一定是好的,新的不一定稳定,可能会有点bug(别当小白鼠)

  • 企业也不会经常更新,大部分公司还在用8这个版本
  • 我的代码基于这个版本,servelet也要匹配上,所以如果你的版本跟我的不一样,有一定概率在你那跑不了!

在这里插入图片描述

选择这个:

在这里插入图片描述

下载成功放在熟悉的目录下:

  • 大版本是8就行了,八点几无所谓

在这里插入图片描述

1.1 Tomcat的目录结构:

  • 这就是一个绿色软件,连双击安装都不需要~

在这里插入图片描述

bin 表示binary,里面包含了一下可执行的二进制脚本

在这里插入图片描述
conf 表示config,配置文件

  • 一个复杂的软件,通常会有配置,开启不同的功能~

在这里插入图片描述

logs表示运行日志

  • 出问题来这里看

在这里插入图片描述

webapps 放webapp,即放网站(后端+前端)

一个Tomcat上可以同时部署多个网站

部署说起来高级,其实就是将你的网站的文件放在对应目录下

1.2 启动Tomcat

在这里插入图片描述

  • 这样就启动成功了
  • 乱码没关系的,后面你就知道了

Tomcat是一个http服务器,但凡是一个服务,基本上就是个黑框框~

  • 服务器它好用就完了,丑了就丑了

查看Tomcat的端口号是否正常绑定

  • Tomcat默认端口号为8080
  • 我们要避免这个端口号被其他程序占用!

win R 打开命令行

netstat -ano | findstr 8080
  • netstat -ano:获得所有端口情况
  • findstr 8080:找包含8080的字符串

在这里插入图片描述

  • 两个的话,一个是ipv4,一个是ipv6

    • 后面是进程id:11168

在这里插入图片描述

这样代表绑定成功

通过浏览器,访问Tomcat的欢迎页面

在这里插入图片描述

部署我们自己的网站~

  • 我们自己电脑内打开html当然简单,但是别人不行呀
  • 而这样别人也能访问才能我们的网站

将之前的博客系统html部署到webapps目录下:

  • 部署==放置

在这里插入图片描述

打开Tomcat:

在这里插入图片描述

获取内网ip:

  • 开热点看得到

在这里插入图片描述

输入【ip:端口:路径】去访问~

在这里插入图片描述

少写了字母就会出现404

在这里插入图片描述

这样操作,如果连的是一个热点,那么就可以访问到:

  • 以手机为例
  • 当然,这个页面并没有考虑移动端的问题,这也不做讨论

在这里插入图片描述

然而,没连热点或者外校或者外地的机器,是不能打开这个网站的~

  • 因为NAT机制~
  • 后续我们在云服务器获取外网ip,云服务器上的Tomcat部署网站,别人就能访问到了

1.3 Tomcat的优点

我们现在要写网站后端

虽然我们可以从头写一个HTTP服务器,但是很麻烦

Tomcat已经完成了这一部分工作,并且Tomcat给我们提供了一系列的API,可以让我们在程序里直接调用,大大提高开发速度!

  • 想获取请求包的query string中的某个key的value,直接调用api即可,不必手动解析
  • 想获取cookie,调用个api即可

省去了一部分工作,更加注重业务逻辑!

HTTP服务器:

  1. 根据HTTP协议解析请求报文
  2. 根据HTTP协议构造响应报文

而Tomcat提供的API,就是我们要学的第一个框架:Servelet

2. Servelet框架

在java中使用Servelet,从一个“hello world”开始!

  • 我们需要经历7个步骤,虽然复杂,但是是固定套路

2.1 创建Maven项目

maven是一个构建工具,功能是帮助我们去构建,测试,打包一个项目~

以往我们写的代码都是简单程序,所以按ctrl shift f10直接运行即可

  • 但是在公司中的项目不行,因为这个程序及其复杂,可能涉及很多存在依赖关系的模块,还可能会依赖很多第三方库~

  • 因此,就诞生了一系列的构建工具,来帮你解决上述问题

Java中的构建工具:

  1. Ant(比较老)
  2. Maven(比较主流)
  3. Gradle(比较新,主要是安卓生态在用)

在这里插入图片描述

在这里插入图片描述

  • 首次使用maven项目,会从互联网上加载很多依赖,所以要保持网络通畅!

pom.xml配置文件(标签格式的文本)

  • 这个文件就描述了maven项目的各个方面的内容

在这里插入图片描述

目录结构:

在这里插入图片描述

2.2 引入依赖

Servelet是Tomcat提供的api(第三方库,不是第三方库)

  • Tomcat是Tomcat,对于开发用到的api,则应该额外按照Servlet的jar包
  • 传送门:中央仓库:Maven Repository: Search/Browse/Explore (mvnrepository.com)

在这里插入图片描述

  • 选择3.1.0是跟我们的Servlet版本匹配的,不能乱选

这里可以选择下载jar包然后安装到对应目录下,当然也可以不怎么做,有更高效的方法:

复制这一段代码:

在这里插入图片描述

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

粘贴到pom.xml里(写在dependancies标签内)

  • 这个标签内可以放很多dependancy,也就是多个依赖,也就是多个第三方库

在这里插入图片描述

标红的话,则说明还没下载完成,点击刷新

在这里插入图片描述

2.3 创建目录

  • 注意:要一字不差!

在这里插入图片描述

在这里插入图片描述

  • web.xml中的内容:
    • 标红没关系,这只不过idea识别不准罢了,所以这不代表错了,当然,不标红也不代表对了
    • 你看得别扭,alt+回车取消就行了
<!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>
</web-app>

2.4 写代码

  • 如果你刚才的jar包加载成功了,那么就有了这个类
    • idea会提示
      在这里插入图片描述

重写doGet方法:

在这里插入图片描述

  • doGet方法的工作就是,根据请求计算响应

在这里插入图片描述

而我们之前做的TCP回显服务器的基本流程就是:

  1. 读取请求并解析
  2. 根据请求计算响应
  3. 把响应写回客户端

在这里插入图片描述

我们只需要关注2即可,也就是这个doGet方法

  • 这里的req就是Tomcat收到请求,把请求按照HTTP协议的格式解析成了一个对象
    • Tomcat本质上就是个TCP服务器,内部就是一系列的socket操作~
    • 里面的属性,就是HTTP的各个信息
  • 这里的resp则是响应对象,是一个“空的对象”
    • 不是null,而是里面的属性是空的
    • 需要我们设置进去,相当于饭盒打饭一样~
    • 即,输出型参数
    • 然后Tomcat就会在第三步的时候,把这个对象写回给客户端

为什么不用写main方法

  • 这是因为Tomcat内部帮我们写了,它在合适的时机调用了我们重写的代码去计算响应~

Tomcat内部代码(伪代码):

main {
    HttpServlet servlet = new HelloServlet();//触发重写
    
    HttpServletRequest req = ...;//获取请求的一系列操作
    HttpServletResponse resp = new HttpServletResponse();//空响应
    
    servlet.doGet(req, resp);//调用我们重写的方法,这个响应就被构造好了
}

这种只需要我们参与一部分代码的编写的编写方式,就称之为“框架”(framework)

  • 说到底,框架就是这种,按照别人规范写代码的模式
    • 这还跟调用一些API不一样,因为API的使用还是我们主动的
  • 使用框架就相当于进厂拧螺丝,其实并不是什么厉害的活
    • 框架就相当于流水线~

在这里插入图片描述

父类中的doGet方法:

  • 如果不重写或者不去掉super.doGet方法,你访问到的页面就是405

在这里插入图片描述

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //super.doGet(req, resp);注释掉,或者删除
}

打印helloworld

public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);
		System.out.println("helloworld");//服务器的控制台上打印
        resp.getWriter().write("hello world");
        //给响应的对象中写入一个helloworld字符串,getWriter方法就是获取响应resp的字符输出流对象Writer,写入http响应包的body里面~
    }
}

加上注解:

  • 在后续的操作中,这个非常重要~

注解实际上就是帮我们额外执行了一段逻辑

  • 一般是修饰一个类或者一个方法
  1. 限制我们的编程行为,减少出错
  2. 其他…
@WebServlet("/hello")//没有分号~
public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);

        System.out.println("helloworld");
        resp.getWriter().write("helloworld");
    }
}

2.5 打包代码

我们的程序不能独立运行,必须部署(放置)到Tomcat上才能运行

  • 而部署的前提,就是打包

    • 对于一个规模很大的项目,就会有很多很多的java文件和class文件,所以我们是需要将这些class文件打成一个压缩包,再进行拷贝,是比较科学的~
    • java中使用的压缩包,就是jar、war

    jar:普通java程序,打成jar包

    war:部署到Tomcat上的程序的压缩包,Tomcat是专门识别这种压缩包的内容

    本质上是没区别的,war中则有Tomcat对应的特定的目录结构(专属定制版的jar包)

打包操作:

  • 双击package

在这里插入图片描述

打包操作的maven做了事情:

  1. 检测代码中是否存在依赖,即依赖是否下载好了
  2. 把代码进行编译,生成.class文件
  3. 把这些.class文件以web.xml对应格式进行打包

在这里插入图片描述

但是看一下里面的内容,发现是jar包而不是war包

在这里插入图片描述

为了打出来war包,需要调整pom.xml:

在这里插入图片描述

描述打出来的war包的名字:

在这里插入图片描述

再次重新打包:

在这里插入图片描述

解压jar包:

在这里插入图片描述

解压war包:

  • 拖动到解压软件即可

在这里插入图片描述

2.6 部署

  • 把打好的war包,拷贝到Tomcat的webapps目录里

在这里插入图片描述

启动Tomcat:

  • 通过这个日志可以看出,war部署成功了的,乱码无所谓(只不过是字符集对应不上罢了)

    • Tomcat是utf8,Windows的cmd是gbk
    • 后续不适用cmd,所以没关系~
      在这里插入图片描述
  • 自动解压缩:

在这里插入图片描述

2.7 验证程序

doGet运行也有前提条件,并不是Tomcat服务器启动就触发

  • doGet ==> 遇到一个GET请求,就执行doGet方法
    • 也不是随便一个GET请求都能,要求请求req的URL路径要匹配~
  • 同样的也有doPost,doXXX…

直接在浏览器地址栏输入URL,就能构造GET请求~

在这里插入图片描述

结果:

在这里插入图片描述

在这里插入图片描述

127.0.0.1:8080 ==> 到达Tomcat的webapps目录

/helloServelet ==> 到达我们的项目目录

在这里插入图片描述

/hello ==> 到达对应的Servlet(这就是我们前面写的注解里面的字符串)

  • 因为webapp里可以有多个Servlet,自然就有多个doGet
  • 因为我们建立的多个java文件中的类,都能继承HttpServlet~
  • 所以需要我们确定要执行哪个doGet

在这里插入图片描述

打错打少都是错的:

在这里插入图片描述

helloworld的程序就讲完了,虽然复杂,但是套路固定!

用抓包工具抓一下:

在这里插入图片描述

3. 简化

在这里插入图片描述

  • 其他操作不太好简化,这也很好理解~、
  • 而5和6则需要点击package去打包,还有拷贝部署到对应目录,太麻烦了
    • 不简化的话,每次调整代码,都要重新打包,重新拷贝部署替换原来的那个war包

我们只需要通过IDEA的插件(plugin)来完成这个工作(一键式完成5和6)

  • 插件就是扩展,满足不同项目的不同要求的,需要就下载即可,各取所需,而不是,每个用户统一

在这里插入图片描述

就是这个,下载即可:

在这里插入图片描述

使用Smart Tomcat插件

首次使用比较麻烦,需要配置:

  • 点击右上角的add…

在这里插入图片描述

右上角什么都没有,需要把这个栏打开:

在这里插入图片描述

  • 点击add new

在这里插入图片描述

  • 填写信息
    • 之前context path拷贝到webapps中后不需要手动改,现在使用Smart Tomcat则需要~

在这里插入图片描述

修改后:
在这里插入图片描述

确认后:

在这里插入图片描述

点击这个三角形,启动程序:

  • 首先,在IDEA这个控制台(utf8编码)中不会出现乱码,所以就可以看懂了,我们以后也是在这里观看的~
  • 其次,这个Tomcat似乎没有启动成功:

在这里插入图片描述

看到这个错误信息:

在这里插入图片描述

原因:

Tomcat启动,需要绑定两个端口:

  1. 8080(业务端口)
  2. 8005(管理端口)

一个端口号只能被一个进程,而我们刚才的小黑框,就已经占用了这两个端口了,所以才会出现这个错误!

在这里插入图片描述

只需要关闭小黑框~

重新启动:

在这里插入图片描述

  • 下面那个地址就是提示你的路径是什么
    • localhost == 127.0.0.1
  • 点了一定404
    • 因为这个路径没有第二级目录:/hello(注解里的字符串)

在这里插入图片描述

通过浏览器发送GET请求:

在这里插入图片描述

IDEA命令行中看到的:

在这里插入图片描述

Smart Tomcat的运行方式和之前拷贝到webapps是存在区别的~

  • 清空webapps中的东西

在这里插入图片描述

  • 把target删了

在这里插入图片描述

(ctrl + f2 结束进程),然后重新启动程序~

  • 重新生成了target,但是里面似乎并没有war包~

在这里插入图片描述

webapps中也没有部署东西

在这里插入图片描述

而是通过这个特定的路径,“告诉”Tomcat,通过这个特定的参数,在这个特定路径里加载webapp就行了

  • 所以并不涉及打包和拷贝~

在这里插入图片描述

开发和调试阶段,这种方式就相当方便,但是要部署到生产环境,还是得打war包和拷贝部署(但是通过开发和调试,这个包就很成熟了~)

4. Servlet程序中常见的问题

4.1 404

  1. 请求的路径写错

  2. war包没被正确加载

    • 比如web.xml中没写、写错或者漏写:
    • 如果没有正确加载,服务器日志是有提示的~

    在这里插入图片描述

    这样浏览器访问后:

    在这里插入图片描述

4.2 405

刚才web.xml的注释要取消掉哦~

  1. 发的请求的方法和代码不匹配

    • 代码写得是doPost方法,但是发的却是GET请求

    在这里插入图片描述

    重新启动程序,发送请求:

    在这里插入图片描述

  2. 忘记干掉super

    在这里插入图片描述

    重新启动程序,发送请求:

    在这里插入图片描述

    • 命令行正常,但是浏览器异常~

4.3 500

  • 意味着你的服务器抛异常了,跟我们平时一样,查看异常调用栈去解决bug

在这里插入图片描述

重新启动程序,发送请求:

在这里插入图片描述

  • 通过这个信息,快速定位错误位置!

在这里插入图片描述

4.4 返回空白页面

  • 就是resp的body没有被设置

在这里插入图片描述

重新启动程序,发送请求:

在这里插入图片描述

4.5 无法访问此网站

  • Tomcat没打开(IDEA中程序没运行)

关闭程序,然后发送请求:

在这里插入图片描述

或者是:
在这里插入图片描述

通过这些错误去调试bug,也是一项重要的技能!


文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

本文章讲解了Servlet的第一个程序:helloworld,到现在,你已经迈开重要的第一步了,加油!


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

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

相关文章

Mac电脑读写移动硬盘软件Tuxera NTFS2023中文版

日常工作中&#xff0c;我们经常会使用移动硬盘拷贝文件&#xff0c;因为移动硬盘传输文件方便、传输速度快。但我们在mac电脑上使用移动硬盘却发现硬盘无法正常读写。本文向大家介绍mac能读写的移动硬盘有哪些以及移动硬盘怎么在mac上读写。 一、Mac能读写的移动硬盘有哪些 移…

数据挖掘(5.1)--贝叶斯分类

目录 前言 正文 1.主观概率 2.贝叶斯定理 1.基础知识 2.贝叶斯决策准则 3.极大后验假设 4.例题 2.朴素贝叶斯分类模型 朴素贝叶斯分类器的算法描述&#xff1a; 朴素贝叶斯算法特点 3.贝叶斯信念网 贝叶斯网络的建模包括两个步骤 贝叶斯信念网特点 开往夏天的列…

C++第七章:类

类 一、定义抽象数据类型1.1 定义抽象数据类型类的用户 1.2 定义一个书籍类引入this引入const成员函数类作用域和成员函数在类的外部定义成员函数定义一个返回this对象的函数 1.3 定义类相关的非成员函数定义read和print函数最终代码 1.4 构造函数合成的默认构造函数某些类不能…

真相只有一个——真正排名

这里写目录标题 1.题目描述2.解题思路3.代码展 所属专栏&#xff1a;脑筋急转弯❤️ &#x1f680; >博主首页&#xff1a;初阳785❤️ &#x1f680; >代码托管&#xff1a;chuyang785❤️ &#x1f680; >感谢大家的支持&#xff0c;您的点赞和关注是对我最大的支持…

【论文阅读】Group Emotion Detection Based on Social Robot Perception

【论文阅读】Group Emotion Detection Based on Social Robot Perception 摘要1.介绍2.相关工作3.方法4.数据集生成5.模拟与结果6.讨论 摘要 本篇博客参考MDPI sensors 2022收录的论文Group Emotion Detection Based on Social Robot Perception&#xff0c;对其主要内容进行总…

第三期:那些年,我们一起经历过的链表中的浪漫

PS&#xff1a;每道题解题方法不唯一&#xff0c;欢迎讨论&#xff01;每道题后都有解析帮助你分析做题&#xff0c;答案在最下面&#xff0c;关注博主每天持续更新。 1. 两个链表的第一个公共节点 “我走过我的世界&#xff0c;再从你的世界走一遍” “你走过你的世界&#x…

1688商品ID采集一件代发详情页面数据

本篇博文介绍了对1688商品详情API的二次封装&#xff0c;将URL参数封装成Python函数&#xff0c;直接传入参数即可获取搜索结果&#xff0c;例如1688商品标题、价格、一件代发、sku属性和URL等。提供了详细的代码示例和接口调用Demo。 1688.item_get-获得1688商品详情数据 1.请…

C语言中的类型转换

C语言中的类型转换 隐式类型转换 整型提升 概念&#xff1a; C语言的整型算术运算总是至少以缺省&#xff08;默认&#xff09;整型类型的精度来进行的为了获得这个精度&#xff0c;表达式中字符和短整型操作数在使用之前被转换为普通整型&#xff0c;这种转换成为整型提升 如…

MySQL | JDBC连接数据库详细教程【全程干货】

文章目录 一、什么是JDBC&#xff1f;二、JDBC工作原理三、使用JDBC连接MySQL数据库【✔】1、安装对应数据驱动包2、将jar包导入项目中3、编写代码连接数据库【⭐】1️⃣ 创建数据源2️⃣ 和数据库建立网络连接3️⃣ 构造SQL语句4️⃣ 执行SQL语句5️⃣ 断开连接&#xff0c;释…

【AI提示】ChatGPT提示工程课程(吴恩达OpenAI)推理文本(中文chatgpt版)

设置 Setup产品评论文本情感&#xff08;正面/负面&#xff09;Sentiment (positive/negative)识别情绪类型从客户评论中提取产品和公司名称一次完成多项任务Inferring topics 推断主题为某些主题制作新闻提醒 Inferring 推理 在本课中&#xff0c;您将从产品评论和新闻文章中推…

计算机专业主要学习什么

2020计算机专业主要学习什么 1计算机专业都学习哪些方面的知识 1、可视化编程 掌握编程方法和可视化技术&#xff0c;熟悉一个可视化平台及其软件开发技术。能够获取Delphi编程人员系列&#xff0c;Java Basic或VB开发专家认证。 就业方向&#xff1a;企业&#xff0c;政府&…

Elasticsearch:验证 Elasticsearch Docker 镜像并安装 Elasticsearch

Elasticsearch 可以作为 Docker 镜像使用。 www.docker.elastic.co 上提供了所有已发布的 Docker 图像和标签的列表。 源文件在 Github 中。此软件包包含免费和订阅功能。 开始 30 天试用以试用所有功能。 从 Elasticsearch 8.0 开始&#xff0c;默认启用安全性。 启用安全性后…

为什么很多企业把35岁视为分水岭

(点击即可收听) 为什么很多企业把35岁视为分水岭 有时候,别人的故事,若干年后,就是自己的故事,只要身在互联网这个行业里,可以说,每个人都避免不了35岁危机 不要五十步笑百步 前阵子,朋友圈一位行业知名大佬,35岁,每天兢兢业业,任劳任怨,本以为安稳渡过3个月试用期,正快要转正时…

AutoEncoder GAN

AE Auto-Encoder (AE) 是20世纪80年代晚期提出的&#xff0c;它是一种无监督学习算法&#xff0c;使用了反向传播算法&#xff0c;让目标值等于输入值。 是神经网络的一种&#xff0c;经过训练后能尝试将输入复制到输出。三层网络结构&#xff1a;输入- 隐层- 输出自编码网络…

一道经典的网红面试题:从URL输入到页面展现到底发生了什么?

目录 &#x1f3ee; 前言 一、URL 到底是啥 二、域名解析&#xff08;DNS&#xff09; 三、TCP 三次握手 四、发送 HTTP 请求 五、服务器处理请求并返回 HTTP 报文 六、浏览器解析渲染页面 1.根据 HTML 解析 DOM 树 2.根据 CSS 解析生成 CSS 规则树 3.结合 DOM 树和…

MySQL高级篇复盘笔记(一)【存储引擎、索引、SQL优化、视图、触发器、MySQL管理】

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…

解决“Adobe Premiere安装后无法启动“问题

昨天在Win10 专业版上安装Adobe Premiere2019(后面简称 Adobe Pr2019)时&#xff0c;发现Pr2019安装之后无法启动&#xff0c;有时&#xff0c;桌面上有时会产生空白的Premiere图标。换了好几个Adobe Premirere安装包&#xff0c;都是如此。正在苦思冥想中&#xff0c;突然灵机…

YOLOv5独家原创改进,ShuffleNetV2网络结构,改进ShuffleNetV2准确率低问题

目录 一、介绍1、轻量化目标检测的瓶颈2、YOLOv5和ShuffleNetV2的概述 二、ShuffleNetV2的架构1、ShuffleNetV2的基本单元——ShuffleNet Unit2、ShuffleNetV2的网络结构 三、ShuffleNetV2的特点1、高效的通道重排操作2、逐通道矩阵乘法3、轻量级和高精度的平衡 四、YOLOv51、Y…

【2023 AI 写作工具大盘点】国内外 45 款免费 AI 写作神器汇总,轻松成为创作高手!

0. 未来百科 未来百科(https://nav.6aiq.com)&#xff0c;是一个知名的AI产品导航网站 —— 为发现全球优质AI工具而生 。目前已 聚集全球3000优质AI工具产品 &#xff0c;旨在帮助用户发现全球最好的AI工具&#xff0c;同时为研发AI垂直应用的创业公司提供展示窗口&#xff0c…

蓝海项目拼多多海外版Temu让外国人也体验砍一刀,普通人的机会

拼多多海外版Temu是一款专为全球华人打造的购物平台,它的出现为海外华人提供了更加便捷、实惠的购物体验。Temu的诞生,不仅是拼多多在海外市场的一次尝试,更是对全球华人消费需求的一次深入了解和满足。 一、Temu的背景 拼多多是中国最大的社交电商平台之一,它的出现改…