Servlet 新手村引入-編寫一個簡單的servlet項目

Servlet 新手村引入-編寫一個簡單的servlet項目

文章目錄

  • Servlet 新手村引入-編寫一個簡單的servlet項目
    • 一、編寫一個 Hello world 項目
      • 1.創建項目
      • 2.引入依賴
      • 3.手動創建一些必要的目錄/文件
      • 4.編寫代碼
      • 5.打包程序
      • 6.部署
      • 7.驗證程序
    • 二、更方便的處理方案(插件引入)
      • 1.引入插件
      • 2.配置插件
      • 3.問題分析

上篇博客講到, Tomcat 提供了一些列的 api 接口,這些 api 背后已經把一些基礎工作做好了。Tomcat 把這組 api 起了個名字,稱為 Servlet。

Java 程序員,只需要調用上述 api,通過少量的代碼,就可以完成基本的 http服務器的核心功能。

相比于上篇 Tomcat 中講到的 靜態頁面,Servlet 主要的解決的問題,就是為了實現 動態頁面。

下面我們就通過 Java 來編寫一個最簡單的 servlet 的 Hello World 程序。

一、編寫一個 Hello world 項目

1.創建項目

創建一個 Maven 項目。Maven 是 java 中一個常用的“構建工具”,一個程序在編寫過程中,往往需要涉及到一些第三方庫的依賴,另外還需要針對這個寫好的程序進行打包部署。

Maven 存在的意義,就是為了能夠方便的進行依賴管理和打包。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

觀察創建好項目。外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

2.引入依賴

當前代碼要使用 Servlet 開發,而 Servlet 并不是 Java 標準庫自帶的。就需要讓 Maven 能夠把 Servlet 的依賴給獲取過來。需要先找到 maven 中央倉庫。在中央倉庫中找到 Java Servlt API.

Maven 中央倉庫地址(點擊跳轉)

Java Servlet API 有很多個版本,具體要選擇哪個版本是和 Tomcat 的版本,有對應關系的。Tomcat 使用 8,Servlet 就是3.1 如果不匹配,就可能出現問題。

這段代碼就是 Maven 倉庫中版本為 3.1.0 的坐標外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

把依賴引入外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

首次使用,是最慢的。后面就快了(首次使用需要加載不少的依賴),下載的過程是需要時間的。

3.手動創建一些必要的目錄/文件

Tomcat 對于 Servlet項目,是有一些額外的要求的。Maven 是一個通用的工具,可以管理的不僅僅是Servlet項目,還可以管理其他的項目。在這個基礎上,再按照Servlet項目的要求,創建出一些特定的目錄和文件。外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

web.xml 里,還需要寫一些內容,不能是空著的。這里的內容是固定的內容,不需要咱們去背下來,只需要從別的項目中復制粘貼過來即可。下列代碼就可以直接放到 web.xml 中。

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name>
</web-app>(第三行代碼可能是標紅的,對于 idea 來說,只能保證針對java程序的提示是準確的。其他的文件,提示,僅供參考!!! 如果實在覺得難受可以 alt+enter ,把這個問題處理一下,fetch 忽略掉 ignore)

4.編寫代碼

在 java 目錄中創建一個類 HelloServlet,代碼如下:

//這個注解,就把當前這個Servlet類,和一個請求的路徑關聯起來了(配置路由)
@WebServlet("/hello")
//繼承是為了重寫這個父類中的方法。
public class HelloServlet extends HttpServlet {@Override//調用父類doGet,這個方法不需要手動調用,doGet本質上也是一個“回調函數”,方法寫好后,就會交給Tomcatprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//下列代碼一定要刪掉,否則就會出現問題。//super.doGet(req,resp);//是在服務器日志中產生的 (tomcat)System.out.println("Hello World");//想要把hello world 返回給客戶端,還需要進一步的使用下列代碼。//resp是未初始化過的響應對象,doGet的目的就是把這個對象給設置好。通過getwriter得到resp里面內置的輸出流對象(Writer字符流),最后使用 write方法,就可以把一個字符串寫入到resp對象中。把數據寫入到了 HTTP 響應的body中。resp.getWriter().write("hello world");}
}

總之,doGet 做的事,就是根據請求計算響應。

