JavaWeb开发基础知识-Servlet终极入门指南(曼波萌新版)

news2025/5/15 22:21:56

(✪▽✪)曼波~~~~!欢迎来到Servlet新手村!准备好开启Web开发的奇妙冒险了吗?让曼波用最有趣的方式带你飞~ 🚀

🌈 第①章 什么是Servlet?

// 本质就是一个Java类!
public class HelloServlet extends HttpServlet {
    // 专门处理HTTP请求的小管家
}
  • 官方定义:运行在服务器端的Java程序
  • 核心作用:接收请求 → 处理业务 → 返回响应
  • 生活比喻:就像餐厅的服务员(接单→后厨处理→上菜)

🛠️ 第②章 快速创建第一个Servlet

步骤1:创建类继承HttpServlet

@WebServlet("/hello") // 魔法注解!
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        resp.getWriter().print("❤️ 曼波教你学Servlet!");
    }
}

步骤2:配置web.xml(传统方式)

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.mambo.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

🔄 第③章 Servlet生命周期(超重要!)

  1. 出生init() → 容器启动时调用一次
  2. 工作service() → 每次请求都调用
  3. 退休destroy() → 容器关闭时调用

 

📮 第④章 处理HTTP请求

GET请求处理

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    String name = request.getParameter("name"); // 获取URL参数
    // 处理逻辑...
}

POST请求处理

protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    // 处理登录逻辑...
}

📦 第⑤章 请求与响应对象

HttpServletRequest 的百宝箱

// 获取各种信息
String clientIP = request.getRemoteAddr(); // 客户端IP
String header = request.getHeader("User-Agent"); // 浏览器信息
Cookie[] cookies = request.getCookies(); // 获取cookie

// 存取数据
request.setAttribute("data", myData); // 存数据
Object data = request.getAttribute("data"); // 取数据

HttpServletResponse 的魔法棒

// 设置响应
response.setContentType("text/html;charset=UTF-8"); // 内容类型
response.setStatus(404); // 设置状态码
response.sendRedirect("newPage.html"); // 重定向

// 写响应体
PrintWriter out = response.getWriter();
out.println("<h1>Hello World!</h1>");

🎯 第⑥章 实际应用场景

场景1:用户登录

String username = request.getParameter("username");
String password = request.getParameter("password");

if("admin".equals(username) && "123456".equals(password)){
    request.getSession().setAttribute("user", username); // 存session
    response.sendRedirect("welcome.jsp");
}else{
    response.sendError(401, "登录失败!");
}

场景2:文件下载

response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"mambo.txt\"");

try(InputStream in = new FileInputStream("/path/to/file");
    OutputStream out = response.getOutputStream()) {
    byte[] buffer = new byte[4096];
    int length;
    while ((length = in.read(buffer)) > 0){
        out.write(buffer, 0, length);
    }
}

💡 第⑦章 常见问题解答

Q1:为什么我的Servlet返回乱码?

// 解决方案:统一设置编码
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");

Q2:如何保持用户状态?

// 使用Cookie
Cookie cookie = new Cookie("user", "mambo");
cookie.setMaxAge(3600); // 1小时有效期
response.addCookie(cookie);

// 使用Session
HttpSession session = request.getSession();
session.setAttribute("cart", shoppingCart);

Q3:Servlet是线程安全的吗?

⚠️ 注意:Servlet是单例多线程的!

  • 实例变量会有线程安全问题
  • 解决方法:
    • 使用局部变量
    • 同步代码块
    • 避免使用实例变量

🚀 第⑧章 学习路线建议

  1. 先掌握Servlet基础生命周期
  2. 熟悉请求响应对象操作
  3. 学习JSP与Servlet配合
  4. 深入Filter和Listener
  5. 最终过渡到Spring MVC

曼波小贴士:推荐使用Tomcat 9+作为练习服务器,用IDEA社区版就能轻松创建Web项目啦!(≧∇≦)ノ

试着写一个记录访问次数的Servlet吧~ 遇到问题随时召唤曼波哦!(✪ω✪) 记得Servlet就像Web开发的乐高积木,组合起来能创造无限可能!✨

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

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

相关文章

