上一篇提到原理是使用了java的SPI技术

java web项目是在容器运行,如tomcat,weblogic等

了解Tomcat的SPI机制
Tomcat容器在启动时会扫描项目中META-INF/service下面的javax.servlet.ServletContainerInitializer文件,文件中配置实现了ServletContainerInitializer接口的启动类,利用这一特性,我们可以去除掉web.xml,在容器启动是配置我们自己的启动类。

Servlet必须是3.0及其以上的版本

下面我们使用tomcat的这一特性 ,去除web.xml

1.新建maven web测试

创建完毕,默认web项目是有web.xml文件的,直接删除web.xml文件

2.pom.xml引入 servlet-api.jar

引入 servlet-api.jar scope设置为provided
    不会打包到项目lib,项目在tomcat运行时 tomcat lib下已经有servlet-api.jar
    如果开发阶段不引入servlet-api.jar ,包下的javax.servlet.ServletContainerInitializer 类找不到,无法实现该类

3.新建一个类实现servlet-api.jarx包下的javax.servlet.ServletContainerInitializer类

package com.wying.Web;import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;import java.util.Set;/*** description:实现servlet-api.jar包下的javax.servlet.ServletContainerInitializer class* 重写onStartup方法 通过该方法配置 servlet 监听 等 代替 web.xml配置* date: 2021/3/5* author: gaom* version: 1.0*/public class MyServletContainerInitializer implements ServletContainerInitializer {@Overridepublic void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {System.out.println("MyServletContainerInitializer  onStartup");}
}

4.META-INF/service下新建javax.servlet.ServletContainerInitializer并编辑配置实现类com.wying.Web.MyServletContainerInitializer

5.配置tomcat 部署web项目

6.启动tomcat,控制台打印出

==============MyServletContainerInitializer  onStartup=========

证明我们配置的spi已经生效,tomcat启动时已读取META-INF/service下面的javax.servlet.ServletContainerInitializer文件,并执行实现类的onStartup方法

7.浏览器访问项目测试

访问http://127.0.0.1:8082/JavaWebNoWebxmDemo/,成功读取到webapps默认的index.jsp文件

7.编写servlet,然后在onStartup方法中配置servlet ,代替web.xml配置

查看servletContext方法 , web.xml支持的配置,它肯定要支持,不然怎么取代web.xml..... 添加过滤器,监听器,servlet等方法都有

编写servlet

TestServlet

package com.wying.servlet;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** description:测试servlet 由于去除web.xml文件 该servlet在MyServletContainerInitializer 配置* date: 2021/3/5* author: gaom* version: 1.0*/
public class TestServlet extends HttpServlet {@Overridepublic void init() throws ServletException {System.out.println("=========TestServlet.init()=========");super.init();}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("=========TestServlet.doGet()=========");response.getWriter().write("TestServlet");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("=========TestServlet.doPost()=========");doGet(request, response);}
}

onStartup配置servlet

package com.wying.Web;import com.wying.servlet.TestServlet;import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;import java.util.Set;/*** description:实现servlet-api.jar包下的javax.servlet.ServletContainerInitializer class* 重写onStartup方法 通过该方法配置 servlet 监听 等 代替 web.xml配置* date: 2021/3/5* author: gaom* version: 1.0*/public class MyServletContainerInitializer implements ServletContainerInitializer {@Overridepublic void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {System.out.println("==============MyServletContainerInitializer  onStartup=========");ServletRegistration.Dynamic testServlet=servletContext.addServlet("testServlet",new TestServlet());testServlet.addMapping("/testServlet");}
}

8.启动项目测试

浏览器访问servlet http://127.0.0.1:8082/JavaWebNoWebxmDemo/testServlet

第一次访问会执行 int初始化函数,并访问doGet(),后续不在执行init ,和web.xml配置的效果一样

监听器之类的配置查查文档都能配,但是我们实际上java web项目的spring框架都成标配,下一步学习sprng web项目无xml配置

02)java web项目 使用spi技术 去除web.xml相关推荐

  1. 《从零构建前后分离web项目》:开篇 - 纵观WEB历史演变

    开篇 : 纵观WEB历史演变 在校学习和几年工作工作中不知不觉经历了一半的 WEB 历史演变.对近几年的发展比较了解,结合经验聊聊 WEB 发展历史. 演变不易,但也是必然,因为为人始终要进步. WE ...

  2. idea iu 2021 Mac版本的使用,如何创建java web项目,包括tomcat和web包

    Java web系列文章目录 第一章 前端学习入门之idea iu 2021版本的使用 目录 Java web系列文章目录 前言 一.Java web是什么? 二.配置步骤 1.下载Tomcat服务器 ...

  3. eclipse导入java web项目_Eclipse中轻松导入web项目的方法

    今天介绍的是Eclipse中轻松导入web项目的方法,相信通过了解Eclipse中轻松导入web项目的操作步骤,大家对Eclipse编程工具一定会有更多的了解的! Eclipse中轻松导入web项目的 ...

  4. web项目怎么连接云服务器,web项目怎么连接云服务器

    web项目怎么连接云服务器 内容精选 换一换 通过内网连接云手机实例时,需要在租户VPC中创建一台弹性云服务器,作为连接云手机的跳板机器.若创建云手机服务器时未使用自定义网络,还需在云手机租户的VPC ...

  5. JAVA外卖项目第一天 技术选型和包结构

    瑞吉外卖-Day01 课程内容 软件开发整体介绍 瑞吉外卖项目介绍 开发环境搭建 后台登录功能开发 后台退出功能开发 1. 软件开发整体介绍 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发 ...

  6. python web项目源码下载_python web 源码范例

    分享一个自己写的,一个简单的python django web小项目: 项目名称:站点状态监控系统 编写技术:django+js+html+h-ui admin 开发工具:vscode+mysql p ...

  7. HTML5的web开发,基于Html5技术的WEB开发

    摘 要:HTML是互联网上应用最广泛的语言,得到了业界大力支持,已经成为WEB发展的标准.它强大了对多媒体的支持力度和远程与本地对数据的处理能力,本文对HTML5的新特性进行了总结,分析了该语言在移动 ...

  8. 《Web项目实践》实验报告——Web项目实践基础

    一.实验目的 掌握Web前端开发的基础知识: 掌握Web前端工程开发的基本流程: 二.实验内容 1.使用VSCode开发工具完成"青木商城"网站个人中心页面和订单支付确认页面的编写 ...

  9. java无框架开发,DON: java 小型web项目快速开发框架,实现无配置,直接关注业务开发.主要解决请求分发解析...

    #DON框架介绍 ##目标 启动零配置快速进入开发 开发时,请求controller路由零配置 配合windfly.jar工具包快速开发 最终实现加入jar包即可快速开发 ##主要特点 无需配置请求u ...

最新文章

  1. php中magic_quotes_gpc对unserialize的影响
  2. Java虚拟机字节码指令概述
  3. SICStus Prolog 3.10.0正式版下载
  4. 我理解的HBSE应用场景(交流篇)
  5. python怎么调用局部变量_python基础:局部变量--全局变量的使用
  6. PHP(四)——性能优化
  7. holer实现外网访问内网数据库
  8. Kernel中如何操作CPU及外设寄存器
  9. Windows自动删除n天前的文件的批处理脚本
  10. 两个not exists_分享两个冷门但又超实用的 Vim 使用技巧!
  11. 转载AWS 基础知识
  12. HDU 5046 Airport ( Dancing Links 反复覆盖 )
  13. pgAdmin 3 编译安装
  14. 解决Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)问题
  15. Visual studio2022“无法生成.exe文件,系统找不到指定文件
  16. 安卓点击跳转到微信公众号
  17. 微信小程序服务器该如何选择
  18. ubuntu18安装详细教程
  19. rpm常用命令汇总 -- 安装,升级,查询,验证,卸载
  20. 【读书】格鲁夫给经理人的第一课-工作成熟度

热门文章

  1. 耳机原理图及放大原理原理图。
  2. matlab 极限环,ODE in MATLAB
  3. 机器学习学习笔记(一)绪论
  4. 商丘市计算机学校网站,2020年河南省商丘市计算机学校高三语文月考试题.docx
  5. 字符串最大跨距 (c++)
  6. 计算机中磁盘管理恢复分区,电脑磁盘修复
  7. Selenium 详细教程
  8. 在conda中安装pytorch
  9. 分布式任务调度框架(Temporal)介绍
  10. 深度学习(1)—从ImageNet下载图片