前面寫 echo server 的時候,一個服務器,典型的工作流程,就是三步:

  1. 讀取請求并解析
  2. 根據請求計算響應
  3. 把響應寫回到客戶端

這個過程體現了服務器的業務邏輯,1 3都是相對固定的操作。而在 Servlet 這塊,1 3 都是Tomcat 幫我們完成的。咱們寫代碼只需要關注 2。也就是doGet要完成的工作。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

5.打包程序

因為咱們的程序是放到 Tomcat 上運行,就需要對于程序進行打包。達成一個 Tomcat 能識別的包的格式,此時代碼才會被 Tomcat 給加載起來。

打包也是借助 maven 來完成的。打開 maven 窗口(一般在 IDEA 右側就可以看到 Maven 窗口,如果看不到的話,可以通過 菜單-View-Tool Window-Maven 打開),然后展開Lifecycle,雙擊 package 即可進行打包。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

如果看到 BUILD SUCCESS 字樣,說明打包成功了。外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

這就是通過 maven 打包生成的內容。在 maven 中,默認打包生成的是jar包。(常用的 java 的打包方式,jar 里面就是一些 .class文件)但是Tomcat需要的并非是 jar 包,而是 war 包。外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

war包本質上和 jar 包差不多,這里會包含一些前端的代碼(html,css,js),以及一些 tomcat 的配置(web.xml)

此處需要修改 pom.xml,在這里添加一個 標簽。(的子標簽,層次結構不要搞錯)外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

這個東西描述了打的包的名字是啥。(不是必須的,同樣是的子標簽)外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

此時再次進行打包,文件中就會生成如下war文件。外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

6.部署

啟動 tomcat ,將寫好的 war 包,放到 tomcat 上。具體來說,就是把這個 war 包拷貝到 tomcat 的 webapps 目錄中。外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

發現新的war包,對war包進行部署操作。外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

7.驗證程序

通過瀏覽器發起 http get 請求,觸發剛才 servlet 的代碼。

127.0.0.1:8080/java_hello/hello

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

  • 通過 第一級 路徑,確定一個 webapp
  • 通過 第二級 路徑,確定哪個 servlet
  • 通過 方法,確定執行 servlet 中的哪個方法

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

問題1:在你檢查了所有代碼都是正確的,但是最后利用瀏覽器發起請求的時候,出現加載不出來的情況。外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

之所以出現這個情況,是 cmd 在搞鬼!!比如你選中了 cmd 中的某個內容,cmd 就會進入“復制”模式,此時按下 enter 就是完成復制。外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

進入復制模式的過程中,cmd 就會把正在運行的進程給阻塞掉。

問題2:針對上述 7 步操作,能否簡化一下?

也是有辦法的!后續學習的 Spring 就是做出了簡化后的效果。

二、更方便的處理方案(插件引入)

1.引入插件

手動拷貝 war 包到 Tomcat 的過程比較麻煩。我們還有更方便的方法。

此處我們使用 IDEA 中的 Smart Tomcat 插件完成這個工作。

理解“插件”

插件會提升我們軟件的可修改性、可維護性、可移植性。

插件就是對程序的一些特定場景,做出一些特定的功能的擴展

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

同學們可能會出現 插件市場 加載不出來的情況,也可以去官網下載,手動安裝。下載之后,會得到一個 jar 包,把這個 jar 包拖到 idea 的界面上,就能安裝插件。

2.配置插件

一個項目中,第一次使用 smart tomcat 需要簡單配置一下。配置一次之后,后續就不需要配置了。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

出現問題:當我們配置完插件后啟動程序,會發現端口號已被占用,這是因為咱們之前啟動了 Tomcat,之前的 Tomcat 已經占用了 8080。一個端口號只能被一個進程綁定,解決方法就是把之前的 tomcat 關閉,再啟動此程序外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

