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

Javaweb - 10.2 Servlet

目录

servlet-api.jar 导入问题

Content-Type 响应头的问题

Servlet 映射细节

@WebServlet 注解使用

完!


servlet-api.jar 导入问题

在上篇文章中,我们的 service 方法直接 extends 了 HttpServlet

追根溯源,可以发现,HttpServlet 也是实现了 Servlet 接口

这个 Servlet 接口,并非是我们下载的基础类库 jdk 中的配置

是在 一个 servlet.jar 的 jar 包中的

此时进行思考,jar 包的导入,我们前面不是提到过吗?

应该在 WEB-INF 中创建一个 lib 文件夹,然后将需要的 jar 包导入进去即可~ 但我们上篇在这个项目中,并没有导入 jar 包呀~ 为什么还可以正常找到 Servlet 这个接口呢?

但我们是在开始的时候,project setting 中的 Dependency 中 导入了 Tomcat 依赖~

其实是:servlet-api,仅是在编码的时候需要,当运行的时候,在服务器的环境中,由服务软件(Tomcta)提供。因此,我们的 Javaweb 项目中,在打包 / 构建的过程中,无需携带 servlet-api 的 jar 包

Content-Type 响应头的问题

我们的上个 Javaweb 工程中,在点击“校验”按钮后,会运行 userServlet 的代码,然后做出响应给浏览器。我们在浏览器中打开 F12 的开发者模式

在响应报文中,我们并没有找到 Content-Type 这一属性~

==》

即,如果我们没有手动设置 Content-Type,其默认属性是 html

流程如下图:

下面是在 tomcat 文件夹 conf/web.xml 中,对 html png 进行的查找~

可见,tomcat 的 con/web.xml 中包含着绝大部分我们文件类型对应的 Content-Type

我们希望浏览器以什么形式来解析我们的响应,应该在响应中头,手动设置 Content-Type 的值

因为 Content-Type 的重要性,也专门为其设置了一个 API

Servlet 映射细节

为了方便介绍,我们再创建一个 Servlet 类

因不需要其实现什么功能,则仅输出一句话即可~

package com.zzz.servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;/** @author zzr* @date: 2025/07/04  16:33* @description: 测试 servlet 注解*/
public class servlet1 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("servlet1 执行了");}
}

然后为这个 servlet1 配置环境,在 web.xml 中进行配置 servlet 和 servlet-mapping

在打印的地方打一个断点,然后运行项目

在 url 后面配置上我们刚刚的路径 s1

发现代码卡在断点处,继续向下运行,打印出了“servlet1 执行了”

过程如下图所示:

通过反射获取字节码,反射执行 servlet 代码~


一个 servlet-name 可以同时对应多个 url-pattern

一个 servlet 标签,也可以同时对应多个 servlet-mapping


url-pattern 

        1. 精确匹配

                /servlet1

        2. 模糊匹配

                * 作为通配符,* 在哪里,哪里就是模糊的

                / :匹配全部,不包括 jsp 文件

                /* :匹配全部,包括 jsp 文件

                /a/*:匹配前缀,后缀模糊

                *.action:匹配后缀,前缀模糊

@WebServlet 注解使用

我们可以在 servlet 类的前面,使用 @WebServlet 注解,来替换掉 Servlet 配置:

注意:使用了 @WebServlet 注解的话,就不要在 web.xml 中再进行配置了~

我们可以看一下 WebServlet 中的接口,其实际的代码是需要下载 jar 包才可查看的,这里是一些反字节码文件~

也可以配置多个映射路径:

完!

http://www.dtcms.com/a/266868.html

相关文章:

  • 【51单片机倒计时选位最右侧2位显示秒钟后最左侧1位显示8两秒后复位初始状态2个外部中断组合按键功能】2022-7-5
  • 数据库位函数:原理、应用与性能优化
  • Nuxt 3 面试题合集(中高级)
  • 在 C++ 中,判断 `std::string` 是否为空字符串
  • 【贪心】P2660 zzc 种田
  • Rust 中的返回类型
  • 指数分布的Python计算与分析
  • 微服务架构下的抉择:Consul vs. Eureka,服务发现该如何选型?
  • 简单 Python 爬虫程序设计
  • 递推|递归|分治
  • Python 办公实战:用 python-docx 自动生成 Word 文档
  • 【ROS2 自动驾驶学习】01-工具链的安装
  • 过滤器应用
  • MySQL分布式ID冲突详解:场景、原因与解决方案
  • Hive UDF 开发实战:MD5 哈希函数实现
  • 每周资讯 | Krafton斥资750亿日元收购日本动画公司ADK;《崩坏:星穹铁道》新版本首日登顶iOS畅销榜
  • 只出现一次的数字2
  • 暴雨服务器成功中标华中科技大学集成电路学院服务器采购项目
  • HarmonyOS免密认证方案 助力应用登录安全升级
  • 使用 DigitalPlat 免费搭配 Cloudflare Tunnel 实现飞牛系统、服务及 SSH 内网穿透教程
  • 计算机视觉---RealSense深度相机技术
  • 【C++类和对象解密】面向对象编程的核心概念(中)
  • Android Studio-Git的使用指南
  • 金融平衡术:创新与合规的突围之路
  • Word和Excel批量转PDF新方法,操作简单
  • 仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器
  • RabbitMQ 高级特性之死信队列
  • VS CodeC51 单片机开发环境搭建
  • 猫头虎 AI工具分享:一个网页抓取、结构化数据提取、网页爬取、浏览器自动化操作工具:Hyperbrowser MCP
  • Web前端工程化