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

Java web应用的目录结构

详情可以参考:
https://tomcat.apache.org/tomcat-10.1-doc/appdev/deployment.html
https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0.html#directory-structure

Java web应用根目录下包含如下内容:

  • *.html, *.jsp等:html、jsp文件及其它必须对客户端浏览器可见的文件(如JavaScript、样式文件、图片文件)。对于大型的应用,可以将这些文件划分成子目录的结构存放;对于小型应用,可以不再区分子目录。
  • /WEB-INF/web.xml :应用部署描述符文件。这个文件描述了组成应用的servlet及其它的成分、需要容器执行的初始化参数、安全约束等。
  • /WEB-INF/classes/:这个目录下存放了应用需要的任何Java类文件(及关联的资源),包含没有放在 JAR文件中的servlet类、非servlet类。如果Java类是以Java包组织的,那么包的层次结构必须/WEB-INF/classes/下面体现出来,例如,一个类的名字是com.thb.DemoServlet,必须存放为/WEB-INF/classes/com/thb/DemoServlet.class。
  • /WEB-INF/lib/ :这个目录存放着JAR文件,例如第三方类库或者JDBC驱动(driver)。这些JAR文件中包含应用需要的servlet、bean、静态资源、JSP文件、及其它工具类(utility classes)。

对WEB-INF目录的进一步说明:

  • web应用类加载器首先从WEB-INF/classes目录加载类,然后再从 WEB-INF/lib目录下的JAR文件中加载。
  • WEB-INF目录包含了跟应用相关的、但不在应用根目录下的所有东西。
  • WEB-INF下的绝大部分不属于应用的公共文档树的一部分,除了打包到JAR文件中META-INF/resources目录下的静态资源和JSP文件以外,WEB-INF目录下的其它文件不允许容器给客户端提供访问。
  • WEB-INF目录对servlet代码可见,方式是通过ServletContext的getResource 和getResourceAsStream方法调用。

举例:tomcat安装包中自带的examples这个web应用的目录结构如下:

D:\APACHE-TOMCAT-10.1.13\WEBAPPS\EXAMPLES
│  index.html
│  
├─jsp
│  │  index.html
│  │  
│  ├─async
│  │      async1.jsp
│  │      async1.jsp.html
│  │      async3.jsp
│  │      async3.jsp.html
│  │      index.jsp
│  │      index.jsp.html
│  │      
│  ├─cal
│  │      cal1.jsp
│  │      cal1.jsp.html
│  │      cal2.jsp
│  │      cal2.jsp.html
│  │      calendar.html
│  │      Entries.java.html
│  │      Entry.java.html
│  │      JspCalendar.java.html
│  │      login.html
│  │      TableBean.java.html
│  │      
│  ├─checkbox
│  │      check.html
│  │      checkresult.jsp
│  │      checkresult.jsp.html
│  │      CheckTest.html
│  │      cresult.html
│  │      
│  ├─colors
│  │      clr.html
│  │      ColorGameBean.html
│  │      colors.html
│  │      colrs.jsp
│  │      colrs.jsp.html
│  │      
│  ├─dates
│  │      date.html
│  │      date.jsp
│  │      date.jsp.html
│  │      
│  ├─error
│  │      er.html
│  │      err.jsp
│  │      err.jsp.html
│  │      error.html
│  │      errorpge.jsp
│  │      errorpge.jsp.html
│  │      
│  ├─forward
│  │      forward.jsp
│  │      forward.jsp.html
│  │      fwd.html
│  │      one.jsp
│  │      one.jsp.html
│  │      two.html
│  │      
│  ├─images
│  │      code.gif
│  │      execute.gif
│  │      return.gif
│  │      
│  ├─include
│  │      foo.html
│  │      foo.jsp
│  │      foo.jsp.html
│  │      inc.html
│  │      include.jsp
│  │      include.jsp.html
│  │      
│  ├─jsp2
│  │  ├─el
│  │  │      basic-arithmetic.html
│  │  │      basic-arithmetic.jsp
│  │  │      basic-arithmetic.jsp.html
│  │  │      basic-comparisons.html
│  │  │      basic-comparisons.jsp
│  │  │      basic-comparisons.jsp.html
│  │  │      composite.html
│  │  │      composite.jsp
│  │  │      composite.jsp.html
│  │  │      functions.html
│  │  │      Functions.java.html
│  │  │      functions.jsp
│  │  │      functions.jsp.html
│  │  │      implicit-objects.html
│  │  │      implicit-objects.jsp
│  │  │      implicit-objects.jsp.html
│  │  │      ValuesBean.java.html
│  │  │      ValuesTag.java.html
│  │  │      
│  │  ├─jspattribute
│  │  │      FooBean.java.html
│  │  │      HelloWorldSimpleTag.java.html
│  │  │      jspattribute.html
│  │  │      jspattribute.jsp
│  │  │      jspattribute.jsp.html
│  │  │      shuffle.html
│  │  │      shuffle.jsp
│  │  │      shuffle.jsp.html
│  │  │      ShuffleSimpleTag.java.html
│  │  │      TileSimpleTag.java.html
│  │  │      
│  │  ├─jspx
│  │  │      basic.html
│  │  │      basic.jspx
│  │  │      basic.jspx.html
│  │  │      svgexample.html
│  │  │      textRotate.html
│  │  │      textRotate.jpg
│  │  │      textRotate.jspx
│  │  │      textRotate.jspx.html
│  │  │      
│  │  ├─misc
│  │  │      coda.jspf
│  │  │      coda.jspf.html
│  │  │      config.html
│  │  │      config.jsp
│  │  │      config.jsp.html
│  │  │      dynamicattrs.html
│  │  │      dynamicattrs.jsp
│  │  │      dynamicattrs.jsp.html
│  │  │      EchoAttributesTag.java.html
│  │  │      prelude.jspf
│  │  │      prelude.jspf.html
│  │  │      
│  │  ├─simpletag
│  │  │      book.html
│  │  │      book.jsp
│  │  │      book.jsp.html
│  │  │      BookBean.java.html
│  │  │      FindBookSimpleTag.java.html
│  │  │      Functions.java.html
│  │  │      hello.html
│  │  │      hello.jsp
│  │  │      hello.jsp.html
│  │  │      HelloWorldSimpleTag.java.html
│  │  │      repeat.html
│  │  │      repeat.jsp
│  │  │      repeat.jsp.html
│  │  │      RepeatSimpleTag.java.html
│  │  │      
│  │  └─tagfiles
│  │          displayProducts.tag.html
│  │          hello.html
│  │          hello.jsp
│  │          hello.jsp.html
│  │          helloWorld.tag.html
│  │          panel.html
│  │          panel.jsp
│  │          panel.jsp.html
│  │          panel.tag.html
│  │          products.html
│  │          products.jsp
│  │          products.jsp.html
│  │          
│  ├─jsptoserv
│  │      hello.jsp
│  │      hello.jsp.html
│  │      jsptoservlet.jsp
│  │      jsptoservlet.jsp.html
│  │      jts.html
│  │      ServletToJsp.java.html
│  │      
│  ├─num
│  │      numguess.html
│  │      numguess.jsp
│  │      numguess.jsp.html
│  │      
│  ├─security
│  │  └─protected
│  │          error.jsp
│  │          error.jsp.html
│  │          index.jsp
│  │          index.jsp.html
│  │          login.jsp
│  │          login.jsp.html
│  │          
│  ├─sessions
│  │      carts.html
│  │      carts.jsp
│  │      carts.jsp.html
│  │      crt.html
│  │      DummyCart.html
│  │      
│  ├─simpletag
│  │      foo.html
│  │      foo.jsp
│  │      foo.jsp.html
│  │      
│  ├─snp
│  │      snoop.html
│  │      snoop.jsp
│  │      snoop.jsp.html
│  │      
│  ├─tagplugin
│  │      choose.html
│  │      choose.jsp
│  │      choose.jsp.html
│  │      foreach.html
│  │      foreach.jsp
│  │      foreach.jsp.html
│  │      howto.html
│  │      if.html
│  │      if.jsp
│  │      if.jsp.html
│  │      notes.html
│  │      
│  └─xml
│          xml.html
│          xml.jsp
│          xml.jsp.html
│          
├─META-INF
│      context.xml
│      
├─servlets
│  │  cookies.html
│  │  helloworld.html
│  │  index.html
│  │  reqheaders.html
│  │  reqinfo.html
│  │  reqparams.html
│  │  sessions.html
│  │  
│  ├─images
│  │      code.gif
│  │      execute.gif
│  │      return.gif
│  │      
│  └─nonblocking
│          bytecounter.html
│          
├─WEB-INF
│  │  web.xml
│  │  
│  ├─classes
│  │  │  CookieExample.class
│  │  │  CookieExample.java
│  │  │  HelloWorldExample.class
│  │  │  HelloWorldExample.java
│  │  │  LocalStrings.properties
│  │  │  LocalStrings_cs.properties
│  │  │  LocalStrings_de.properties
│  │  │  LocalStrings_es.properties
│  │  │  LocalStrings_fr.properties
│  │  │  LocalStrings_ja.properties
│  │  │  LocalStrings_ko.properties
│  │  │  LocalStrings_pt.properties
│  │  │  LocalStrings_pt_BR.properties
│  │  │  LocalStrings_ru.properties
│  │  │  LocalStrings_zh_CN.properties
│  │  │  RequestHeaderExample.class
│  │  │  RequestHeaderExample.java
│  │  │  RequestInfoExample.class
│  │  │  RequestInfoExample.java
│  │  │  RequestParamExample.class
│  │  │  RequestParamExample.java
│  │  │  ServletToJsp.class
│  │  │  ServletToJsp.java
│  │  │  SessionExample.class
│  │  │  SessionExample.java
│  │  │  
│  │  ├─async
│  │  │      Async0$1.class
│  │  │      Async0.class
│  │  │      Async0.java
│  │  │      Async1$1.class
│  │  │      Async1.class
│  │  │      Async1.java
│  │  │      Async2$1.class
│  │  │      Async2.class
│  │  │      Async2.java
│  │  │      Async3.class
│  │  │      Async3.java
│  │  │      AsyncStockContextListener.class
│  │  │      AsyncStockContextListener.java
│  │  │      AsyncStockServlet.class
│  │  │      AsyncStockServlet.java
│  │  │      Stockticker$Stock.class
│  │  │      Stockticker$TickListener.class
│  │  │      Stockticker.class
│  │  │      Stockticker.java
│  │  │      
│  │  ├─cal
│  │  │      Entries.class
│  │  │      Entries.java
│  │  │      Entry.class
│  │  │      Entry.java
│  │  │      JspCalendar.class
│  │  │      JspCalendar.java
│  │  │      TableBean.class
│  │  │      TableBean.java
│  │  │      
│  │  ├─checkbox
│  │  │      CheckTest.class
│  │  │      CheckTest.java
│  │  │      
│  │  ├─colors
│  │  │      ColorGameBean.class
│  │  │      ColorGameBean.java
│  │  │      
│  │  ├─compressionFilters
│  │  │      CompressionFilter.class
│  │  │      CompressionFilter.java
│  │  │      CompressionFilterTestServlet.class
│  │  │      CompressionFilterTestServlet.java
│  │  │      CompressionResponseStream.class
│  │  │      CompressionResponseStream.java
│  │  │      CompressionServletResponseWrapper.class
│  │  │      CompressionServletResponseWrapper.java
│  │  │      
│  │  ├─dates
│  │  │      JspCalendar.class
│  │  │      JspCalendar.java
│  │  │      
│  │  ├─error
│  │  │      Smart.class
│  │  │      Smart.java
│  │  │      
│  │  ├─examples
│  │  │      ExampleTagBase.class
│  │  │      ExampleTagBase.java
│  │  │      FooTag.class
│  │  │      FooTag.java
│  │  │      FooTagExtraInfo.class
│  │  │      FooTagExtraInfo.java
│  │  │      LogTag.class
│  │  │      LogTag.java
│  │  │      ValuesTag.class
│  │  │      ValuesTag.java
│  │  │      
│  │  ├─filters
│  │  │      ExampleFilter.class
│  │  │      ExampleFilter.java
│  │  │      
│  │  ├─http2
│  │  │      SimpleImagePush.class
│  │  │      SimpleImagePush.java
│  │  │      
│  │  ├─jsp2
│  │  │  └─examples
│  │  │      │  BookBean.class
│  │  │      │  BookBean.java
│  │  │      │  FooBean.class
│  │  │      │  FooBean.java
│  │  │      │  ValuesBean.class
│  │  │      │  ValuesBean.java
│  │  │      │  
│  │  │      ├─el
│  │  │      │      Functions.class
│  │  │      │      Functions.java
│  │  │      │      
│  │  │      └─simpletag
│  │  │              EchoAttributesTag.class
│  │  │              EchoAttributesTag.java
│  │  │              FindBookSimpleTag.class
│  │  │              FindBookSimpleTag.java
│  │  │              HelloWorldSimpleTag.class
│  │  │              HelloWorldSimpleTag.java
│  │  │              RepeatSimpleTag.class
│  │  │              RepeatSimpleTag.java
│  │  │              ShuffleSimpleTag.class
│  │  │              ShuffleSimpleTag.java
│  │  │              TileSimpleTag.class
│  │  │              TileSimpleTag.java
│  │  │              
│  │  ├─listeners
│  │  │      ContextListener.class
│  │  │      ContextListener.java
│  │  │      SessionListener.class
│  │  │      SessionListener.java
│  │  │      
│  │  ├─nonblocking
│  │  │      ByteCounter$CounterListener.class
│  │  │      ByteCounter.class
│  │  │      ByteCounter.java
│  │  │      NumberWriter$NumberWriterListener.class
│  │  │      NumberWriter.class
│  │  │      NumberWriter.java
│  │  │      
│  │  ├─num
│  │  │      NumberGuessBean.class
│  │  │      NumberGuessBean.java
│  │  │      
│  │  ├─sessions
│  │  │      DummyCart.class
│  │  │      DummyCart.java
│  │  │      
│  │  ├─trailers
│  │  │      ResponseTrailers$TrailerFieldSupplier.class
│  │  │      ResponseTrailers.class
│  │  │      ResponseTrailers.java
│  │  │      
│  │  ├─util
│  │  │      CookieFilter.class
│  │  │      CookieFilter.java
│  │  │      HTMLFilter.class
│  │  │      HTMLFilter.java
│  │  │      
│  │  ├─validators
│  │  │      DebugValidator.class
│  │  │      DebugValidator.java
│  │  │      
│  │  └─websocket
│  │      │  ExamplesConfig.class
│  │      │  ExamplesConfig.java
│  │      │  
│  │      ├─chat
│  │      │      ChatAnnotation.class
│  │      │      ChatAnnotation.java
│  │      │      
│  │      ├─drawboard
│  │      │  │  Client$1.class
│  │      │  │  Client.class
│  │      │  │  Client.java
│  │      │  │  DrawboardContextListener.class
│  │      │  │  DrawboardContextListener.java
│  │      │  │  DrawboardEndpoint$1.class
│  │      │  │  DrawboardEndpoint$2.class
│  │      │  │  DrawboardEndpoint$3$1.class
│  │      │  │  DrawboardEndpoint$3.class
│  │      │  │  DrawboardEndpoint.class
│  │      │  │  DrawboardEndpoint.java
│  │      │  │  DrawMessage$ParseException.class
│  │      │  │  DrawMessage.class
│  │      │  │  DrawMessage.java
│  │      │  │  Room$1$1.class
│  │      │  │  Room$1.class
│  │      │  │  Room$2.class
│  │      │  │  Room$MessageType.class
│  │      │  │  Room$Player.class
│  │      │  │  Room.class
│  │      │  │  Room.java
│  │      │  │  
│  │      │  └─wsmessages
│  │      │          AbstractWebsocketMessage.class
│  │      │          AbstractWebsocketMessage.java
│  │      │          BinaryWebsocketMessage.class
│  │      │          BinaryWebsocketMessage.java
│  │      │          CloseWebsocketMessage.class
│  │      │          CloseWebsocketMessage.java
│  │      │          StringWebsocketMessage.class
│  │      │          StringWebsocketMessage.java
│  │      │          
│  │      ├─echo
│  │      │      EchoAnnotation.class
│  │      │      EchoAnnotation.java
│  │      │      EchoAsyncAnnotation$CompletedFuture.class
│  │      │      EchoAsyncAnnotation.class
│  │      │      EchoAsyncAnnotation.java
│  │      │      EchoEndpoint$EchoMessageHandlerBinary.class
│  │      │      EchoEndpoint$EchoMessageHandlerText.class
│  │      │      EchoEndpoint.class
│  │      │      EchoEndpoint.java
│  │      │      EchoStreamAnnotation.class
│  │      │      EchoStreamAnnotation.java
│  │      │      servers.json
│  │      │      
│  │      └─snake
│  │              Direction.class
│  │              Direction.java
│  │              Location$1.class
│  │              Location.class
│  │              Location.java
│  │              Snake.class
│  │              Snake.java
│  │              SnakeAnnotation.class
│  │              SnakeAnnotation.java
│  │              SnakeTimer$1.class
│  │              SnakeTimer.class
│  │              SnakeTimer.java
│  │              
│  ├─jsp
│  │      403.jsp
│  │      403.jsp.html
│  │      debug-taglib.tld
│  │      example-taglib.tld
│  │      jsp2-example-taglib.tld
│  │      
│  ├─lib
│  │      taglibs-standard-impl-1.2.5-migrated-0.0.1.jar
│  │      taglibs-standard-spec-1.2.5-migrated-0.0.1.jar
│  │      
│  └─tags
│          displayProducts.tag
│          helloWorld.tag
│          panel.tag
│          
└─websocketchat.xhtmldrawboard.xhtmlecho.xhtmlindex.xhtmlsnake.xhtml

