02)java web项目 使用spi技术 去除web.xml
上一篇提到原理是使用了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相关推荐
- 《从零构建前后分离web项目》:开篇 - 纵观WEB历史演变
开篇 : 纵观WEB历史演变 在校学习和几年工作工作中不知不觉经历了一半的 WEB 历史演变.对近几年的发展比较了解,结合经验聊聊 WEB 发展历史. 演变不易,但也是必然,因为为人始终要进步. WE ...
- idea iu 2021 Mac版本的使用,如何创建java web项目,包括tomcat和web包
Java web系列文章目录 第一章 前端学习入门之idea iu 2021版本的使用 目录 Java web系列文章目录 前言 一.Java web是什么? 二.配置步骤 1.下载Tomcat服务器 ...
- eclipse导入java web项目_Eclipse中轻松导入web项目的方法
今天介绍的是Eclipse中轻松导入web项目的方法,相信通过了解Eclipse中轻松导入web项目的操作步骤,大家对Eclipse编程工具一定会有更多的了解的! Eclipse中轻松导入web项目的 ...
- web项目怎么连接云服务器,web项目怎么连接云服务器
web项目怎么连接云服务器 内容精选 换一换 通过内网连接云手机实例时,需要在租户VPC中创建一台弹性云服务器,作为连接云手机的跳板机器.若创建云手机服务器时未使用自定义网络,还需在云手机租户的VPC ...
- JAVA外卖项目第一天 技术选型和包结构
瑞吉外卖-Day01 课程内容 软件开发整体介绍 瑞吉外卖项目介绍 开发环境搭建 后台登录功能开发 后台退出功能开发 1. 软件开发整体介绍 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发 ...
- python web项目源码下载_python web 源码范例
分享一个自己写的,一个简单的python django web小项目: 项目名称:站点状态监控系统 编写技术:django+js+html+h-ui admin 开发工具:vscode+mysql p ...
- HTML5的web开发,基于Html5技术的WEB开发
摘 要:HTML是互联网上应用最广泛的语言,得到了业界大力支持,已经成为WEB发展的标准.它强大了对多媒体的支持力度和远程与本地对数据的处理能力,本文对HTML5的新特性进行了总结,分析了该语言在移动 ...
- 《Web项目实践》实验报告——Web项目实践基础
一.实验目的 掌握Web前端开发的基础知识: 掌握Web前端工程开发的基本流程: 二.实验内容 1.使用VSCode开发工具完成"青木商城"网站个人中心页面和订单支付确认页面的编写 ...
- java无框架开发,DON: java 小型web项目快速开发框架,实现无配置,直接关注业务开发.主要解决请求分发解析...
#DON框架介绍 ##目标 启动零配置快速进入开发 开发时,请求controller路由零配置 配合windfly.jar工具包快速开发 最终实现加入jar包即可快速开发 ##主要特点 无需配置请求u ...
最新文章
- php中magic_quotes_gpc对unserialize的影响
- Java虚拟机字节码指令概述
- SICStus Prolog 3.10.0正式版下载
- 我理解的HBSE应用场景(交流篇)
- python怎么调用局部变量_python基础:局部变量--全局变量的使用
- PHP(四)——性能优化
- holer实现外网访问内网数据库
- Kernel中如何操作CPU及外设寄存器
- Windows自动删除n天前的文件的批处理脚本
- 两个not exists_分享两个冷门但又超实用的 Vim 使用技巧!
- 转载AWS 基础知识
- HDU 5046 Airport ( Dancing Links 反复覆盖 )
- pgAdmin 3 编译安装
- 解决Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)问题
- Visual studio2022“无法生成.exe文件,系统找不到指定文件
- 安卓点击跳转到微信公众号
- 微信小程序服务器该如何选择
- ubuntu18安装详细教程
- rpm常用命令汇总 -- 安装,升级,查询,验证,卸载
- 【读书】格鲁夫给经理人的第一课-工作成熟度