3.問題分析

  • 404 瀏覽器要訪問的資源,在服務器上不存在。

    1. 檢查你的請求路徑,和你服務器這邊的配置,是否一致。外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

    2. 確認你的 webapp 是否被正確加載。

      smart tomcat 由于只是加載你這一個 webapp。如果加載失敗,就會直接啟動失敗!!我們要學會觀察日志,觀察是否有“部署成功”。

  • 405 外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

    1. 寫的 doXX 方法,和請求發起的方法,不匹配。瀏覽器發 Get 請求,服務器代碼寫的是 doPost。
    2. 發的是 Get 請求,服務器寫的也是Get請求,但是沒有把 super.doPost 給刪了。
  • 505 服務器內部錯誤,代碼中拋出異常了。出現 500 后一定要仔細觀察異常調用棧外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

  • 出現空白頁

    往往就是沒有執行 getWriter().write 方法

  • 無法訪問此網站

    這種情況,要么是 tomcat 服務器,沒有正確運行。要么就是 ip 或者 端口號 編寫的不對!!

感謝觀看,下期繼續分享 servlet 相關知識!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711407.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

autocrlf和safecrlf

git遠程拉取及提交代碼&#xff0c;windows和linux平臺換行符轉換問題&#xff0c;用以下兩行命令進行配置&#xff1a; git config --global core.autocrlf false git config --global core.safecrlf true CRLF是windows平臺下的換行符&#xff0c;LF是linux平臺下的換行符。…

98 greenplum 集群搭建過程中碰到的幾個問題

