在 IntelliJ IDEA 中创建一个包含 JSP 和 Servlet6.0 的 Maven Web 项目,并配置 Tomcat 进行调试

前提条件: 配置Maven

在设置中,选择自己下载的Maven文件.并配置上.

maven下载和设置可以参考https://chxii.blog.ZEEKLOG.net/article/details/148175538?spm=1011.2415.3001.5331

第一步:创建 Maven Web 项目

  1. 打开 IntelliJ IDEA → FileNewProject
  2. 选择 Maven(左侧)
  3. 勾选 Create from archetype
  4. 在 archetype 列表中选择:
    • maven-archetype-webapp(这是标准的 Java Web 项目模板)
  5. 点击 Next
  6. 填写 GroupId、ArtifactId(例如):
    • GroupId: com.example
    • ArtifactId: mywebapp
  7. 点击 Finish
⚠️ 第一次创建可能较慢(需下载 archetype)

第二步:完善项目结构(手动补充缺失目录)

默认生成的项目可能缺少 Java 源码目录和测试目录:

  1. 在 src/main 下右键 → New → Directory → 输入 java(作为 Java 源码目录)
  2. (可选)同样创建 src/test/java 并标记为 Test Sources Root

右键 java 目录 → Mark Directory as → Sources Root

最终结构应类似:

mywebapp/ ├── src/ │ ├── main/ │ │ ├── java/ ← Java 源码(Servlet) │ │ ├── resources/ │ │ └── webapp/ ← JSP、HTML、WEB-INF │ │ ├── WEB-INF/ │ │ │ └── web.xml │ │ └── index.jsp └── pom.xml

看下项目结构

确保xml文件位置 和 webapp目录位置正确


第三步:配置 pom.xml

添加 Servlet API 依赖(注意:provided,因为 Tomcat 已提供):

<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.example</groupId> <artifactId>mywebapp</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- Servlet API (provided by Tomcat) --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>mywebapp</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins> </build> </project>

第四步:编写一个简单 Servlet 和 JSP

1. 创建 Servlet(在 src/main/java/com/example/ServletDemo1.java

package com.example; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class ServletDemo1 extends jakarta.servlet.http.HttpServlet { private static final long serialVersionUID = 1L; @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().println("Hello World"); } } 

2. 修改 webapp/index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>Home</title></head> <body> <h1>Welcome to My Web App!</h1> </body> </html>
注意:如果不用注解(@WebServlet),需在 web.xml 中配置 servlet 映射。

3. 修改web.xml 

在web.xml 里,修改成servlet6.0的模版

并且配置上servlet访问路径

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" version="6.0" metadata-complete="false"> <!-- 示例:注册一个 Servlet --> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.example.ServletDemo1</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <!-- 可选:设置欢迎页面 --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> 

第五步:配置 Tomcat 调试运行

  1. 点击 Configure...,指定你的 Tomcat 安装目录

点击左上角 + → 选择 Tomcat Server → Local

如果没有 Tomcat 选项,请确认你使用的是 Ultimate 版

点击右上角 → Edit Configurations...

  1. 在 Deployment 标签页:
    • 点击 + → 选择 Artifact
    • 选择 mywebapp:war exploded(推荐使用 exploded 方便热部署)
    • Application context 可设为 / 或 /mywebapp
  2. 回到 Server 标签页:
    • HTTP port 默认 8080(可改)
    • JRE 选择项目对应的 JDK

点击 OK


第六步:启动并调试

  • 点击 ▶️ 运行按钮(或 Debug 按钮)
  • IDEA 会自动编译、打包、部署到 Tomcat
  • 浏览器访问:
    • http://localhost:8080/ → 显示 index.jsp ( Welcome to My Web App! )
    • http://localhost:8080/hello → 显示 ( hello world )

✅ 你可以在 ServletDemo1中打 断点,点击 Debug 模式启动,即可调试!


使用maven插件运行 

参考vscode里的配置https://blog.ZEEKLOG.net/chxii/article/details/154356950?sharetype=blogdetail&sharerId=154356950&sharerefer=PC&sharesource=chxii&spm=1011.2480.3001.8118

补充

Java EE 原由 Oracle 主导,现移交 Eclipse Foundation 管理,并更名为 Jakarta EE。为避免商标问题并体现社区主导,强制更改了命名空间。

以下是关键时间节点:


📅 2017 年 8 月

  • Oracle 宣布计划将 Java EE 移交给开源社区。
  • Oracle 表示希望找到一个中立的、成熟的开源基金会来接管 Java EE,以加速其创新和开放治理。

📅 2017 年 9 月

  • Oracle 正式提名 Eclipse Foundation 作为 Java EE 的新归属机构。
  • IBM、Red Hat 等主要 Java 企业也公开支持这一决定。

📅 2017 年 10 月 24 日

  • Oracle 官方正式宣布:将 Java EE 及其参考实现 GlassFish 移交给 Eclipse Foundation
  • 同时明确:由于商标限制,不能继续使用 “Java” 品牌,因此需要更名。

📅 2018 年 3 月

  • Eclipse 基金会发起命名投票,“Jakarta EE” 以 64.4% 的得票率胜出。
  • Java EE 正式更名为 Jakarta EE

📅 2018 年 5 月

  • 项目在 Eclipse 基金会下正式启动,包括:
    • Eclipse Enterprise for Java (EE4J) 项目
    • GlassFish 更名为 Eclipse GlassFish
    • 所有规范逐步迁移到 jakarta.* 命名空间

📅 2019 年 9 月

  • Jakarta EE 8 发布 —— 这是第一个由 Eclipse 基金会发布的版本,API 与 Java EE 8 完全兼容,仅变更了项目归属和流程,包名仍为 javax.*