相关文章:

Java web应用的目录结构

详情可以参考: https://tomcat.apache.org/tomcat-10.1-doc/appdev/deployment.html https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0.html#directory-structure Java web应用根目录下包含如下内容: *.html, *.jsp等&#xf…...

【Mac环境搭建】JDK安装、多JDK安装与切换

文章目录 JDK下载与安装下载安装 配置环境变量安装多个JDK共存 JDK下载与安装 下载 Oracle官网提供了非常多个版本的JDK供下载,可以点击如下链接重定向到JDK下载页面 ORACLE官网JDK下载 安装 下面的官方文档可以点开收藏到浏览器的收藏夹,这样后续在开…...

C++: 类和对象(中)

文章目录 1. 类的6个默认成员函数2. 构造函数构造函数概念构造函数特性特性1,2,3,4特性5特性6特性7 3. 析构函数析构函数概念析构函数特性特性1,2,3,4特性5特性6 4. 拷贝构造函数拷贝构造函数概念拷贝构造函数特性特性1,2特性3特性4特性5 5. 运算符重载一般运算符重载赋值运算符…...

图片批量归类:告别混乱,实现高效文件管理

在日常生活中,我们经常需要处理大量的图片文件。这些图片可能来自于不同的设备、不同的目录,甚至不同的存储介质。随着时间的推移,这些图片文件会越来越多,管理起来也会越来越困难。如何高效地整理这些图片文件,告别混…...

187. 重复的DNA序列 --力扣 --JAVA

题目 DNA序列 由一系列核苷酸组成,缩写为 A, C, G 和 T.。 例如,"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时,识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次…...

Mysql高级——Mysql8一主一从,多主多从搭建

修改 /etc/hosts文件 ip地址 master1 ip地址 master2 ip地址 slave1 ip地址 slave2一主一从 create database master1db;create table master1db.master1tab(name char(50));insert into master1db.master1tab VALUES(1111);insert into master1db.master1tab VALUES(2222);m…...

【Qt5】QNetworkAccessManager

2023年11月5,周日晚上 QNetworkAccessManager是Qt Network模块中的一个类,用于发送网络请求和接收网络响应。它提供了一种方便的方式来进行网络通信,支持常见的网络协议,如HTTP、HTTPS、FTP等。 QNetworkAccessManager和QNetwork…...

zookeeper节点类型

节点类型 持久节点(Persistent Nodes) 这些是Zookeeper中最常见的一种节点类型,当创建一个持久类型节点时,该值会一直存在zookeeper中,直到被显式删除或被新值覆盖。 临时节点(Ephemeral Nodes&#xff…...

【C++】一篇文章搞懂auto关键字及其相关用法!

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...

微信小程序overflow-x超出部分样式不渲染

把display:flex改成display:inline-flex, 将对象作为内联块级弹性伸缩盒显示, 类似与是子元素将父元素撑开,样式就显示出来了...

Oracle常用运维SQL-SQL执行性能及锁表等查询分析

oracle相关系列文章: docker–在Anaconda jupyter 容器中使用oracle数据源时,Oracle客户端安装配置及使用示例 Oracle常用运维SQL–用户管理、数据导入、导出的实用脚本 Oracle TEMPORARY TABLE 临时表的使用及删除报ORA-14452错误的解决办法 Oracle常用运维SQL-SQL执行性能及…...

安装MySQL时出现 由于找不到 MSVCR120.dll,无法继续执行代码。重新安装程序可能会解决此问题。

--------------------------- mysqld.exe - 系统错误 --------------------------- 由于找不到 MSVCR120.dll,无法继续执行代码。重新安装程序可能会解决此问题。 --------------------------- 确定 --------------------------- 安装MySQL时出现 “This appl…...

【基础IO⑧】:文件描述符fd(进程与文件的联系)

【基础IO⑧】:进程与文件之间的联系(文件描述符fd) 一.前言探讨[进程与文件关系]二.C语言文件操作三.系统文件调用1.open/write 四.文件描述符fd 一.前言探讨[进程与文件关系] 我们首先了解一些基本的认识: 1.文件包括文件内容和文件属性 2.…...

搭建WAMP网站教程(windows+apache+mysql+php)

之前为了学习网络安全,从搭建网站学起,对网站运行有个初步的了解。 今天翻到了之前的笔记,顺手发到csdn上了。 搭建网站步骤 一、Apache 安装Apache,下载Apache之后把Apache解压,此处解压到C:\目录下 2.然后要记得安…...

瓦斯抽采VR应急救援模拟仿真系统筑牢企业安全生产防线

矿工素质对安全生产的影响很大。传统的煤矿安全事故培训出于条件差、经验少加上侥幸心理,导致其在教学内容时过于简单且不切合实际,无法真正发挥培训作用。瓦斯检查作业VR模拟实操培训通过真实还原煤矿作业环境,让受训者身临其境地进入三维仿…...

nodelist 与 HTMLCollection 的区别

原地址 https://cloud.tencent.com/developer/article/2013289 节点与元素 根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点: 整个文档是一个文档节点每个 HTML 元素是元素节点HTML 元素内的文本是文本节点每个 HTML 属性是属性节点注释是注…...

系列十二、过滤器 vs 拦截器

一、过滤器 vs 拦截器 1.1、区别 (1)触发时机不一样,过滤器是在请求进入容器后Servlet之前进行预处理的,请求结束返回也是,是在Servlet处理完后,返回给前端之前; (2)过滤…...

dockerfile运行apk命令卡住的问题解决——更换镜像

在练习docker官方文档关于docker compose初体验(https://docs.docker.com/compose/gettingstarted/)过程中,执行dockerfile命令RUN apk add --no-cache gcc musl-dev linux-headers时,出现卡住的情况,等了几千秒都不行…...

Android - 编译 openssl 踩坑之路

一、简述 如果你想快速在项目中使用上 openssl,可以使用网上其他开发者提供好的预编译库: OpenSSL(All):https://builds.viaduck.org/prebuilts/openssl/OpenSSL(3.1.*) :https://github.com/217heidai/openssl_for_android以上的预编译库可能最低只支持 API 21(即 Andro…...

verdi技巧分享--合并多个fsdb文件、统计信号边沿

文章目录 0 前言1 如何显示信号高位的02 统计信号的上升沿、下降沿3 合并信号4 将多个fsdb文件合并成一个 0 前言 分享几个这段时间学到的verdi操作 1 如何显示信号高位的0 这个可能对一些有强迫症的有帮助吧 nand相关的操作,有一些特定的cmd,比如 r…...

TensorRT加速HY-Motion:NVIDIA推理性能提升方案

TensorRT加速HY-Motion:NVIDIA推理性能提升方案 1. 项目背景与价值 HY-Motion 1.0作为业界领先的文生3D动作生成模型,凭借其十亿级参数的Diffusion Transformer架构,在动作生成质量和指令遵循能力方面达到了新的高度。然而,如此…...

复古游戏新玩法:OpenClaw+Qwen3-14B实现经典游戏自动化

复古游戏新玩法:OpenClawQwen3-14B实现经典游戏自动化 1. 当AI遇见复古游戏:一场技术人的浪漫实验 去年整理旧物时,我在抽屉深处翻出一张《金庸群侠传》的光盘。这款1996年发布的经典游戏,承载着无数80后的青春记忆。当我试图在…...

从VASP的POSCAR到精美插图:一条ASE可视化流水线搭建指南

从VASP的POSCAR到精美插图:一条ASE可视化流水线搭建指南 在计算材料学研究中,我们常常需要处理大量的结构文件,尤其是VASP计算产生的POSCAR文件。这些文件包含了材料的原子坐标和晶格信息,但直接阅读文本文件很难直观理解材料的几…...

基础入门-版本控制-GitLab/Gitea 基本使用

GitLab/Gitea 基本使用 在前面的章节中,我们学习了 Git 基础命令和团队协作流程。在实际工作中,这些操作都是围绕着代码托管平台展开的。GitLab 和 Gitea 是两种广泛使用的自托管 Git 仓库管理工具,它们提供了仓库管理、权限控制、代码审查、CI/CD 等功能,是运维团队进行配…...

AudioSeal保姆级教学:Gradio界面多文件批量上传与异步检测队列设置

AudioSeal保姆级教学:Gradio界面多文件批量上传与异步检测队列设置 1. 引言 你是不是遇到过这样的场景?手里有一堆音频文件,需要挨个检查它们是不是AI生成的,或者想给一批音频文件批量加上水印。手动操作不仅效率低,…...

5分钟搞定OpenClaw+百川2-13B:WebUI v1.0极简配置指南

5分钟搞定OpenClaw百川2-13B:WebUI v1.0极简配置指南 1. 为什么选择这个组合? 上周我在调试一个本地自动化助手时,发现OpenClaw默认对接的云端模型响应速度不稳定,于是决定尝试本地部署百川2-13B量化版。这个组合带来的最直接好…...

OpenClaw技能市场挖掘:Phi-3-mini-128k-instruct适配插件精选

OpenClaw技能市场挖掘:Phi-3-mini-128k-instruct适配插件精选 1. 为什么需要为Phi-3-mini定制技能? 当我第一次在本地部署Phi-3-mini-128k-instruct模型时,发现这个128k超长上下文的小模型特别适合处理办公场景的文档流。但直接通过OpenCla…...

靠专业建议收咨询费!传统旅游顾问转型AI行程规划师,如何在高定市场赚大钱

“上个月,我的咨询费增了好多。”说出这个数字时,前旅行社门店顾问小雅脸上带着自信的笑容。曾经的“人肉攻略机器”到如今的AI高端定制规划师,小雅的转型故事,或许能给所有被困在低价内卷里的旅游从业者带来全新的思路。一、转型…...

OpenClaw技能开发入门:为Qwen3-4B-Thinking定制私人助手

OpenClaw技能开发入门:为Qwen3-4B-Thinking定制私人助手 1. 为什么需要定制OpenClaw技能 去年冬天,我发现自己每天早晨都要重复同样的动作:打开浏览器→搜索"北京天气"→截图发到家庭群。这种机械操作持续两周后,我决…...

免费验证码识别:用ddddocr实现Playwright自动化登录

免费验证码识别:用ddddocr实现Playwright自动化登录 在自动化爬虫、自动化登录等场景中,验证码是最常见的“拦路虎”。对于个人开发者、初学者而言,付费解码平台虽精准,但成本较高,而免费的OCR工具中,dddd…...