部署+IDEA工程化實(shí)現(xiàn) 附404訪問(wèn)錯(cuò)誤全排查)
你好呀我是斷弦承露感謝陪伴 小白博主在線求友 跟著小白學(xué)/Java/軟件設(shè)計(jì)/鴻蒙開(kāi)發(fā)/芯片開(kāi)發(fā)專欄匯總《軟件設(shè)計(jì)師》專欄 | 《Java》專欄 | 《 RISC-V 處理器實(shí)戰(zhàn)》專欄 | 《Flutter鴻蒙實(shí)戰(zhàn)》專欄 | 《React Native開(kāi)發(fā)》專欄——|CSDN|——文章目錄Tomcat部署JSP文件完整指南手動(dòng)部署IDEA工程化實(shí)現(xiàn) 附404訪問(wèn)錯(cuò)誤全排查 全文知識(shí)架構(gòu)圖 一、基礎(chǔ)運(yùn)行原理? 二、方式一手動(dòng)部署到本地Tomcat2.1 分步操作步驟1編寫JSP代碼步驟2規(guī)范保存文件步驟3部署到Tomcat目錄步驟4瀏覽器訪問(wèn)驗(yàn)證2.2 部署執(zhí)行流程圖? 三、方式二IntelliJ IDEA工程化部署3.1 分步操作步驟1創(chuàng)建Java Web項(xiàng)目第一步切換項(xiàng)目類型為 Jakarta EE第二步第一頁(yè)基礎(chǔ)配置第三步選擇 Web 模板 綁定 Tomcat 9第四步創(chuàng)建項(xiàng)目步驟2編寫JSP文件步驟3確認(rèn)運(yùn)行配置步驟4啟動(dòng)運(yùn)行? 四、JSP訪問(wèn)404/URL錯(cuò)誤專項(xiàng)排查 五、常見(jiàn)問(wèn)題 FAQQ1JSP文件直接雙擊用瀏覽器打開(kāi)不行嗎Q2修改JSP代碼后需要重啟Tomcat嗎Q3JSP的內(nèi)置對(duì)象有哪些為什么out不用定義就能用Q4頁(yè)面中文亂碼和控制臺(tái)日志亂碼是一回事嗎Q5必須放在ROOT目錄嗎能不能自己建文件夾 六、進(jìn)階拓展ASCII數(shù)值循環(huán)寫法 官方參考鏈接Tomcat部署JSP文件完整指南手動(dòng)部署IDEA工程化實(shí)現(xiàn) 附404訪問(wèn)錯(cuò)誤全排查 文章摘要JSP是Java Web開(kāi)發(fā)的入門核心技術(shù)必須部署到Servlet容器中才能運(yùn)行。本文基于Tomcat 9.0.121穩(wěn)定版本講解兩種主流部署方式單文件快速手動(dòng)部署、IntelliJ IDEA工程化部署附帶可直接運(yùn)行的字母遍歷示例代碼并針對(duì)新手最高發(fā)的「URL錯(cuò)誤/404找不到」問(wèn)題做全場(chǎng)景排查所有步驟均可直接復(fù)現(xiàn)。 全文知識(shí)架構(gòu)圖JSP部署指南基礎(chǔ)運(yùn)行原理JSP技術(shù)定位Jasper引擎執(zhí)行流程手動(dòng)部署方式創(chuàng)建JSP源文件規(guī)范保存文件放入webapps目錄瀏覽器訪問(wèn)驗(yàn)證IDEA工程化部署創(chuàng)建Java Web項(xiàng)目編寫JSP代碼配置Tomcat服務(wù)器啟動(dòng)運(yùn)行驗(yàn)證404錯(cuò)誤專項(xiàng)排查文件后綴隱藏問(wèn)題部署路徑匹配問(wèn)題服務(wù)與端口問(wèn)題上下文路徑問(wèn)題跨平臺(tái)大小寫問(wèn)題常見(jiàn)問(wèn)題FAQ進(jìn)階拓展寫法 一、基礎(chǔ)運(yùn)行原理JSPJava Server PagesJava服務(wù)端頁(yè)面是嵌入Java代碼的動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)不能直接用瀏覽器打開(kāi)本地文件運(yùn)行必須部署到實(shí)現(xiàn)了Servlet規(guī)范的Web容器中。Tomcat 9 內(nèi)置Jasper 2.3 引擎對(duì)應(yīng)實(shí)現(xiàn)JSP 2.3規(guī)范負(fù)責(zé)解析JSP文件。完整執(zhí)行流程分為兩步轉(zhuǎn)譯階段首次訪問(wèn)時(shí)Jasper將JSP源碼轉(zhuǎn)換為標(biāo)準(zhǔn)的Java Servlet源文件.java編譯階段調(diào)用Java編譯器將.java源文件編譯為字節(jié)碼文件.class。最終由Servlet執(zhí)行頁(yè)面邏輯輸出標(biāo)準(zhǔn)HTML頁(yè)面返回給瀏覽器。這也是第一次訪問(wèn)JSP頁(yè)面響應(yīng)稍慢后續(xù)訪問(wèn)速度明顯提升的原因。? 二、方式一手動(dòng)部署到本地Tomcat適合快速驗(yàn)證單文件效果無(wú)需創(chuàng)建完整項(xiàng)目直接復(fù)用已安裝的Tomcat環(huán)境。2.1 分步操作步驟1編寫JSP代碼新建文本文件寫入如下示例代碼。代碼實(shí)現(xiàn)26個(gè)小寫字母的遍歷輸出附帶逐行注釋% page contentTypetext/html;charsetUTF-8 pageEncodingUTF-8 languagejava % html head meta charsetUTF-8 title小寫字母遍歷輸出/title style .letter-container { font-size: 18px; letter-spacing: 4px; margin-top: 12px; } /style /head body h326個(gè)小寫英文字母輸出結(jié)果/h3 div classletter-container % // currentChar循環(huán)控制變量存儲(chǔ)當(dāng)前遍歷的字符 // 采用小駝峰命名語(yǔ)義清晰符合Java編碼規(guī)范 char currentChar; // 利用小寫字母ASCII碼連續(xù)的特性從字符a遍歷到z // char類型底層為數(shù)值存儲(chǔ)支持直接自增運(yùn)算 for(currentChar a; currentChar z; currentChar){ // out是JSP內(nèi)置隱式對(duì)象類型為JspWriter // 作用是向響應(yīng)頁(yè)面輸出文本內(nèi)容無(wú)需開(kāi)發(fā)者手動(dòng)定義 // nbsp;是HTML空格實(shí)體用于字符間視覺(jué)分隔避免排版擁擠 out.print(currentChar nbsp;); } % /div /body /html 代碼說(shuō)明頂部page是JSP頁(yè)面指令用于聲明頁(yè)面屬性contentType指定瀏覽器解析的內(nèi)容類型與編碼pageEncoding指定文件本身的存儲(chǔ)編碼language指定腳本語(yǔ)言。示例為簡(jiǎn)化演示采用內(nèi)聯(lián)樣式工程實(shí)踐中建議將CSS樣式抽離到獨(dú)立文件實(shí)現(xiàn)結(jié)構(gòu)與樣式分離。步驟2規(guī)范保存文件選擇「文件 → 另存為」按以下參數(shù)保存文件名letter.jsp編碼UTF-8保存類型所有文件?? 新手第一大坑Windows系統(tǒng)記事本默認(rèn)保存編碼為ANSI即GBK且默認(rèn)隱藏已知文件類型的擴(kuò)展名直接保存會(huì)出現(xiàn)兩個(gè)問(wèn)題文件實(shí)際名為letter.jsp.txt訪問(wèn)返回404文件編碼為GBK與pageEncodingUTF-8沖突頁(yè)面中文亂碼。驗(yàn)證方法打開(kāi)文件資源管理器頂部「查看」選項(xiàng)卡勾選「文件擴(kuò)展名」確認(rèn)文件名后綴僅為.jsp推薦使用VS Code、Notepad等編輯器避免記事本的編碼坑。步驟3部署到Tomcat目錄將保存好的letter.jsp文件放入Tomcat安裝根目錄下的webapps\ROOT文件夾中。目錄說(shuō)明ROOT是Tomcat的默認(rèn)根應(yīng)用目錄部署在此目錄下的資源訪問(wèn)路徑無(wú)需加應(yīng)用名前綴直接通過(guò)文件名即可訪問(wèn)。補(bǔ)充也可以在webapps下新建自定義文件夾如myapp放入JSP文件此時(shí)訪問(wèn)地址需要加上文件夾名作為上下文路徑。單JSP文件可直接部署完整Web應(yīng)用還需要遵循標(biāo)準(zhǔn)目錄結(jié)構(gòu)包含WEB-INF等目錄。步驟4瀏覽器訪問(wèn)驗(yàn)證確保Tomcat處于啟動(dòng)狀態(tài)控制臺(tái)或logs/catalina.out中出現(xiàn)Server startup日志即為啟動(dòng)成功打開(kāi)瀏覽器訪問(wèn)地址http://localhost:8080/letter.jsp頁(yè)面正常顯示26個(gè)連續(xù)小寫字母即為部署成功。2.2 部署執(zhí)行流程圖實(shí)際為jsp.txt后綴正確未成功成功是否返回404編寫JSP代碼另存為jsp格式 UTF8編碼確認(rèn)文件后綴正確顯示文件擴(kuò)展名 重命名文件放入webapps對(duì)應(yīng)目錄啟動(dòng)Tomcat服務(wù)確認(rèn)服務(wù)啟動(dòng)成功排查啟動(dòng)問(wèn)題瀏覽器訪問(wèn)對(duì)應(yīng)URL頁(yè)面是否正常顯示部署完成進(jìn)入錯(cuò)誤排查流程? 三、方式二IntelliJ IDEA工程化部署適合正規(guī)項(xiàng)目開(kāi)發(fā)IDEA自動(dòng)完成編譯、部署、同步是企業(yè)開(kāi)發(fā)的標(biāo)準(zhǔn)方式。3.1 分步操作步驟1創(chuàng)建Java Web項(xiàng)目打開(kāi)IDEA新建項(xiàng)目左側(cè)選擇「Java Enterprise」右側(cè)配置項(xiàng)新版本 IDEA 把原來(lái)的「Java Enterprise」正式改名為 Jakarta EE 了入口就在左側(cè) Generators 分類下面。下面按步驟走第一步切換項(xiàng)目類型為 Jakarta EE在左側(cè)列表的 Generators 分組下點(diǎn)擊 Jakarta EE說(shuō)明這就是舊版 IDEA 里的「Java Enterprise」因?yàn)?Java EE 已經(jīng)正式更名為 Jakarta EE所以新版 IDEA 同步改了名字。點(diǎn)擊后右側(cè)界面會(huì)自動(dòng)切換成 Web 項(xiàng)目的配置項(xiàng)。第二步第一頁(yè)基礎(chǔ)配置Name給項(xiàng)目命名比如 tomcat-jsp-demoLocation項(xiàng)目存放路徑保持默認(rèn)或自定義都可以Build system新手推薦選 Maven行業(yè)通用依賴管理更方便JDKTomcat 9 支持 Java 8 及以上全版本下面的 Add sample code 建議取消勾選自己寫代碼更清晰也方便理解第三步選擇 Web 模板 綁定 Tomcat 9點(diǎn)擊右下角的 Next 按鈕進(jìn)入第二頁(yè)配置在 Templates 列表里勾選 Web Application新版的在本頁(yè)點(diǎn)擊 Application Server 下拉框選擇你本地安裝的 Tomcat 9.0.121如果下拉里沒(méi)有點(diǎn)旁邊的「New」→「Tomcat Server」選中你本地 Tomcat 的根目錄即可Servlet 版本選擇 Servlet 4.0和 Tomcat 9 實(shí)現(xiàn)的規(guī)范版本完全對(duì)應(yīng)兼容性最好第四步創(chuàng)建項(xiàng)目點(diǎn)擊右下角的 CreateIDEA 會(huì)自動(dòng)生成標(biāo)準(zhǔn) Web 項(xiàng)目結(jié)構(gòu)并且自動(dòng)配置好 Tomcat 運(yùn)行配置。步驟2編寫JSP文件在項(xiàng)目的src/main/webapp目錄上右鍵新建「JSP/JSPX」文件命名為letter.jsp寫入上述JSP代碼并保存。步驟3確認(rèn)運(yùn)行配置IDEA右上角會(huì)自動(dòng)生成Tomcat運(yùn)行配置點(diǎn)擊配置圖標(biāo)可檢查「服務(wù)器」標(biāo)簽確認(rèn)Tomcat安裝路徑、JDK路徑正確「部署」標(biāo)簽確認(rèn)已添加當(dāng)前項(xiàng)目的部署記錄應(yīng)用上下文路徑IDEA默認(rèn)值為項(xiàng)目名概念說(shuō)明應(yīng)用上下文路徑是Web應(yīng)用的訪問(wèn)前綴用于區(qū)分同一Tomcat下的多個(gè)應(yīng)用。例如上下文路徑為jsp-demo則訪問(wèn)地址為[http://localhost:8080/jsp-demo/letter.jsp](http://localhost:8080/jsp-demo/letter.jsp)。步驟4啟動(dòng)運(yùn)行點(diǎn)擊右上角綠色啟動(dòng)按鈕IDEA會(huì)自動(dòng)啟動(dòng)Tomcat并部署項(xiàng)目瀏覽器自動(dòng)打開(kāi)項(xiàng)目根路徑。在地址欄末尾追加/letter.jsp即可訪問(wèn)到頁(yè)面效果。 說(shuō)明IDEA部署模式下文件保存在項(xiàng)目源碼目錄中IDEA會(huì)自動(dòng)同步到Tomcat的部署目錄無(wú)需手動(dòng)復(fù)制文件。? 四、JSP訪問(wèn)404/URL錯(cuò)誤專項(xiàng)排查針對(duì)訪問(wèn)時(shí)出現(xiàn)「URL拼寫可能存在錯(cuò)誤請(qǐng)檢查」、頁(yè)面返回404的場(chǎng)景按出現(xiàn)概率從高到低逐一排查覆蓋99%的新手場(chǎng)景排名錯(cuò)誤原因驗(yàn)證方法解決方案1文件后綴被隱藏最高發(fā)開(kāi)啟文件擴(kuò)展名后文件名顯示為letter.jsp.txt重命名文件刪除末尾的.txt后綴2部署路徑不匹配文件放到了bin、conf等非部署目錄或上下文路徑寫錯(cuò)手動(dòng)部署必須放在webapps\ROOT或webapps\自定義應(yīng)用名目錄下訪問(wèn)地址與上下文路徑保持一致3Tomcat未啟動(dòng)或啟動(dòng)失敗[http://localhost:8080](http://localhost:8080)也無(wú)法打開(kāi)運(yùn)行bin/startup.bat查看日志確認(rèn)啟動(dòng)成功無(wú)報(bào)錯(cuò)信息4端口號(hào)不匹配之前修改過(guò)Tomcat端口仍用8080訪問(wèn)查看conf/server.xml中HTTP Connector的port值使用正確端口訪問(wèn)5應(yīng)用上下文路徑錯(cuò)誤IDEA部署的項(xiàng)目有應(yīng)用名前綴直接訪問(wèn)根路徑地址加上項(xiàng)目上下文路徑如[http://localhost:8080/](http://localhost:8080/)項(xiàng)目名/letter.jsp6跨平臺(tái)大小寫不匹配Windows開(kāi)發(fā)正常部署到Linux服務(wù)器返回404Linux系統(tǒng)路徑嚴(yán)格區(qū)分大小寫全流程統(tǒng)一使用小寫文件名7瀏覽器緩存舊頁(yè)面修改代碼后刷新無(wú)變化或之前訪問(wèn)過(guò)404頁(yè)面被緩存按CtrlF5強(qiáng)制刷新頁(yè)面繞過(guò)本地緩存重新請(qǐng)求8應(yīng)用部署失敗啟動(dòng)日志有異常報(bào)錯(cuò)應(yīng)用未正常加載查看logs/catalina.out日志排查啟動(dòng)階段的錯(cuò)誤信息快速定位技巧先訪問(wèn)[http://localhost:8080](http://localhost:8080)如果Tomcat官方歡迎頁(yè)都打不開(kāi)屬于服務(wù)或端口問(wèn)題如果歡迎頁(yè)正常屬于文件路徑、文件名或上下文路徑問(wèn)題。 五、常見(jiàn)問(wèn)題 FAQQ1JSP文件直接雙擊用瀏覽器打開(kāi)不行嗎不行。JSP是服務(wù)端動(dòng)態(tài)技術(shù)其中的Java代碼需要服務(wù)端容器編譯執(zhí)行。直接本地打開(kāi)只會(huì)把代碼當(dāng)純文本顯示不會(huì)執(zhí)行任何Java邏輯。必須部署到Web容器中通過(guò)HTTP協(xié)議訪問(wèn)。Q2修改JSP代碼后需要重啟Tomcat嗎默認(rèn)開(kāi)發(fā)模式下不需要。Tomcat默認(rèn)開(kāi)啟JSP熱編譯機(jī)制會(huì)自動(dòng)檢測(cè)文件更新并重新轉(zhuǎn)譯編譯。注意生產(chǎn)環(huán)境通常會(huì)關(guān)閉熱編譯將development設(shè)為false提升性能此時(shí)修改JSP必須重啟服務(wù)才能生效。Q3JSP的內(nèi)置對(duì)象有哪些為什么out不用定義就能用JSP提供了多個(gè)隱式內(nèi)置對(duì)象由Jasper引擎在編譯時(shí)自動(dòng)創(chuàng)建開(kāi)發(fā)者可以直接使用。常用的有out輸出、request請(qǐng)求、response響應(yīng)、session會(huì)話、application全局上下文、config配置、pageContext頁(yè)面上下文、page頁(yè)面實(shí)例8個(gè)還有1個(gè)exception異常對(duì)象僅在聲明了isErrorPagetrue的錯(cuò)誤頁(yè)面中可用普通頁(yè)面無(wú)法訪問(wèn)。Q4頁(yè)面中文亂碼和控制臺(tái)日志亂碼是一回事嗎不是同一問(wèn)題解決方案完全不同頁(yè)面中文亂碼是JSP文件編碼、page指令編碼、瀏覽器解析編碼三者不統(tǒng)一導(dǎo)致檢查文件保存編碼和page指令即可控制臺(tái)日志亂碼是Tomcat日志編碼與Windows CMD編碼不匹配導(dǎo)致修改logging.properties的控制臺(tái)編碼為GBK即可。Q5必須放在ROOT目錄嗎能不能自己建文件夾可以自建目錄。在webapps下新建一個(gè)文件夾例如myapp把JSP文件放入其中訪問(wèn)地址即為[http://localhost:8080/myapp/letter.jsp](http://localhost:8080/myapp/letter.jsp)。每個(gè)獨(dú)立的子文件夾對(duì)應(yīng)一個(gè)獨(dú)立的Web應(yīng)用上下文。 六、進(jìn)階拓展ASCII數(shù)值循環(huán)寫法除了直接用字符遍歷也可以通過(guò)ASCII碼數(shù)值遍歷兩種寫法最終效果完全一致適合理解底層原理% // 小寫字母a的ASCII碼為97小寫字母z的ASCII碼為122 // 以整數(shù)形式循環(huán)遍歷再?gòu)?qiáng)制轉(zhuǎn)換為char字符 for(int asciiCode 97; asciiCode 122; asciiCode){ char letter (char) asciiCode; out.print(letter nbsp;); } %原理說(shuō)明字符在計(jì)算機(jī)底層以ASCII數(shù)值存儲(chǔ)小寫字母a-z的ASCII碼連續(xù)遞增因此可以用整數(shù)循環(huán)后強(qiáng)轉(zhuǎn)實(shí)現(xiàn)字符遍歷。 官方參考鏈接Apache Tomcat 9 Jasper JSP引擎官方說(shuō)明Tomcat 9 應(yīng)用部署官方指南Tomcat 9 完整官方文檔如果本文對(duì)你有幫助歡迎點(diǎn)贊、收藏?、評(píng)論、關(guān)注?個(gè)人領(lǐng)域:C/java/Al/軟件開(kāi)發(fā)/芯片開(kāi)發(fā)個(gè)人主頁(yè):「一名熱衷協(xié)作的開(kāi)發(fā)者在構(gòu)建中學(xué)習(xí)期待與你交流技術(shù)、共同成長(zhǎng)。」座右銘:「與其完美地觀望不如踉蹌地啟程」