闲聊servlet的常见注册方式

大家好,我是G探险者。
servlet大家都不陌生,当开发 Web 应用程序时,注册 Servlet 是一个常见的任务,因为 Servlet 是处理 HTTP 请求和生成 HTTP 响应的核心组件之一。在不同的开发环境和框架中,有多种方法可以注册 Servlet。本文将介绍一些常见的 Servlet 注册方法,会依据技术的演变方向来介绍,包括在传统的 Servlet 规范、Spring 框架、Eclipse Jetty、Spring Boot 和其他一些技术中的注册方法。

1. 传统的 Servlet 规范

1.1 使用 web.xml 配置

在传统的 Servlet 2.5/3.0 规范中,您可以使用 web.xml 配置文件来注册 Servlet。以下是一个示例:

<servlet><servlet-name>myServlet</servlet-name><servlet-class>com.example.MyServlet</servlet-class>
</servlet><servlet-mapping><servlet-name>myServlet</servlet-name><url-pattern>/myservlet</url-pattern>
</servlet-mapping>

在这个示例中,我们定义了一个名为 myServlet 的 Servlet,并将其映射到 /myservlet 路径。您需要在 web.xml 中为每个 Servlet 提供类名和 URL 映射。

1.2 使用 Servlet 注解

Servlet 3.0 规范引入了注解,允许在 Servlet 类上使用 @WebServlet 注解来配置 Servlet,并指定它们的 URL 映射路径。这种方式更加便捷和简洁,不需要使用 web.xml 文件。

@WebServlet("/myservlet")
public class MyServlet extends HttpServlet {// Servlet code here
}

2. Spring 框架

Spring 框架为 Servlet 注册提供了不同的方式,允许将 Servlet 集成到 Spring 应用程序中。

2.1 使用 XML 配置

在传统的 Spring Web 应用程序中,您可以使用 Spring XML 配置文件来注册 Servlet。以下是一个示例:

<bean id="myServlet" class="com.example.MyServlet" /><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="urlMap"><map><entry key="/myservlet/**" value-ref="myServlet" /></map></property>
</bean>

