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

新版Servlet3.0~5.0和旧版配置的区别

简介:讲解新版Servlet和旧版Servlet配置的区别

  • 旧版Servlet,在xml⾥面配置类目和路路径,⽐较不方便
  • 新版Servelt,也就是3.0之后,⽀支持注解的方式

配置项:

String name() default "";

  • 作用:为 Servlet 指定一个名称。如果不指定,默认使用 Servlet 的完整类名作为名称。

  • 意义

    • Servlet 名称可以在 ServletContext 的相关方法中引用(如 getServletRegistration)。
    • 可以通过名称明确标识不同的 Servlet
package com.gaze;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//不指定名称,以Servlet完整类名做路径
@WebServlet(urlPatterns = "/user")
public class UserServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        System.out.println("Servlet init");
    }

    @Override
    public void destroy() {
        System.out.println("Servlet destroy");
    }

    //用于处理客户端发起的 GET 请求。
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doget");
        //设置 HTTP 响应的内容类型为 HTML,并指定字符编码为 UTF-8。
        resp.setContentType("text/html;charset=utf-8");
      //获取响应对象的输出流,用于向客户端发送文本数据。
        resp.getWriter().write("<h1>你好</h1>");
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        super.service(req, res);
    }
}

String[] urlPatterns() default {};

  • 作用:指定 Servlet 的 URL 映射路径,可以配置多个路径。

  • 使用说明

    • 路径必须以 / 开头。
    • 可以支持通配符,例如:
      • /user/* 匹配以 /user/ 开头的所有路径。
      • *.do 匹配所有以 .do 结尾的路径。
package com.gaze;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
如果访问/user1和/user2都映射该类,记住需要/开头
@WebServlet(urlPatterns = {"/user1","/user2"})
public class UserServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        System.out.println("Servlet init");
    }

    @Override
    public void destroy() {
        System.out.println("Servlet destroy");
    }

    //用于处理客户端发起的 GET 请求。
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doget");
        //设置 HTTP 响应的内容类型为 HTML,并指定字符编码为 UTF-8。
        resp.setContentType("text/html;charset=utf-8");
      //获取响应对象的输出流,用于向客户端发送文本数据。
        resp.getWriter().write("<h1>你好</h1>");
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        super.service(req, res);
    }
}

String[] value() default {};

  • 作用:指定 Servlet 的 URL 映射路径,和 urlPatterns 属性功能相同,但不能同时使用。

  • 注意

    • URL 路径必须以 / 开头。
    • valueurlPatterns 的别名,但两者不能同时配置,否则编译器报错。
package com.gaze;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(value = {"/user1","/user2"})
public class UserServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        System.out.println("Servlet init");
    }

    @Override
    public void destroy() {
        System.out.println("Servlet destroy");
    }

    //用于处理客户端发起的 GET 请求。
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doget");
        //设置 HTTP 响应的内容类型为 HTML,并指定字符编码为 UTF-8。
        resp.setContentType("text/html;charset=utf-8");
      //获取响应对象的输出流,用于向客户端发送文本数据。
        resp.getWriter().write("<h1>你好</h1>");
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        super.service(req, res);
    }
}

int loadOnStartup() default -1;

  • 作用:定义 Servlet 的加载顺序,决定 Servlet 是在应用启动时加载还是在第一次请求时加载。

  • 值的意义

    • 负数(默认值):懒加载模式(Lazy Loading),在第一次请求到达时加载 Servlet。
    • 0 或正数
      • 表示启动应用时立即加载。
      • 数字越小,加载优先级越高。
package com.gaze;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(value = {"/user1","/user2"} ,loadOnStartup = 1)
public class UserServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        System.out.println("Servlet init");
    }

    @Override
    public void destroy() {
        System.out.println("Servlet destroy");
    }

    //用于处理客户端发起的 GET 请求。
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("doget");
        //设置 HTTP 响应的内容类型为 HTML,并指定字符编码为 UTF-8。
        resp.setContentType("text/html;charset=utf-8");
      //获取响应对象的输出流,用于向客户端发送文本数据。
        resp.getWriter().write("<h1>你好</h1>");
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        super.service(req, res);
    }
}

WebInitParam[] initParams() default {};

  • 作用:为 Servlet 配置初始参数,替代 web.xml 中的 <init-param>

  • 使用场景

    • 初始化 Servlet 时设置一些固定的参数(如数据库连接信息)。
    • 通过 ServletConfig 对象的 getInitParameter 方法获取这些参数
@WebServlet(
    name = "ConfigServlet",
    urlPatterns = "/config",
    initParams = {
        @WebInitParam(name = "database", value = "MySQL"),
        @WebInitParam(name = "dbUser", value = "root")
    }
)
public class ConfigServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        String database = getServletConfig().getInitParameter("database");
        String dbUser = getServletConfig().getInitParameter("dbUser");
        System.out.println("Database: " + database + ", User: " + dbUser);
    }
}

 

boolean asyncSupported() default false;

  • 作用:指定 Servlet 是否支持异步操作模式。

  • 使用场景

    • 异步操作允许 Servlet 在主线程释放后继续处理请求,特别适用于耗时操作(如文件上传、大量计算、外部服务调用)。
    • 必须配合异步上下文(AsyncContext)使用。
@WebServlet(name = "AsyncServlet", urlPatterns = "/async", asyncSupported = true)
public class AsyncServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        AsyncContext asyncContext = req.startAsync();
        asyncContext.start(() -> {
            try {
                Thread.sleep(5000); // 模拟耗时操作
                resp.getWriter().write("Async operation completed!");
            } catch (Exception e) {
                e.printStackTrace();
            }
            asyncContext.complete();
        });
    }
}


http://www.kler.cn/a/397640.html

相关文章:

  • 详解map与multimap容器
  • Python常用魔术方法 (学习笔记)
  • sqli-labs靶场17-20关(每日四关)持续更新!!!
  • MySQL Online DDL
  • pytest在conftest.py中实现用例执行失败进行截图并附到allure测试报告
  • 【数据库系列】 Spring Boot 集成 Neo4j 的详细介绍
  • 算法练习:438. 找到字符串中所有字母异位词
  • 【Rust中的项目管理】
  • vue之axios根据某个接口创建实例,并设置headers和超时时间,捕捉异常
  • MySQL8 安装教程
  • 【网络安全面经】技术性问题
  • 大数据治理:构建高效数据生态的基石
  • 前端:HTML/CSS/JavaScript基础知识
  • 深入理解 source 和 sh、bash 的区别
  • 【jvm】分代年龄为什么是15次
  • C语言之链表操作
  • C语言第九周课——经典算法
  • 从系统崩溃到绝地反击:一次微服务存储危机的救赎
  • 在uniapp当中隐藏掉默认tabbar并且使用自己的tabbar
  • 查看解决端口占用,以及docker解决端口占用的原理
  • char* 指针转换与打印
  • 【MySQL】MySQL中的函数之JSON_REPLACE
  • Jmeter中的监听器(四)
  • 电动机三角型与星型的区别和接线方法图解
  • 新手小白学习docker第七弹------安装redis集群大厂面试
  • 从H3C和Dell官网下载OEM版VMware Esxi镜像攻略