前言 最近有搭建 greenplum 集群的需求 然后 在搭建的過程中碰到了一些問題, 還是有一些時間開銷 并且問題也稍微有些復雜, 因此記錄一下 1. Do not have enough valid segments to start the array. 報錯日志信息如下 20220408:14:15:29:021638 gpstart:gp1:gpadmin-[I…

基于springboot+vue的公交線路查詢系統

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

Find My運動相機|蘋果Find My技術與相機結合,智能防丟,全球定位

運動相機設計用于在各種運動和極限環境中使用&#xff0c;如徒步、登山、攀巖、騎行、滑翔、滑雪、游泳和潛水等&#xff0c;它們通常具有防抖防震、深度防水和高清畫質的特點&#xff0c;能夠適應顛簸劇烈的環境&#xff0c;甚至可以承受一定程度的摔落&#xff0c;一些運動相…

基于systick實現獲取系統運行時間

基于systick實現獲取系統運行時間 文章目錄 基于systick實現獲取系統運行時間systick.c代碼結構:代碼功能:總結 systick.c #include <stdint.h> #include "gd32f30x.h"static volatile uint64_t g_sysRunTime 0;/** ***************************************…

數學建模【聚類模型】

一、聚類模型簡介 “物以類聚&#xff0c; 人以群分”&#xff0c;所謂的聚類&#xff0c;就是將樣本劃分為由類似的對象組成的多個類的過程。聚類后&#xff0c;我們可以更加準確的在每個類中單獨使用統計模型進行估計、分析或預測&#xff0c;也可以探究不同類之間的相關性和…

springboot233大學生就業需求分析系統

大學生就業需求分析系統設計與實現 摘 要 信息數據從傳統到當代&#xff0c;是一直在變革當中&#xff0c;突如其來的互聯網讓傳統的信息管理看到了革命性的曙光&#xff0c;因為傳統信息管理從時效性&#xff0c;還是安全性&#xff0c;還是可操作性等各個方面來講&#xff…

C語言-簡單的環形隊列的源碼示例

概述 環形隊列&#xff08;Circular Queue&#xff09;是一種常見的數據結構&#xff0c;特別適用于在單片機等資源受限的環境下實現緩沖區或隊列功能。下面是一個簡單的環形隊列的源碼示例&#xff0c;用C語言實現&#xff1a; #include <stdio.h> #include <stdint…

五種查看Spring容器中bean的方法

五種查看Spring容器中bean的方法 在Spring應用程序中&#xff0c;了解和查看容器中的Bean是進行調試和問題排查的關鍵。Spring提供了多種方法來查看容器中注冊的Bean&#xff0c;以便我們深入了解應用程序的內部結構和調試潛在問題。本文將介紹五種常用的查看Spring容器中Bean的…

C++ map用法詳細總結40例

文章目錄 1. 定義與初始化2. 插入元素3. 查找元素4. 刪除元素5. 遍歷6. 訪問成員函數7. 修改元素8. 注意事項9. 使用 equal_range 查找鍵值范圍10. 使用 emplace 添加元素11. 使用 cbegin 和 cend 獲取常量迭代器12. 排序規則自定義13. 使用 multimap 存儲重復鍵14. 判斷 map 是…

Python音樂信息管理庫之beets使用詳解

概要 在數字化時代,音樂管理變得越來越重要,特別是對于音樂愛好者和專業音樂人士而言。Python作為一種功能強大的編程語言,擁有著豐富的音樂處理庫,其中Beet就是一款備受推崇的音樂信息管理工具。本文將深入探討Beet庫的功能特性、使用方法以及應用場景,并提供豐富的示例…

市場需求預測模型

市場需求預測模型是一種用于預測某個市場或產品的需求量的數學模型。它基于歷史數據、市場趨勢以及其他相關因素&#xff0c;通過統計和分析的方法來預測未來的市場需求情況。 市場需求預測模型可以幫助企業制定合理的生產計劃、庫存管理和市場營銷策略。通過準確地預測市場需…

python實現數字規整(轉中文)

1.思路根據正則匹配數字類型比如手機號、年月日等進行相對的數字規整 話不多說直接上代碼&#xff0c;有新的類型可以按照當前方案進行新增 import redef match_year_digit(match):m str(match.group())relation {1: 一, 2: 二, 3: 三, 4: 四, 5: 五, 6: 六, 7: 七, 8: 八, …

WPF真入門教程31--WPF版房屋租售系統

1、教程回顧 到現在為止&#xff0c;“蒸”入門系列教程已完成了30刺由淺入深地講解&#xff0c;當然不可能講到了WPF的所有技能點&#xff0c;但讀者看到了wpf的內部各種功能及之間的聯系&#xff0c;在此基礎上&#xff0c;再提供一個完整有效的綜合項目&#xff0c;本項目采…

tcp的三次握手和四次揮手?

一&#xff1a;引出 客戶端與服務器之間數據的發送和返回的過程當中需要創建一個叫TCP connection的東西&#xff1b;由于TCP不存在連接的概念&#xff0c;只存在請求和響應&#xff0c;請求和響應都是數據包&#xff0c;它們之間都是經過由TCP創建的一個從客戶端發起&#xff…

身份驗證錯誤。要求的函數不受支持。遠程計算機:[IP地址]。這可能是由于CredSSP加密數據庫修正

出現“身份驗證錯誤。要求的函數不受支持。遠程計算機&#xff1a;[IP地址]。這可能是由于CredSSP加密數據庫修正”的問題&#xff0c;通常是因為Windows更新后&#xff0c;遠程桌面連接&#xff08;RDP&#xff09;的安全性增強&#xff0c;特別是與CredSSP&#xff08;Creden…

[RoarCTF 2019]Easy Calc

這題考查的是: 字符串解析特性目錄讀取文件內容讀取 字符串解析特性詳解&#xff1a;PHP字符串解析特性 &#xff08;$GET/$POST參數繞過&#xff09;&#xff08;含例題 buuctf easycalc&#xff09;_參數解析 繞過-CSDN博客 ascii碼查詢表&#xff1a;ASCII 表 | 菜鳥工具 …

AI智能雷達名片小程序平臺版源碼系統 帶完整的安裝代碼包以及安裝部署教程

在當今數字化快速發展的時代&#xff0c;人工智能&#xff08;AI&#xff09;已滲透到各個領域&#xff0c;尤其是在商務溝通領域&#xff0c;傳統的名片已經不能滿足現代商業的需求。小編給大家分享一款名為“AI智能雷達名片小程序平臺版”的源碼系統&#xff0c;該系統不僅提…

【Linux】將程序的輸出顯示到屏幕,同時寫入到log文件

1. 將程序的輸出顯示到屏幕&#xff0c;同時寫入到log文件 nohup python -u main.py 2>&1 | tee -a log.txt &nohup 放在命令的開頭&#xff0c;表示不掛起&#xff08;no hang up&#xff09;&#xff0c;也即&#xff0c;關閉終端或者退出某個賬號&#xff0c;進…

知乎引流秘籍:玩轉知乎,掘金百萬流量!

知乎&#xff0c;擁有3億注冊用戶、日新增用戶8萬的超級內容平臺&#xff0c;已然成為流量洼地。如何玩轉知乎&#xff0c;掘金百萬流量&#xff1f;這份1500字的實操指南&#xff0c;為你揭秘&#xff01; 一、知乎的優勢&#xff1a;流量大、長尾效應強 1. 流量大&#xff…