在这个示例中,我们创建了一个名为 myServlet 的 Servlet bean,并通过 SimpleUrlHandlerMapping 将其映射到 URL 路径 /myservlet/**

2.2 使用 配置类 配置

使用 Spring 的 @Configuration注解以配置类的编程方式注册 Servlet。以下是一个示例:

@Configuration
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {return null;}@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{MyServlet.class};}@Overrideprotected String[] getServletMappings() {return new String[]{"/myservlet/*"};}
}

在这个示例中,我们通过扩展 AbstractAnnotationConfigDispatcherServletInitializer 类,并覆盖相应的方法,以编程方式注册了 MyServlet

3. Eclipse Jetty

3.1 使用 ServletHolder

如果您使用 Eclipse Jetty 作为 Servlet 容器,可以使用 ServletHolder 类来注册 Servlet。以下是一个示例:

import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.servlet.ServletContextHandler;public class Main {public static void main(String[] args) {org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server(8080);ServletContextHandler context = new ServletContextHandler();context.setContextPath("/");ServletHolder servletHolder = new ServletHolder(new MyServlet());context.addServlet(servletHolder, "/myservlet");server.setHandler(context);try {server.start();server.join();} catch (Exception e) {e.printStackTrace();}}
}

在这个示例中,我们创建了一个 ServletContextHandler,然后使用 ServletHolder 来注册了 MyServlet,并将其映射到 /myservlet 路径。

4. Spring Boot

4.1 使用 ServletRegistrationBean

如果您使用 Spring Boot 构建应用程序,可以使用 ServletRegistrationBean 来注册 Servlet。以下是一个示例:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}@Beanpublic ServletRegistrationBean<MyServlet> servletRegistrationBean() {return new ServletRegistrationBean<>(new MyServlet(), "/myservlet");}
}

在这个示例中,我们创建了一个 ServletRegistrationBean 并将 MyServlet 注册到了 /myservlet 路径。

5. 其他技术

5.1 Jersey 框架

如果您构建的是 RESTful Web 服务,并使用 Jersey 作为 JAX-RS 实现,您可以通过 Jersey 的配置来注册 Servlet。通常,您需要在 web.xml 中配置 Jersey 的 ServletContainer,并将其映射到特定的 URL。

<servlet><servlet-name>jersey-servlet</servlet-name><servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
</servlet><servlet-mapping><servlet-name>jersey-servlet</servlet-name><url-pattern>/api/*</url-pattern>
</servlet-mapping>

6. 特点对比

注册方法适用环境集成 Spring Boot配置方式生命周期管理灵活性
传统的 Servlet 规范传统的 Java EE 应用程序web.xml 配置手动管理较低
使用 @WebServlet 注解传统的 Java EE 应用程序注解配置自动管理适中
Spring 框架Spring 应用程序XML 或 JavaSpring 容器管理
使用 XML 配置Spring 应用程序XML 配置Spring 容器管理适中
使用 Java 配置Spring 应用程序Java 配置Spring 容器管理
Eclipse JettyJetty Servlet 容器Java 配置手动管理较高
使用 ServletHolderJetty Servlet 容器Java 配置手动管理
Spring BootSpring Boot 应用程序Java 配置Spring Boot 管理
使用 ServletRegistrationBeanSpring Boot 应用程序Java 配置Spring Boot 管理
其他技术不同技术栈视情况而定不同方式视情况而定视情况而定

上表总结了常见的 Servlet 注册方法的主要特点和区别。根据您的应用程序类型、技术栈和需求,可以选择合适的注册方法。传统的 web.xml 配置适用于传统的 Java EE 应用程序,而使用注解和 Spring 配置更适合于 Spring 应用程序。Jetty 和 Spring Boot 提供了更现代的注册方法,更好地集成和管理 Servlet。最终的选择取决于您的项目要求和个人偏好。

6.1 ServletHolder 和 ServletRegistrationBean 有啥区别?
特点ServletHolderServletRegistrationBean
适用环境Jetty 中的 Servlet 容器Spring Boot Web 应用程序
集成 Spring Boot不适用
配置方式Java 代码配置声明性配置,属性文件或Java配置类
注册 Servlet需要手动创建 Servlet 实例声明 Servlet 类型并配置属性
灵活性提供更细粒度的控制提供更高级别的抽象和自动化配置
嵌入式容器中的使用
生命周期管理需要手动管理 Servlet 的生命周期由 Spring Boot 自动管理
与 Spring 生态系统集成较少集成度与 Spring Boot 高度集成

请根据您的具体需求和使用情况来选择适合您的方法。如果您正在构建一个 Spring Boot 应用程序,并且希望利用 Spring Boot 的自动化配置和生态系统集成,那么ServletRegistrationBean通常是更合适的选择。但如果您使用 Jetty 作为 Servlet 容器,或者需要更多细粒度的控制,那么ServletHolder可能更适合您的情况。

以上是对servlet的注册方式的梳理,希望本文能够帮助到您,喜欢就一键三联吧

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

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

相关文章

Table.Group系列_第4参数为全局的情况下,利用第5参数进行分组汇总

原始数据: 部门与职位存在于同一列中 实现功能: 根据筛选条件,可对部门或职位进行统计汇总第一列列名根据筛选自动变更,显示当前统计的维度 实现方式: 1. 构建筛选器内容 在任意空白单元格内输入需要筛选的内容 2. 插入"组合框"控件,并进行相应设置 从开发工具…

麒麟系统加密/麒麟系统防泄密

​深信达网络科技有限公司自主研发的深信达主机加固系统软件V2.0、深信达沙盒防泄密系统软件V5.0&#xff0c;与麒麟软件完成兼容认证&#xff0c;并被纳入麒麟软件安全生态联盟成员之一。 麒麟软件主要面向通用和专用领域打造安全创新操作系统产品和相应解决方案&#xff0c;以…

GitHub详细教程

将代码推送到GitHub仓库涉及一系列的步骤。以下是详细的步骤说明&#xff1a; 创建一个新的仓库&#xff08;如果还没有的话&#xff09;&#xff1a; 访问 GitHub。登录您的帐户。点击页面右上角的图标&#xff0c;然后选择“New repository”。填写仓库名称、描述等信息&…

Matlab矩阵——矩阵行列互换

问题&#xff1a;如何将 1*n 的矩阵转换为指定 M*N 的矩阵&#xff0c;或者将 M*N 的矩阵转换为 1*n 的矩阵&#xff1f; 处理方法&#xff1a;使用 reshape 函数进行矩阵的行列互换 分两种情况如下&#xff1a; 一、将 1*n 的矩阵转换为指定 M*N 的矩阵 假如有4个坐标值&a…

大型语言模型:DistilBERT — 更小、更快、更便宜、更轻

一、介绍 近年来&#xff0c;大型语言模型的演进速度飞速发展。BERT成为最流行和最有效的模型之一&#xff0c;可以高精度地解决各种NLP任务。在BERT之后&#xff0c;一组其他模型随后出现在现场&#xff0c;也展示了出色的结果。 很容易观察到的明显趋势是&#xff0c;随着时间…

推荐开源工具带带弟弟ocr_ddddocr_各种验证码都可以识别_滑动_点击_等等---验证码识别工作笔记001

这个很强大了,常见的各种验证码都可以识别,如果你项目上也有需要,比如需要实现系统的自动登录,这个时候就很有用了,这里仅仅给出方案,具体如何用,用的时候在做研究吧,好东西要记录,分享给需要的人.使用的时候 自己去查一下如何使用非常简单. 支持点击的验证码,支持数字验证码就…

Three.js

定义&#xff1a; three,js,一WebGL引擎&#xff08;也叫库&#xff09;&#xff0c;基于javaScript,可直接运行GPU驱动游戏与图形驱动应用于浏览器。其库提供大量特性与API以绘制3D场景于浏览器。 WebGL:Web图形库&#xff0c;一组浏览器的API,可以无需其他插件&#xff0c;独…

【C++】哈希

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a; C学习 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最大…

rust cfg的使用

前提是一个crate倒入另一个crate。 先看结构 test_lib目录结构 这与另一个crate处于同一个目录,所以另一crate倒入的时候在Cargo.toml中使用如下语句。 test_lib = {path = "../test_lib" }先在test_lib/src/abc/abc.rs中添加没有cfg的两个函数做测试。 pub fn…

GitHub访问慢解决办法

找到C盘目录 C:/Windows/system32/drivers/etc/hosts修改hosts文件内容&#xff0c;尾部复制粘贴 199.232.69.194 github.global.ssl.fastly.net 140.82.112.4 www.github.com 185.199.108.153 assets-cdn.github.com 185.199.109.153 assets-cdn.github.com 185.199.110.153…

ViewModifier/视图修饰符, ButtonStyle/按钮样式 的使用

1. ViewModifier 视图修饰符 1.1 创建默认按钮视图修饰符 ViewModifierBootcamp.swift import SwiftUI/// 默认按钮修饰符 struct DefaultButtonViewModifier: ViewModifier{let bcakgroundColor: Colorfunc body(content: Content) -> some View {content.foregroundColor…

流式数据湖平台Hudi核心概念三:索引

1.索引 Hudi通过索引机制将给定的hoodie key(record key+分区路径)映射到文件id,实现了高效的upstart。一旦将记录的第一个版本写入文件,record key和文件组/文件id之间的映射就永远不会改变。简而言之,映射的文件组包含一组记录的所有版本。 对于Copy-On-Write表,可以实…

C/C++之自定义类型(结构体,位段,联合体,枚举)详解

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 个人主页&#xff1a;点我进入主页 …

css 滚动贴合

大部分人基本上都会使用JS实现页面的滚动贴合效果&#xff0c;在学习的过程中&#xff0c;偶然发现原生CSS实现滚动贴合效果的方法&#xff1b; html 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><tit…

Linux系统导入导出docker容器的sql数据

Linux系统导入导出docker容器的sql数据 一 要从Docker容器中将数据库导出到本地 确保您已经安装了Docker&#xff0c;并且已经运行了包含数据库的Docker容器。 检查容器中运行的数据库服务的名称或容器ID。您可以使用命令 docker ps 来列出正在运行的容器和相关信息。 使用…

MySQL 安装+启动+报错的解决方案

目录 一、安装准备 1.1 下载 1.2 版本说明 二、安装步骤 2.1 解压缩 2.2 配置环境变量 2.3 配置文件 2.4 安装 2.5 启动/停止服务 三、使用说明 3.1 用户名密码登录 3.1 设置用户名密码 四、卸载步骤 4.1 卸载服务 五、安装问题 六、启动问题 6.1 提示【服务无…

web基础和http协议

1.DNS解析的三种方式 DNS解析&#xff1a; 网站都是域名&#xff1a;dns解析的作用是把域名解析成ip地址 迭代&#xff1a;从跟域名到二级域 返回用户的过程&#xff1a;递归---运营商--本地hosts---用户 三种方式&#xff1a; /etc/hosts 本地解析&#xff0c;速度最快&…

JAVA 泛型的定义以及使用

泛型类 /*** <T> 为该类定义泛型&#xff0c;可以是一个或多个<T,...>* 定义的泛型可以在类中作为&#xff1a;* 类变量类型&#xff1a; T data* 类方法的入参以及返回类型 public void setData(T data)&#xff0c;public T getData();次数以set&a…

岩土工程安全监测无线振弦采集仪在无线组网的关键要点

岩土工程安全监测无线振弦采集仪在无线组网的关键要点 岩土工程是一种奇特而又极其重要的工程。它涉及到土地、岩石、气候等等因素&#xff0c;需要重视安全因素。而无线振弦采集仪作为一种常用的监测设备&#xff0c;可以采集岩土工程中的振动数据&#xff0c;从而确保工程的…

智慧安防AI视频智能分析云平台EasyCVR加密机授权小tips

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…