Java tomcat手動(dòng)配置servlet詳解
1.準(zhǔn)備工作
如下圖,先按照要求創(chuàng)建好各個(gè)文件
這時(shí)候如果你覺(jué)得能運(yùn)行,那就錯(cuò)了(我一開(kāi)始卡在這了)
idea的項(xiàng)目結(jié)構(gòu)
如果學(xué)習(xí)過(guò)用idea創(chuàng)建servlet應(yīng)用,你肯定會(huì)發(fā)現(xiàn),這里提供的web.xml根本不完整
請(qǐng)用以下代碼囊括上述的servlet標(biāo)簽
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> //在這里加入上面說(shuō)過(guò)的servlet標(biāo)簽代碼 </web-app>
2.編譯文件
編碼出問(wèn)題
如上,剛開(kāi)始我想編譯,但報(bào)錯(cuò)了
這里的原因是,javac會(huì)根據(jù)你的操作系統(tǒng)編碼讀取源文件代碼,而我的電腦是默認(rèn)GBK的,但這些源碼我們都是在記事本寫(xiě)下的,而記事本默認(rèn)使用UTF-8保存,于是相當(dāng)于javac用GBK讀取UTF-8的內(nèi)容,遂報(bào)錯(cuò)
因此我們要指定讀取源碼的編碼格式為UTF-8
學(xué)習(xí)類(lèi)加載器
這時(shí)候報(bào)的錯(cuò)是正常顯示的中文了,找不到servlet,意思就是你用了這個(gè)類(lèi),但沒(méi)找到,根據(jù)雙親委派,我們知道找一個(gè)類(lèi),會(huì)先從system class loader類(lèi)加載器的緩存開(kāi)始找,沒(méi)有就找他的父加載器即extension class loader的緩存,沒(méi)有就再找extension class loader的父加載器bootstrap class loader的緩存,還是沒(méi)有就開(kāi)始向下,先找bootstrap class loader的指定路徑下的jar包是否含有我們要的類(lèi),從下圖可知,跟類(lèi)加載器加載核心jar包,一些基本的類(lèi)都在里面,路徑是jdk下的jre下的lib
這時(shí)候還沒(méi)有找到,就去擴(kuò)展類(lèi)加載器的指定路徑找,我的電腦是以下路徑
如果還沒(méi)有找到,那就在系統(tǒng)類(lèi)加載器指定路徑,即耳熟能詳?shù)腸lasspath,你平時(shí)在配置path的時(shí)候應(yīng)該也遇到過(guò),
那么-cp命令后面跟上classpath就是告訴系統(tǒng)如果一套下來(lái)沒(méi)找到就去我這找,-cp全稱(chēng)就是-classpath兩種寫(xiě)法都能運(yùn)行
處理編譯結(jié)果
當(dāng)你通過(guò)在文件管理器輸入cmd進(jìn)行javac時(shí),默認(rèn)產(chǎn)生class文件在當(dāng)前目錄,可這里有個(gè)重點(diǎn),你寫(xiě)的java源文件有package這條命令,那么我們必須按照包名逐級(jí)創(chuàng)建文件夾(運(yùn)行的時(shí)候才能找到你導(dǎo)入的自己寫(xiě)的源文件),
-d 就是放class的位置,-d .可以在當(dāng)前目錄下幫我們自動(dòng)創(chuàng)建包文件夾很方便,不用手動(dòng)創(chuàng)建
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
JDBC以反射機(jī)制加載類(lèi)注冊(cè)驅(qū)動(dòng)連接MySQL
這篇文章介紹了JDBC以反射機(jī)制加載類(lèi)注冊(cè)驅(qū)動(dòng)連接MySQL的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01SpringBoot關(guān)于自動(dòng)注入mapper為空的坑及解決
這篇文章主要介紹了SpringBoot關(guān)于自動(dòng)注入mapper為空的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07詳解Reactor如何優(yōu)雅Exception異常處理
初識(shí)響應(yīng)式編程的時(shí)候,除了從命令式的思維方式轉(zhuǎn)變?yōu)楹瘮?shù)式的編程方式外,其中有一個(gè)很大的不適應(yīng)的地方就是在面對(duì)異常時(shí)該怎么處理。本文將通過(guò)Project?Reactor的文檔以及源碼來(lái)深入解讀,在reactor中是如何優(yōu)雅地實(shí)現(xiàn)這異常處理三板斧,希望對(duì)大家有所幫助2023-02-02基于SpringBoot實(shí)現(xiàn)郵箱找回密碼的代碼示例
本文主要介紹了如何基于SpringBoot實(shí)現(xiàn)郵箱找回密碼,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02Java中使用synchronized關(guān)鍵字實(shí)現(xiàn)簡(jiǎn)單同步操作示例
這篇文章主要介紹了Java中使用synchronized關(guān)鍵字實(shí)現(xiàn)簡(jiǎn)單同步操作示例,本文起講解了synchronized修飾函數(shù)、synchronized修飾代碼塊、synchronized修飾靜態(tài)方法等內(nèi)容,需要的朋友可以參考下2015-04-04Java多線(xiàn)程高并發(fā)中解決ArrayList與HashSet和HashMap不安全的方案
ArrayList實(shí)現(xiàn)了可變大小的數(shù)組。它允許所有元素,包括null。ArrayList沒(méi)有同步,HashMap和Hashtable類(lèi)似,不同之處在于HashMap是非同步的,并且允許null,關(guān)于HashSet有一件事應(yīng)該牢記,即就條目數(shù)和容量之和來(lái)講,迭代是線(xiàn)性的,接下來(lái)讓我們?cè)敿?xì)來(lái)了解吧2021-11-11