尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
JavaWeb从入门到实战:Servlet、Spring Boot与项目部署全解析
1. 先搞清楚JavaWeb到底是什么从动态页面到企业级应用做了这么多年Java后端带新人面的第一关基本都是JavaWeb。很多人一听到这个词就头疼觉得自己连HTTP协议都说不清楚Servlet和JSP也分不明白更别提SSM和Spring Boot这一堆框架了。但如果你问一个工作三五年的后端他大概率会告诉你JavaWeb就是Java后端开发的地基无论后来你用微服务还是云原生业务逻辑跑在Web容器里这件事从来没变过。JavaWeb最直白的定义就是用Java技术构建的Web应用。它解决的核心问题是当用户在浏览器输入网址、点击按钮、提交表单请求怎么通过网络到达服务器服务器上的Java代码怎么处理这些请求、读写数据库最后再把结果拼成HTML返回给浏览器。这个链条听起来不复杂但把它做稳定、做规范、做得能支撑高并发才是JavaWeb真正的难点。一个最简单的JavaWeb程序长什么样在早期它就是一份JSP页面加上一个Servlet类。你写一个WebServlet(/hello)标注的类在doGet方法里往HttpServletResponse写出hello world再用Tomcat把项目跑起来浏览器访问http://localhost:8080/hello就能看到结果。这个最小闭环里已经包含了JavaWeb的全部核心Web容器Tomcat、Servlet规范、请求响应模型、Web应用目录结构。看懂它后面所有框架都只是在这个基础上帮你省事。这里我不建议一上来就纠结“以后都用Spring Boot了还要不要学Servlet”。我的建议很明确Servlet和HTTP请求响应模型必须学哪怕只是粗粒度地过一遍。因为你在实际项目里遇到所有古怪问题最后都绕不开这三个底层概念——请求是怎么进来的、参数是怎么绑定的、数据是怎么响应的。框架替你封装了大部分但封装越深出了问题越难排查尤其像文件上传、跨域、过滤器拦截这些场景不懂底层根本无从下手。JavaWeb适合谁学一个是刚入行想走Java后端路线的开发者另一个是从其他语言转过来的同学还有已经工作了但对整个Web请求链路只有零散理解的开发。它的价值不在于让你记住某个框架的API而在于帮你建立一张完整的“请求处理地图”从浏览器到服务器、从服务器到数据库、从数据库再回到页面。这张地图一旦在大脑里成型后面学任何Java后端技术都是同一个套路知识迁移非常快。2. JavaWeb技术全景与选型思路Servlet、JSP、SSM、Spring Boot怎么选2.1 三层架构与MVCJavaWeb项目的基本骨架JavaWeb项目看多了你会发现结构几乎千篇一律。无论技术栈怎么换无非就是表现层、业务逻辑层、数据访问层这三层。表现层负责接收请求、渲染页面业务逻辑层负责处理具体规则数据访问层负责和数据库打交道。这个分层思想往小了说是代码整洁的基础往大了说就是整个后端架构的理论起点。实际开发中三层的落地往往体现在包结构上。你打开一个标准的Spring Boot项目controller包放接口入口service包放业务逻辑mapper或repository包放数据库操作entity放实体类。老一点的项目还会多一个dao包作用跟mapper类似。第一次看这种项目的同学很容易被包名搞晕其实记住一句话就行请求只准从Controller进Service只准通过接口调数据层谁也不要跨层乱找。遵守这个规矩项目大了才不至于乱成一锅粥。MVC则是三层架构在Web层的具体表现。Model对应数据模型和业务规则View对应JSP或HTML页面Controller对应请求分发逻辑。你在IDEA里写一个用户注册功能浏览器把表单POST到Controller的某个方法方法调Service查询用户名是否重复、再把密码加密落库最后返回一个JSON或跳转到登录页。这一整套动作拆开来看每一步都不难难的是顺着MVC的脉络把它们串得清楚。2.2 为什么我建议新项目直接上Spring Boot说句得罪人的话网上那些SSMSpring Spring MVC MyBatis手工配置教程现在实际落地的场景已经很少了。Spring Boot几乎成了JavaWeb项目的默认起手式。原因很简单它把过去SSM里最折磨人的大量XML配置全部自动化你用spring-boot-starter-web一个依赖就能起一个Web项目内嵌Tomcat直接java -jar运行开发时连外置容器都不用装。Spring Boot的意义不只是省去了配置。它还给整个项目定了一套统一的依赖管理和运行规范。比如版本兼容、自动配置、健康检查、指标监控这些都是开箱即用。对于初学者来说这同样是个优势你可以在一个配置极简的项目里先把业务跑通再回头理解自动配置里发生了什么学习曲线反而比从一堆繁琐配置开始要平滑得多。但我也得提醒一句不要因为Spring Boot方便就完全不理解配置的原理。spring-boot-autoconfigure会依据classpath上的依赖自动配置DataSource、Redis、消息队列等组件。如果你出现连接池连不上、端口冲突、配置不生效这类问题还得依赖对底层知识的理解去排查。用Spring Boot降低起步门槛不代表你可以躺平不学底层。2.3 课程笔记里的黑马JavaWeb体系到底值不值得从头啃热词里频繁出现“黑马JavaWeb笔记”我特地去翻了翻这套教程确实是很多人的入门首选。它最大的优点是战线拉得很全从HTML/CSS/JS基础讲起到数据库、JDBC、Servlet、JSP再到Maven、MyBatis、Spring、Spring MVC、Spring Boot几乎覆盖了一个后端开发前两年需要的全部知识点。对于完全零基础的人这套笔记的价值在于帮你建立体系感不用自己去网上零散搜资料拼图。但这套体系也有明显的取舍问题。它的Servlet和JSP部分篇幅占得很大而实际生产环境早就转向前后端分离或者服务端模板引擎如Thymeleaf了。我的建议是把JSP部分当成理解Web原理的教材而不是当成未来的主力技术去死磕。看的时候重点抓几个点请求生命周期、Session和Cookie机制、过滤器Filter与监听器Listener。这些知识点在你以后用任何框架都会遇到才是真正值得反复咀嚼的部分。至于编程学习最忌讳的事就是一遍遍看视频、抄笔记却从不动手。照着黑马笔记敲项目的时候我强烈建议你准备一个自己的Git仓库每一章学完就自己独立做一个小练习哪怕只是给图书管理系统加一个分页查询功能也比你复制粘贴十遍代码有效得多。学习曲线这种东西是用代码量和踩坑量换来的看教程换不出来。3. IDEA运行JavaWeb项目的完整配置从零到能在浏览器里跑通3.1 安装与初始配置JDK、Maven、Tomcat怎么搭配在IDEA里运行JavaWeb项目是新人问得最多的问题之一。一问才知道很多人的卡点根本不是写代码而是项目在IDE里怎么跑起来。这里我以IDEA 2023版、JDK 1.8、Maven 3.8、Tomcat 9为例梳理一套亲测稳定的配置流程。JDK选1.8还是17取决于项目要求JavaWeb学习阶段建议1.8很多老教程和老依赖对它兼容最好。Maven最重要的是配好阿里云镜像否则拉依赖能把你拉到怀疑人生。配置步骤其实很简单先说全局配置安装JDK后设置JAVA_HOME环境变量并在IDEA里设置Project SDK为对应版本。下载Maven修改settings.xml添加阿里云镜像仓库再在IDEA的Build, Execution, Deployment Build Tools Maven里指定Maven home。Tomcat作为Servlet容器学习阶段不必单独下载用spring-boot-starter-web内嵌的就行。如果你坚持用外置Tomcat跑传统war包再去官网下Tomcat 9。要注意的是IDEA这个开发工具对新手最大的迷惑点在于它有Project SDK、Module SDK、Project language level、Java Compiler target bytecode version这么好几处版本设置。任何一个地方不对都会出现Error: java: invalid source release或编译后Class版本不符合预期的问题。我的经验是把所有Sdk和Level统一设成同一个大版本例如全部1.8或全部17别混搭。3.2 创建并运行第一个JavaWeb项目的关键步骤在IDEA里新建一个Spring Boot的JavaWeb项目流程基本固定New Project选择Spring Initializr设置Group和Artifact依赖勾选Spring Web。如果你是学传统Servlet那就选Maven项目手动在pom.xml加javax.servlet-api依赖然后自己建src/main/webapp目录放JSP页面。这里我多说一句很多人做传统JavaWeb项目时最闹心的就是目录结构不对。Maven标准目录下Java代码放src/main/java配置文件放src/main/resourcesWeb根目录放src/main/webapp。IDEA默认不会帮你建webapp目录你需要手动New Directory建完后右键Mark Directory As Resources Root这样JSP和静态资源才能被正确识别。以传统Servlet为例你新建完目录后pom.xml里关键依赖就这么几句dependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version4.0.1/version scopeprovided/scope /dependency dependency groupIdjavax.servlet.jsp/groupId artifactIdjavax.servlet.jsp-api/artifactId version2.3.3/version scopeprovided/scope /dependency写第一个ServletWebServlet(/hello) public class HelloServlet extends HttpServlet { Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType(text/html;charsetutf-8); resp.getWriter().write(h1Hello JavaWeb/h1); } }然后配置Tomcat运行方式。Run Edit Configurations 加号 Tomcat Server Local在Deployment标签页把项目的war exploded包加进去Application context填/启动后访问http://localhost:8080/hello看到页面就成了。IDEA这里的关键坑是你还要在Server标签页把On Update action和On frame deactivation设置为Update resources否则改了JSP页面刷新浏览器不生效会一直显示旧内容。3.3 常见配置误区端口、部署包、依赖冲突这部分我直接放一个排查清单都是学生和新人踩烂了的坑端口被占用。只要启动时控制台报Port 8080 was already in use要么关掉占用程序要么在application.properties里改server.port8081。项目能编译但访问404。大概率是部署的Application context和实际访问路径对不上。比如你部署上下文是/demo那就得访问/demo/hello光访问/hello自然404。Tomcat版本和Servlet API版本不匹配。Tomcat 10自带的Servlet是jakarta.servlet不是javax.servlet如果你把旧项目直接扔进Tomcat 10跑会报ClassNotFoundException。学习阶段建议要么用Tomcat 9配合javax包要么用Spring Boot默认的内嵌Tomcat。Maven刷新慢。IDEA右侧Maven面板点Reload All Projects后长时间卡住检查settings.xml镜像和IDEA的VM Options里-Dmaven.wagon.http.ssl.insecuretrue这类参数是否配置老实配好后基本一遍过。中文乱码。分三种情况代码文件乱码在Settings里把File Encodings全部UTF-8请求乱码在方法入口设置request.setCharacterEncoding(utf-8)响应乱码用resp.setContentType(text/html;charsetutf-8)。Spring Boot项目则直接统一在配置里指定server.servlet.encoding.forcetrue。排查这些问题的思路也很重要先看控制台报错再看是编译期、部署期还是运行期错误。很多新手一报错就截图问人其实日志第一行就写明原因了学会看日志是JavaWeb开发最重要的一项基本功。4. 一个JavaWeb完整项目案例拆解Spring Boot MySQL的图书管理系统4.1 数据库设计与JPA/MyBatis映射光讲概念容易飘我直接以图书管理系统为例把整个JavaWeb项目的落地过程捋一遍。这是JavaWeb课设里最经典的项目从大一到大四几乎年年见但很多人做出来只能说“能跑”谈不上“理解了”。这次换个姿势我按真实项目的思考顺序来拆。数据库设计放在第一步。图书管理系统最基础的三张表用户表、图书表、借阅记录表。我习惯把这些建表SQL先试好再回过来写代码。别小看这个顺序先理清数据结构后面的实体类、Service、前端页面都会顺势变得清晰。表结构建议这么设计CREATE TABLE user ( id int NOT NULL AUTO_INCREMENT, username varchar(50) NOT NULL, password varchar(100) NOT NULL, role tinyint DEFAULT 0, create_time datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_username (username) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;CREATE TABLE book ( id int NOT NULL AUTO_INCREMENT, name varchar(100) NOT NULL, author varchar(50) DEFAULT NULL, publisher varchar(100) DEFAULT NULL, stock int DEFAULT 1, PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;CREATE TABLE borrow_record ( id int NOT NULL AUTO_INCREMENT, user_id int NOT NULL, book_id int NOT NULL, borrow_time datetime DEFAULT CURRENT_TIMESTAMP, return_time datetime DEFAULT NULL, PRIMARY KEY (id), KEY idx_user_id (user_id), KEY idx_book_id (book_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;这里有几个细节值得注意。第一MySQL字符集建议用utf8mb4而不是utf8因为后者存不了emoji和一些生僻字。第二密码不能明文存后面我会单独说加密方式。第三borrow_record表里加idx_user_id和idx_book_id两个普通索引等数据量上来了你就知道多重要查某个人的借阅记录没有索引就是全表扫描慢得离谱。ORM框架选MyBatis还是JPA这里我给一个非常实用的判断标准如果你的SQL很简单表关系不复杂选Spring Data JPA写代码效率最高如果你的业务查询很复杂需要各种动态SQL和报表统计选MyBatis更灵活。课设项目通常两种都能做但我的经验是用MyBatis更容易让你理解SQL本身所以我倾向于推荐MyBatis。新手用MyBatis也更能明白这个SQL是怎么执行的不会像JPA那样出现“莫名其妙查出一堆数据”的黑盒困惑。4.2 后端分层实现Controller、Service、Mapper后端代码的分层我按一个用户借书的最简流程来走一遍。假设用户点“借阅”按钮浏览器发一个POST /api/borrow请求带bookId参数。首先进入ControllerRestController RequestMapping(/api/borrow) public class BorrowController { Autowired private BorrowService borrowService; PostMapping public Result borrow(RequestParam Integer userId, RequestParam Integer bookId) { borrowService.borrow(userId, bookId); return Result.success(); } }Controller只做参数接收和结果包装不写任何业务逻辑。接下来是ServiceService public class BorrowService { Autowired private BookMapper bookMapper; Autowired private BorrowRecordMapper borrowRecordMapper; Transactional(rollbackFor Exception.class) public void borrow(Integer userId, Integer bookId) { Book book bookMapper.selectById(bookId); if (book null) { throw new BusinessException(图书不存在); } if (book.getStock() 0) { throw new BusinessException(库存不足); } bookMapper.decreaseStock(bookId); borrowRecordMapper.insert(new BorrowRecord(userId, bookId, LocalDateTime.now())); } }这段代码里最关键的有两个点。第一是Transactional事务注解borrow方法里涉及两步操作——扣库存和插入记录它们必须同时成功或同时失败。没有事务就会出现库存扣了但借阅记录没插入的脏数据。第二是库存判断selectById和decreaseStock之间其实存在并发风险真实项目里需要加乐观锁或UPDATE book SET stock stock - 1 WHERE id ? AND stock 0这类原子操作。课设阶段能理清这两层逻辑你的理解已经比很多人强了。Mapper层用MyBatis最简单的做法就是写接口加注解SQLMapper public interface BookMapper { Select(SELECT * FROM book WHERE id #{id}) Book selectById(Integer id); Update(UPDATE book SET stock stock - 1 WHERE id #{id} AND stock 0) int decreaseStock(Integer id); }很多人第一次看到Mapper注解会疑惑它到底干什么它的作用就是让MyBatis在应用启动时给这个接口生成一个代理实现类方法上的SQL注解会被解析成数据库操作。这和你以前手写PreparedStatement的思路完全一样只是框架把样板代码替你收走了。我在讲这段的时候常跟别人说学MyBatis不用愁它就是把JDBC的六个固定步骤注册驱动、建连接、建Statement、执行SQL、处理结果集、关闭资源简化到了只剩写SQL这一件事。4.3 前端页面与JSP的配合图书管理系统的前端传统做法是JSP页面加上JSTL标签库用${}表达式渲染数据。比如图书列表页% taglib prefixc urihttp://java.sun.com/jsp/jstl/core % table tr th书名/th th作者/th th出版社/th th库存/th /tr c:forEach items${bookList} varbook tr td${book.name}/td td${book.author}/td td${book.publisher}/td td${book.stock}/td /tr /c:forEach /tableJSP的核心思想是服务端渲染Java代码在服务器上跑完拼好HTML响应给浏览器页面源码里看不到Java代码。这个思路和现代前后端分离的差别在于JSP把页面和数据捏在一起开发效率在小型项目上很高但也因此难以并行开发。现在新项目用JSP已经很少了我建议你把JSP当成服务端渲染的一种历史实践来学习理解它的生命周期即可真正做课设或毕设时至少尝试用Vue Spring Boot做一次前后端分离这才符合现在行业的主流形态。如果你坚持用JSP还有几个小配置要注意。Spring Boot默认不直接支持JSP需要加spring-boot-starter-tomcat的JSP解析依赖并在application.properties里配置spring.mvc.view.prefix/WEB-INF/jsp/和suffix.jsp。JSP文件要放在src/main/webapp/WEB-INF/jsp下直接用浏览器访问WEB-INF目录是被禁止的这个安全限制能防止用户绕过Controller直接打开页面也是JSP项目的一个默认防护机制。5. 部署上线与文件组织war包还是jar包5.1 本地打包流程JavaWeb项目写得再漂亮最终要给别人用就得部署上线。部署方式由项目的打包格式决定。这地方新手很容易混淆我拆开讲。Spring Boot项目默认打包成可执行的jar包。这个jar包内嵌了Tomcat本质上是一个自带运行环境的独立Java程序。打包命令非常简单在IDEA的Maven面板双击package或者命令行执行mvn clean package -DskipTests打包完成之后jar文件在target目录下。启动只需要一条命令java -jar book-system-0.0.1-SNAPSHOT.jar --server.port8080传统Servlet项目则打包成war包它需要部署到外置Tomcat的webapps目录下启动Tomcat后会自动解压并运行。在POM里要指定packagingwar/packaging再把项目里Spring Boot的启动类改成继承SpringBootServletInitializer并重写configure方法否则war包丢进Tomcat也识别不了。到底是打jar包还是war包现在的趋势已经很明确了全用jar包。原因也简单jar包部署更简单不依赖独立的Tomcat安装和配置一台服务器上跑多个项目也不会因为Tomcat冲突互相干扰。war包这种老方式更多存在于旧系统维护和特定容器环境里。学习阶段把jar包的流程吃透已经足够应付绝大多数场景了。5.2 部署到服务器的实际操作部署到云服务器的思路同样是两个阶段。第一次部署先用最笨最直接的方式把jar包传到服务器上装好JDK后直接跑。比如用scp或sftp传到/opt/app目录scp target/book-system-0.0.1-SNAPSHOT.jar rootyour-server:/opt/app/登录服务器后先确认Java环境java -version然后前台运行java -jar book-system-0.0.1-SNAPSHOT.jar看到Started BookSystemApplication就说明起来了浏览器访问http://服务器IP:8080。到这一步你已经完成了JavaWeb从开发到上线的完整闭环。但前台运行有个致命问题SSH窗口一关进程就死了。所以真正上线时必须用nohup把它放在后台并把日志输出到文件nohup java -jar book-system-0.0.1-SNAPSHOT.jar --server.port8080 app.log 21 关于部署我还要多说一句数据库连接的问题。本地MySQL的连接地址是localhost:3306服务器上MySQL的连接地址自然也要改成服务器的IP或内网地址。同时云服务商的安全组和服务器防火墙必须放行对应端口否则你项目起得再正常外面也访问不到。我见过不少人在这一步折腾半天最后发现是只开了云服务商端口、没开系统防火墙或者反过来。检查顺序建议是先看本机curl localhost:8080通不通再看防火墙最后看云安全组一级一级排查效率最高。6. JavaWeb常见问题排查与经验速查6.1 典型问题排查速查表这里把JavaWeb学习过程中最高频的问题整理成一张表。这张表我建议你直接截图存着以后遇到问题先来对号入座不用每次重新百度。问题现象常见原因处理建议项目启动报Port 8080 was already in use端口被占用netstat -ano | findstr 8080找到进程并结束或改端口Spring Boot访问页面报Whitelabel Error Page接口路径写错或Controller未扫描到检查RequestMapping路径检查启动类所在包结构数据库连接失败Access denied for user用户名密码错误核对application.properties或环境变量里的数据库凭据SQL注入相关异常拼接SQL字符串永远使用#{}占位符杜绝${}拼SQL中文乱码编码不统一JSP和响应统一UTF-8IDEA全局编码UTF-8过滤请求编码修改JSP不生效IDEA默认未开启热部署部署配置中把On frame deactivation改为Update resourcesMaven依赖下载特别慢中央仓库网络慢settings.xml配置阿里云镜像后端返回数据时间格式不对Jackson时间序列化默认格式全局配置spring.jackson.date-formatyyyy-MM-dd HH:mm:ss访问页面404且Tomcat没报错部署上下文路径不对确保Application context和URL前缀一致上传文件大小超限Spring Boot默认限制1MB配置spring.servlet.multipart.max-file-size10MB和max-request-size10MB这张表里的问题我都实际遇过。像中文乱码这种问题如果一开始就注意全套UTF-8根本不会发生。最怕的是项目写了一半才想起统一编码改的时候牵一发动全身。所以我有个习惯新建任何JavaWeb项目第一件事就是改IDEA的File Encodings、项目编码、控制台编码这么一个三连设置能避开后面无数组乱码纠纷属于投入最低、回报最高的一次配置。6.2 我踩过的一些坑和总结的经验最后分享几个只有真正做项目才会踩到的切身经验每个坑背后都对应一个值得记住的教训。第一个是实体类字段命名和数据库字段命名不一致的问题。比如数据库字段叫create_timeJava实体类属性叫createTime。MyBatis默认开启了下划线驼峰自动映射但你需要在配置里打开map-underscore-to-camel-casetrue。不配置的话查询结果里createTime就是null页面一直拿不到创建时间。这个坑特别隐蔽程序不报错但数据就是不对。排查的时候把日志里的SQL复制出来手动跑一遍发现SQL结果有值、Java对象却为null基本就是映射问题。第二个是自增主键的获取。往BorrowRecord表插入数据时如果你想拿到刚插入记录的自增ID需要在MyBatis的insert语句里加useGeneratedKeystrue keyPropertyid。很多课设项目里用户借完书后要立即显示借阅详情这个ID就非拿不可。这部分知识JDBC时代叫getGeneratedKeysMyBatis只是帮你封装了原理完全相同。第三个是密码加密。这是被讲烂了但依然遍地踩坑的点。直接用MD5加密已经不够安全在2024年的今天建议至少用BCryptPasswordEncoder做哈希。Spring Security里自带这个工具代码只有一行new BCryptPasswordEncoder().encode(password)。校验时用matches(plain, hash)方法。加盐逻辑框架已经内置了不需要你自己拼字符串拼了反而容易出错。第四个也是我认为最重要的经验那就是JavaWeb的学习一定要以产品闭环为导向而不是以学完目录为导向。很多人跟着教程学了一遍Servlet学了、Spring学了、MyBatis学了但你要他独立做一个带登录注册、增删改查、分页排序的项目他依然一脸茫然。问题就出在他学的时候都是跟着章节走没有一个属于自己的不断迭代的小项目。所以我一直建议从学JavaWeb的第一天起就选定一个小项目比如图书管理系统每学一个技术就把项目重写一遍。第一次用Servlet写第二次用Spring MVC写第三次用Spring Boot写。同一个小项目写三遍你对技术的理解深度绝对超过看三十个教程。网上关于“黑马JavaWeb笔记”和各类“JavaWeb头歌实训答案”的资料很多。我的看法是把实训题当题目练手没问题千万别去抄答案交差。实训平台的价值在于你写错了一道题平台会告诉你哪里错这种即时反馈比看十页笔记都有用。真要提升动手能力就逼自己不看答案把流程走通从建表到部署一步不落。等到你能把自己的项目在没有教程的情况下完整跑起来JavaWeb这关就算真正过了。如果你现在正处于不知道怎么搭项目、不知道从哪下手的状态我的建议很直接别想太多先建一个Spring Boot项目连上一张MySQL表做一个能查询列表的接口再做一个能提交表单的接口把它跑通。这不需要任何高深技术但它能给你一个真实可感知的起点。后面每个知识点都是在这个起点上做加法。JavaWeb的路说长也长说短也短核心就四个字动手坚持。
RELATED

相关推荐

告别手写Agent循环:Strands Harness SDK实战指南

告别手写Agent循环:Strands Harness SDK实战指南

1. 为什么“手写 Agent 循环”正在变成一种负担如果你最近半年在折腾 AI Agent,大概率经历过这个阶段:一开始兴致勃勃地写一个while True循环,把用户输入塞进 prompt,调一次模型,解析返回,判断要不要调工具…

📅 2026/9/30 4:51:44
区域综合能源系统电气热能流计算:从牛顿-拉夫逊到Matlab统一求解实践

区域综合能源系统电气热能流计算:从牛顿-拉夫逊到Matlab统一求解实践

做配电网潮流的人第一次接触区域综合能源系统时,往往会有一种错觉:把电、热、气三套网络分别算一遍,再把耦合设备的交互量当作边界条件来回迭代几轮,问题不就解决了吗?我最初也确实这么干过,直到在一组强耦…

📅 2026/9/30 4:51:44
总结 9.29

总结 9.29

今天学了数学的曲线曲面积分,了解了曲线积分的正负性,在同方向时及北欧领,曲面积分的第二型也同理。然后学了第二型曲面积分到第一型的转化,可以理解为微分变换,但是记得根据面和z的夹角判断方向。了解了方向余弦在ds和…

📅 2026/9/30 4:51:44
MORE NEWS

