javaweb--04

张开发
2026/6/10 4:51:06 15 分钟阅读
javaweb--04
一、Servlet 基础概念1. 核心定义Servlet 是 Java 提供的一门动态 web 资源开发技术用于生成动态网页内容。Servlet 是JavaEE 规范之一本质是一个接口我们需要自定义类实现 Servlet 接口由 web 服务器如 Tomcat来运行。官方定义A servlet is a small Java program that runs within a Web server.Servlet 是运行在 Web 服务器中的小型 Java 程序2. Servlet 快速入门步骤创建 web 项目导入 Servlet 依赖坐标pom.xmlxmldependency groupIdjavax.servlet/groupId artifactIdjavax.servlet-api/artifactId version3.1.0/version scopeprovided/scope /dependencyscopeprovided表示该依赖由 Tomcat 容器提供打包时不打入 war 包。定义类实现 Servlet 接口重写所有方法在service()中编写业务逻辑java运行WebServlet(/demo1) public class ServletDemo1 implements Servlet { Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println(servlet hello world~); } // 其他4个方法重写省略 }配置访问路径在类上使用WebServlet注解配置 Servlet 的访问路径访问测试启动 Tomcat浏览器输入 URL 访问http://localhost:8080/web-demo/demo13. Servlet 执行流程Servlet 由谁创建方法由谁调用Servlet 由web 服务器Tomcat创建Servlet 方法也由 web 服务器调用。服务器怎么知道 Servlet 一定有 service 方法因为自定义 Servlet 必须实现 Servlet 接口而 Servlet 接口中定义了service()方法服务器通过接口规范保证方法存在。二、Servlet 接口 5 大核心方法表格方法名作用调用时机调用次数void init(ServletConfig config)初始化方法Servlet 第一次被访问时默认实例化后调用1 次void service(ServletRequest req, ServletResponse res)提供服务方法每次 Servlet 被访问时多次void destroy()销毁方法内存释放 / 服务器关闭时Servlet 对象销毁前1 次ServletConfig getServletConfig()获取 ServletConfig 对象任意时刻用于获取 Servlet 配置信息按需调用String getServletInfo()获取 Servlet 信息任意时刻用于获取 Servlet 版本、作者等信息按需调用各方法详细说明1.init()初始化方法java运行Override public void init(ServletConfig config) throws ServletException { System.out.println(init...); }作用完成 Servlet 的初始化工作如加载配置文件、创建数据库连接等参数ServletConfigServlet 配置对象用于获取 Servlet 初始化参数2.service()服务方法java运行Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println(servlet hello world~); }作用处理客户端请求生成响应参数ServletRequest req封装 HTTP 请求信息ServletResponse res封装 HTTP 响应信息异常ServletExceptionServlet 异常、IOExceptionIO 异常3.destroy()销毁方法java运行Override public void destroy() { // 资源释放逻辑 }作用释放 Servlet 占用的资源如关闭连接、销毁对象等调用时机服务器正常关闭、Servlet 被卸载时三、Servlet 生命周期Servlet 运行在 Servlet 容器web 服务器中生命周期由容器管理分为 4 个阶段加载和实例化默认情况下当 Servlet第一次被访问时由容器创建 Servlet 对象初始化实例化后容器调用init()方法完成初始化只执行 1 次请求处理每次请求 Servlet 时容器调用service()方法处理请求执行多次服务终止服务器关闭 / 内存释放时容器调用destroy()方法释放资源之后实例被 JVM 垃圾回收loadOnStartup 配置控制实例化时机通过WebServlet注解的loadOnStartup属性修改 Servlet 实例化时机java运行WebServlet(urlPatterns /demo, loadOnStartup 1)负整数默认 -1第一次被访问时创建 Servlet 对象0 或正整数服务器启动时创建 Servlet 对象数字越小优先级越高四、Servlet 体系结构1. 继承体系plaintextServlet根接口 ↑ 实现 GenericServlet抽象实现类实现 Servlet 接口空实现部分方法 ↑ 继承 HttpServlet对 HTTP 协议封装的实现类专门用于处理 HTTP 请求2. HttpServlet 使用开发 B/S 架构的 Web 项目时我们自定义 Servlet 直接继承 HttpServlet无需直接实现 Servlet 接口。使用步骤继承 HttpServlet重写doGet()和doPost()方法分别处理 GET 和 POST 请求java运行WebServlet(/demo4) public class ServletDemo4 extends HttpServlet { Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理 GET 请求逻辑 } Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理 POST 请求逻辑 // 通常让 doPost 调用 doGet统一处理逻辑 doGet(req, resp); } }原理HttpServlet的service()方法会自动获取请求方式根据不同的请求方式GET/POST/PUT/DELETE 等调用对应的doGet()/doPost()/doPut()等方法简化了开发。五、关键补充1. Servlet 与 HTTP 请求方式直接实现 Servlet 接口时service()方法需要手动判断请求方式再做不同处理继承HttpServlet后由容器自动分发请求到对应doXxx()方法开发更高效2. 常见误区Servlet单实例一个 Servlet 类在容器中只会创建一个实例所有请求共享同一个对象因此要注意线程安全问题init()只执行一次适合做全局初始化不要在init()中处理请求service()每次请求都执行核心业务逻辑写在这里注意线程安全

更多文章