游戏引擎学习第198天

回顾并为今天的内容设定 今天我们有一些代码需要处理。昨天我们进行了一些调试界面的整合工作&#xff0c;之前我们做了一些临时的、粗糙的操作&#xff0c;将一些东西读进来并放到调试界面中。今天&#xff0c;我们并不打算进行大规模的工作&#xff0c;更多的是对之前的代码…

Walrus 基金会启动 RFP 计划,推动生态发展

Walrus 基金会正式推出 Walrus RFP 提案申请计划&#xff0c;为推动和支持 Walrus 生态的项目提供资金支持。该计划旨在助力构建符合协议使命的解决方案&#xff0c;解锁去中心化和可编程存储的潜力。 无论项目是开发新工具、探索集成&#xff0c;还是提出创新用例&#xff0c…

智能配电箱:重塑未来电力管理的核心枢纽

哇塞&#xff01;智能配电箱可是未来电力管理的超级核心枢纽呀&#xff0c;正以超燃的态势引领着电力行业迈向智能化变革的新征程呢&#xff01;它在众多方面所展现出的独特优势和那广阔无垠的应用前景&#xff0c;简直太令人激动啦&#xff01;下面就来瞧瞧智能配电箱在重塑未…

透过 /proc 看见内核:Linux 虚拟文件系统与 systemd 初始化初探

当我们在终端中输入 ps、top、cat /proc/cpuinfo 等命令时&#xff0c;是否思考过这些信息来自哪里&#xff1f;为什么无需启动任何守护进程&#xff0c;就能实时读取系统负载、内存占用&#xff0c;甚至内核版本&#xff1f;这一切的答案&#xff0c;都藏在 Linux 系统中的一个…

用DrissionPage升级维基百科爬虫:更简洁高效的数据抓取方案

一、原方案痛点分析 原代码使用urllibBeautifulSoup组合存在以下问题&#xff1a; 动态内容缺失&#xff1a;无法获取JavaScript渲染后的页面内容 反爬能力弱&#xff1a;基础请求头易被识别为爬虫 代码冗余&#xff1a;需要单独处理SSL证书验证 扩展性差&#xff1a;难以应…

C++STL——容器-vector(含部分模拟实现,即地层实现原理)(含迭代器失效问题)

目录 容器——vector 1.构造 模拟实现 2.迭代器 模拟实现&#xff1a; ​编辑 3.容量 模拟实现&#xff1a; 4.元素的访问 模拟实现 5.元素的增删查改 迭代器失效问题&#xff1a; 思考问题 【注】&#xff1a;这里的模拟实现所写的参数以及返回值&#xff0c;都是…

严重BUG修复及部分体验问题优化

随着Deepseek APIPython 测试用例一键生成与导出 V1.0.6的试用不断深入&#xff0c;会出现程序异常崩溃的问题。经群友定位&#xff0c;紧急修复了bug&#xff0c;并适当优化部分体验性问题。针对生成的测试用例xlsx文档&#xff0c;可以再次选中该xlsx给大模型进行推理生成新的…

Elasticsearch 证书问题解决

