日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

02)java web项目 使用spi技术 去除web.xml

發布時間:2024/3/26 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。