更新時間:2020-04-17 13:50:58 來源:動力節(jié)點(diǎn) 瀏覽2384次
1.JavaWeb模塊結(jié)構(gòu)
JSP文件和AXPX文件類似,路徑和URL一一對應(yīng),都會被動態(tài)編譯為單獨(dú)class。JavaWeb和ASP.NET的核心是分別是Servlet和IHttpHandler接口,因此無論是基礎(chǔ)的Page文件(JSP、ASPX)方式還是后來發(fā)展的MVC方式(SpringMVC、ASP.NETMVC)都是基于核心接口的基礎(chǔ)上再次封裝和擴(kuò)展(DispatcherServlet、MvcHandler)。
除JSP文件外,其他全部文件部署在應(yīng)用目錄的WEB-INF子目錄下,WEB-INF目錄可以認(rèn)為是ASP.NET中將web.config文件、bin目錄和App_開頭的運(yùn)行時目錄存放在了一個統(tǒng)一的根目錄中。
JavaWeb的配置文件web.xml也存放在WEB-INF目錄下,而ASP.NET的配置文件web.config一般直接存放在應(yīng)用目錄下(ASP.NET其他目錄同樣可以有web.config文件)。ASP.NET將所有的引用和代碼生成的dll都部署在bin中,而JavaWeb的引用jar和生成的class分別存放在WEB-INF的子目錄lib和classes中(參考1)。
綜上,類似ASP.NET中的web.config、bin、App_Data等,JavaWeb中的WEB-INF、web.xml、lib和classes是我們必須了解和掌握的。
|--AssemblyRoot
|---WEB-INF/
|--web.xml
|--lib/
|--classes/
WEB-INF目錄:JavaWeb文件的根目錄。
web.xml文件:配置文件(asp.netweb.config)。
lib目錄:存放類庫文件(asp.netbin)。
classes目錄:存放class文件(asp.netbin)。
servlet基礎(chǔ)
正如ASP.NET的核心是IHttpHandler一樣,JavaWeb的核心是Servlet接口,位于javax.servlet命名空間中。Filter的概念可以參考ASP.NET的HttpModule,Servlet中的各種Listener可以參考ASP.NETHttpApplicaiton中類似的event。無論是Java還是.NET的Web技術(shù),都是基于HTTP協(xié)議的具體實(shí)現(xiàn)。JavaWeb和ASP.NET中的一些核心項(xiàng)對應(yīng)如下:
Servlet和ASP.NET的簡化示意圖:
用于簡化web.xml配置的Servlet的注解(3.0開始支持,在ASP.NET中沒有對應(yīng)項(xiàng)):
(1)WebServlet:作用在javax.servlet.http.HttpServlet的實(shí)現(xiàn)類上。
(2)WebFilter:作用在javax.servlet.Filter的實(shí)現(xiàn)類上。
(3)WebListener:作用在Listener的實(shí)現(xiàn)類上(javax.servlet.ServletContextListener、javax.servlet.ServletContextAttributeListener、javax.servlet.ServletRequestListener、javax.servlet.ServletRequestAttributeListener、javax.servlet.http.HttpSessionListener、javax.servlet.http.HttpSessionAttributeListener)。
(4)WebInitParam:結(jié)合WebServlet和WebFilter注解用來配置屬性。
(5)MultipartConfig:作用在javax.servlet.http.HttpServlet的實(shí)現(xiàn)類上。標(biāo)注請求是mime/multipart類型。
用于Servlet容器初始化的ServletContainerInitializer(可實(shí)現(xiàn)無web.xml,3.0開始支持,可類比ASP.NET的Application_Start方法):
(1)Servlet容器啟動時查找ServletContainerInitializer的實(shí)例。
(2)ServletContainerInitializer實(shí)例使用HandlesTypes標(biāo)注一個或多個類型,Servlet容器將在啟動時掃描classpath,獲取這些類型的實(shí)例。
(3)Servlet容器在啟動時調(diào)用ServletContainerInitializer實(shí)現(xiàn)類的onStartup方法,該方法可以獲取HandlesTypes標(biāo)注的所有類型對象。
以上就是動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“項(xiàng)目基礎(chǔ)系列:Javaweb項(xiàng)目架構(gòu)教程”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時為你服務(wù)。
Javaweb熱門基礎(chǔ)學(xué)習(xí)
EL&JSTL:http://www.dabaquan.cn/javavideo/122.html
Filter&Listener:http://www.dabaquan.cn/javavideo/121.html
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743