报错信息 javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat org.elasticsearch.client.RestClient. extractAndWrapCause(R…

2023年CIE SCI1区TOP:序列融合麻雀搜索算法ISSA,深度解析+性能实测

目录 1.摘要2.麻雀搜索算法SSA原理3.改进策略3.结果展示4.参考文献5.代码获取 1.摘要 麻雀搜索算法&#xff08;SSA&#xff09;是一种基于麻雀觅食和防捕行为的群体智能算法。然而&#xff0c;基本SSA在迭代过程中&#xff0c;种群多样性逐渐降低&#xff0c;容易陷入局部最优…

配置晟腾910b的PyTorch torch_npu环境

1.【新教程】华为昇腾NPU的pytorch环境搭建 - Lukea - 博客园 1、新建conda环境。 conda create -n pytorch python3.102、在新建好的conda环境中&#xff0c;安装基础的依赖。 pip install attrs cython numpy1.24.0 decorator sympy cffi pyyaml pathlib2 psutil protobuf…

conda 激活环境vscode的Bash窗口

多份conda环境注意事项&#xff0c;当时安装了两个conda环境&#xff0c;miniconda和conda&#xff0c;导致环境总是冲突矛盾。初始化时需要更加注意。 $ C:/Users/a_hal/miniconda3/Scripts/conda.exe init bash能够显示用哪里的conda环境命令执行。 然后直接conda activate…

火山 RTC 引擎 2 ----APPKEY

前篇文章&#xff1a;火山RTC引擎 --一次失望的体验 那个DEMO可以编译运行了&#xff0c;但是功能不能用&#xff0c; 一用就崩溃。 主要原因还是没有APPKEY 一、火山引擎 APPKEY 管理 1、登录后台 账号登录-火山引擎欢迎登录火山引擎&#xff0c;火山引擎是字节跳动旗下的云…

Springboot学习笔记3.28

目录 实战第六课&#xff1a;文章分类开发 新增文章分类&#xff1a; 具体实现&#xff1a; 查询文章分类&#xff1a; 具体实现&#xff1a; 获取文章分类的详情 更新文章分类&#xff1a; 注意点&#xff1a; ​编辑 对校验规则进行分组&#xff1a; 学习时的疑惑…

【CSS3】05-定位 + 修饰属性

本文介绍定位和CSS中的修饰属性。 目录 1. 定位 1.1 相对定位 1.2 绝对定位 1.3 定位居中 1.4 固定定位 1.5 z-index堆叠层级 2. 修饰属性 2.1 垂直对齐方式 vertical-align 2.2 过渡属性 2.3 透明度 opacity 2.4 光标类型 cursor 1. 定位 灵活改变盒子在网页中的位…

如何屏蔽mac电脑更新提醒,禁止系统更新

最烦mac的系统更新提醒了&#xff0c;过几天就是更新弹窗提醒&#xff0c;现在可以直接禁掉了&#xff0c;眼不见心不乱&#xff0c;不然一升级&#xff0c;开发环境全都不能用了&#xff0c;那才是最可怕的&#xff0c;屏蔽的方法也很简单&#xff0c;就是屏蔽mac系统更新的请…

Rclone同步Linux数据到google云盘

文章目录 Rclone管理云存储Rclone安装和使用说明安装rclone配置rclone连接到云盘基本备份命令高级备份选项自动化备份加密备份&#xff08;可选&#xff09;恢复数据常见云存储服务名称注意事项 googleCloud 平台中操作OAuth权限请求页面&#xff08;OAuth同意屏幕&#xff09;…

AI人工智能-Jupyter NotbookPycharm:Py开发

安装 命令&#xff1a; pip install jupyter 启动 命令&#xff1a; jupyter notebook 启动成功后&#xff0c;下面网址会默认自动打开当前用户的根目录。 其实这个页面显示的内容&#xff0c;是我们电脑目录C:\Users\当前用户\下的文件夹 我们平常做实验&#xff0c;希望在…

DDR简介

一、什么是DDR&#xff1f; DDR SDRAM&#xff08;Double Data Rate Synchronous DYNAMIC RAM&#xff09;中文名是&#xff1a;双倍数据速率同步动态随机存储器。 传统的SDRAM只在时钟信号的上升沿传输数据&#xff0c;而DDR可以同时在时钟的上升沿和下降沿传输数据&#xf…

VRRP(虚拟路由器冗余协议)、虚拟路由器、master路由器、backup路由器

VRRP(虚拟路由器冗余协议) 1、介绍 虚拟路由冗余协议 VRRP (Virtual Router Redundancy Protocol)通过把几台路由设备联合组成一台虚拟的路由设备&#xff0c;将虚拟路由设备的IP地址作为用户的默认网关实现与外部网络通信。当网关设备发生故障时&#xff0c;VRRP机制能够选举…

多模态RAG实践:如何高效对齐不同模态的Embedding空间?

目录 多模态RAG实践&#xff1a;如何高效对齐不同模态的Embedding空间&#xff1f; 一、为什么需要对齐Embedding空间&#xff1f; 二、常见的对齐方法与关键技术点 &#xff08;一&#xff09;对比学习&#xff08;Contrastive Learning&#xff09; &#xff08;二&#…