更多资讯

📰

WEP/WPA协议原理教学:从IV重用到四次握手的无线安全实验

简介:本资源是一份面向网络安全初学者与渗透测试爱好者的Wi-Fi密码破解实战教程,聚焦WEP/WPA加密协议的原理分析与工具实操。内容涵盖无线信号扫描(WirelessMon)、数据包捕获(Airodump)及密钥破解&#xff…

📰

八大AI系统架构:从数据飞轮到安全合规的工程实践指南

1. “八大AI架构”不是标准术语,而是实战中自然形成的八类典型模式“八大AI架构”这个词最近在技术社区和招聘JD里高频出现,但翻遍IEEE、ACM、arXiv主流论文库,甚至各大厂的AI工程白皮书,都找不到一个官方定义——它既不是ISO标准…

📰

AI日报:面向知识工作者的智能信息流水线构建指南

1. “AI日报”不是新闻聚合,而是一套可复用的智能信息流水线“AI日报”这个词最近在技术圈和内容团队内部高频出现,但它绝不是简单地把几条AI领域新闻拼在一起发个公众号推文。我最早接触这个概念是在2023年中,当时帮一家做AIGC工具评测的初创…

📰

实战型网络应急响应PPT课件设计指南

简介:本资源是一份面向网络安全从业者、高校师生及等保合规人员的《网络应急响应预案》PPT教学课件,系统梳理了应急响应的核心概念、六阶段处置流程(计划准备→确认→调查分析→处理→恢复→跟踪)及关键技术体系。课件涵盖主机保护…

📰

敏捷测试实战指南:从质量内建到测开面试应对

最近在准备测开面试题库时,我把近两年市场上高频率出现的测开八股翻了个遍,发现有个词几乎场场不落:敏捷测试。候选人大多能背出敏捷宣言,也能说出测试金字塔大概长什么样,可当我追问一句“迭代第三天开发突然说功能提…

📰

YOLOv11车辆速度与轨迹跟踪实践:从目标检测到卡尔曼滤波的完整技术解析

简介:YOLOv11单阶段检测算法只需对图像扫描一次即可快速精准识别多目标,在安防监控、自动驾驶、工业检测等场景中应用广泛。面向智能交通管理场景,这份PDF文档共44页、约2.25MB,资源包仅含此一个文件,聚焦车辆速度与轨…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