📅 2021 年 5 月

  • Jakarta EE 9 发布 —— 包名正式从 javax.* 改为 jakarta.*,标志着技术栈的彻底迁移。

 拥抱 Java 生态的未来方向

  • Jakarta EE 是 Java 企业级开发的官方继承者
  • Spring Boot 3(2022 年底发布)已全面转向 Jakarta EE 9+,要求使用 jakarta.* 包。
  • 未来的 Java 框架、工具链和云原生平台(如 Quarkus、Helidon)都基于 Jakarta EE 构建。
💡 如果你计划使用 Spring Boot 3+、JDK 21+ 长期支持版本,就必须迁移到 jakarta.*


总结:为何推荐?

原因说明
✅ 兼容性支持 Tomcat 10+、Spring Boot 3+ 等现代技术栈
✅ 安全性获得持续维护和漏洞修复
✅ 未来就绪对齐 Jakarta EE 和云原生发展方向
✅ 降低风险避免被旧技术栈锁定,减少后期迁移成本
🔜 结论:除非你必须长期停留在 Tomcat 9 / Spring Boot 2.x 等旧环境,否则强烈建议新项目直接使用 jakarta.servlet,老项目尽早规划迁移

Read more

实测GLM-4.6V-Flash-WEB响应速度,300ms内出结果稳了

实测GLM-4.6V-Flash-WEB响应速度,300ms内出结果稳了 在图文理解类AI服务的实际落地中,用户往往只给系统一次机会——上传一张图、输入一个问题,然后等待。如果三秒没反应,多数人会刷新页面;如果五秒还没结果,大概率直接关闭标签页。这不是模型能力不够强的问题,而是响应延迟直接决定了用户是否愿意继续用下去。 最近实测的 GLM-4.6V-Flash-WEB,让我第一次在单卡环境下,对“多模态模型也能像文本模型一样快”这句话有了真实体感。它不是理论上的优化,也不是实验室里的理想数据,而是在真实部署环境里,连续跑满一小时压力测试后,依然稳定维持在 287ms 平均响应时间 的实绩。 这不是一个靠调参堆出来的峰值数字,而是一套从模型结构、推理引擎到部署脚本都围绕“快”重新设计的完整方案。下面我将带你从零开始,亲手验证这个“300ms 内出结果”的承诺到底靠不靠谱。 1. 快速上手:5分钟完成本地实测 别被“视觉大模型”几个字吓住。GLM-4.6V-Flash-WEB 的设计哲学就是:让第一次接触的人,也能在5分钟内看到第一张图的回答。

Linux下libwebkit2gtk-4.1-0安装实战案例(从零实现)

Linux下 libwebkit2gtk-4.1-0 安装实战:从零搞定GTK 4应用的Web渲染引擎 你是否在开发一个基于 GTK 4 的桌面程序时,突然发现 webkit_web_view_new() 编译报错? 或者运行时提示“找不到 libwebkit2gtk-4.1.so.0 ”? 别急——这不是你的代码写错了,而是系统里缺了那个关键的 Web 渲染库: libwebkit2gtk-4.1-0 。 这玩意儿看起来只是个动态链接库,但它其实是现代 Linux 桌面应用中嵌入网页内容的“心脏”。无论是 OAuth 登录窗口、帮助文档展示,还是像 Epiphany 浏览器那样的完整 Web 客户端,都离不开它。 但问题来了:为什么这个包这么难装? 因为它依赖复杂、版本敏感、发行版支持参差不齐。Ubuntu

前端状态管理:Recoil的原子世界

前端状态管理:Recoil的原子世界 毒舌时刻 前端状态管理?Redux不是已经够了吗? "Redux太复杂了,我用Context API就够了"——结果状态管理混乱,性能差, "Zustand简单,我用Zustand"——结果复杂状态难以管理, "Recoil?没听说过,肯定不如Redux"——结果错过了更优雅的状态管理方案。 醒醒吧,Recoil不是Redux的替代品,而是一种更现代化的状态管理方案! 为什么你需要这个? * 原子化状态:将状态拆分为最小的原子单位,更灵活 * 派生状态:通过选择器创建派生状态,减少重复计算 * React集成:与React Hooks无缝集成,使用更自然 * 性能优化:只重新渲染依赖状态变化的组件 反面教材 // 反面教材:使用Context API管理复杂状态 import React, { createContext, useContext, useState, useReducer } from

本地服务器用 OpenClaw + Open WebUI 搭建企业多部门 AI 平台(附 Docker 避坑指南)

本地服务器用 OpenClaw + Open WebUI 搭建企业多部门 AI 平台(附 Docker 避坑指南)

引言: 最近在尝试使用 OpenClaw,发现这个 AI 个人助理框架非常有意思。于是团队里就有人提出:能不能为公司的多个部门,分别搭建专属的 OpenClaw 服务器? 诚然,现在有钉钉、飞书等成熟的办公软件可以接入 AI,但对于一些尚未全面普及此类协作软件的企业(或者需要绝对私有化部署的团队)来说,独立搭建一套内部 AI 门户依然是刚需。 起初,我们考虑直接让大家通过 OpenClaw 自带的 Web 界面进行跨电脑访问。但实操后发现这存在致命缺陷: 1. 权限越界:自带的 Web 端拥有底层的配置编辑权限,暴露给普通员工极其不安全。 2. 无法溯源:多终端共用一个 Web 界面,根本无法追溯对话是由谁发起的。 3. 缺乏隔离:无法按部门精细化分配 API 额度或限制特定部门只能访问特定的 OpenClaw 节点,无法实现业务隔离。 为了解决这些痛点,我们最终确定了这套架构方案: