站在巨人的肩膀上看Servlet——原來如此(更適合初學者認識Servlet)
前言:
有段時間沒更新部落格了,這段時間因為要準備考試,考完試後又忙了一陣別的事,一直沒能靜下心來寫部落格。大學考試真是越來越噁心了,各種心酸,那酸爽,夠味。不過還好,馬上就要大三了,聽大三學長學姐說大三好多都是考查課,考試的科目少了,心中還是挺期待的,給學弟學妹們祈福吧,要好好學習,大學不再是之前的大學了,大學的考試也不再是之前的考試了。大一欠下的知識終究是要還的,所以奉勸學弟學妹們別想著欠債了,把大學該學的盡力學好,為自己負責。
之前在公司做專案接觸的太多太雜了,等做完專案後發現有個弊端,好多知識只能說出個大概,不像之前寫部落格研究某一個知識點能知其然並知其所以然,比如說Servlet,雖說之前大概學過,用的時候也會用,但是讓我給別人講,還達不到精簡的境界,今天翻了翻之前寫過的筆記,好像理解比以前深了一層,作此篇,分享給大家。
如何理解Servlet?
學前提要:
我在這主要強調理解學習Servlet的思維,要是想細品Servlet,請看之前寫過的部落格《Java匹馬行天下之JavaWeb核心技術——Servlet》https://www.cnblogs.com/zyx110/p/10771172.html,更多精彩邀您觀看。學過Servlet的都知道,Servlet3.0之前的版本要使用Servlet,需要在web.xml中進行配置,在web.xml中配置Servlet時可以配置一些初始化引數,在servlet中可以通過ServletConfig介面提供的方法來獲取這些引數。這種方法我在之前的部落格中寫的很詳細,就不多說,我主要說在Servlet3.0及3.0之後的版本,該版本新增了若干註解,用於簡化Servlet、Filter(過濾器)和監聽器(Listener)的宣告,這使得web.xml部署描述檔案不再是必選的了。
要理解Servlet首先要知道Servlet是JavaWeb的三大元件之一(Servlet、Filter、Listener),還要知道ServletContext是JavaWeb四大域物件之一(PageContext、ServletContext、ServletRequest、HttpSession)。(在這提一下,具體的看前面連結中的部落格或者百度)
初步瞭解:
我們之前學的JavaSE中的一些基礎知識只是在控制檯輸出,現在學習Servlet後不僅能在控制檯上輸出,還能跟瀏覽器進行互動,例如客戶端發出登入請求,或者發出註冊請求都由Servlet來完成處理,在Servlet中通常需要接收請求資料、處理請求、完成響應。
好,知道Servlet是用來幹什麼的,接下來再說Servlet是如何實現的。
具體實現:
在《Java匹馬行天下之JavaWeb核心技術——Servlet》 “https://www.cnblogs.com/zyx110/p/10771172.html”中有寫到Servlet有三種實現方式,在這我只演示實現Http協議的Servlet,別的實現方式自己看上面的部落格,裡面也很全面。
我用的工具是IDEA,下載和安裝見《IDEA永久使用》https://www.cnblogs.com/zyx110/p/10801680.html,新建的是Maven專案,對maven不熟的朋友可以先看《我們一起走進Maven——知己知彼》https://www.cnblogs.com/zyx110/p/10619148.html,需要在你的電腦上安裝並配置Maven環境,具體安裝配置過程見《Maven的安裝與配置》https://www.cnblogs.com/zyx110/p/10801666.html,完成以上這些,我們開始Servlet學習之旅。
新建Maven專案
如何新建一個Maven專案見《IDEA為新手專業打造》https://www.cnblogs.com/zyx110/p/10802098.html。
實現Servlet
建立一個Servlet類
繼承HttpServlet實現Servlet
為什麼會出現報紅?
沒有匯入Servlet模組,相當於Myeclipse裡的jar包。
匯入Servlet模組
如何在maven專案中匯入Servlet模組?
先從Maven儲存庫(https://mvnrepository.com/)中搜索需要匯入的模組,現在我們需要匯入Servlet模組,操作過程如下圖所示:
這時重點來了,如果是用Servlet3.0之前的版本,需要在web.xml中配置響應的引數
現在我用的是Servlet3.0之後的版本,只需加一個@WebServlet(“/login”)的註解,通過解析註解實現Servlet,可以不用在web.xml中配置了。
package servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/login") public class ServletDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("Hello Servlet!!!"); } }
設定Tomcat
Tomcat配置成功,程式碼如下:
package servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/login") public class ServletDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("Hello Servlet!!!");//向控制檯輸出 //設定編碼 req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); //設定伺服器響應的格式 resp.setContentType("text/html"); //從瀏覽器接收引數 String name = req.getParameter("name"); //在控制檯輸出從瀏覽器接收的引數 System.out.println(name); //向瀏覽器頁面輸出 resp.getWriter().println("<font color='red'>我要通過Servlet在瀏覽器頁面輸出</font>"); } }
執行專案
整個完整的Servlet模組完成,Servlet的接收請求和完成響應都有展示,對於初學者,能看到這些效果我想或許能有些許興奮吧。。。。。。至少小有收穫了,恭喜你入門。
Servlet理解的要點
入門後要繼續深究,我在這引一下Servlet中需要學習的要點,具體學習看文章開頭分享的部落格,裡面很詳細。
- ServletContext域物件
- Servlet生命週期
- 請求和響應機制
- JSP
此篇名為站在巨人的肩膀上看Servlet,實際上是讓初學者在巨集觀的思維先了解Servlet,然後進行系統的學習,我覺得這樣比直接看Servlet官方語言知識點好理解。Servlet學習還是很重要的,畢竟它是前後端溝通的橋樑,我只是在學習的時候感覺頓悟了一點,要是分享的過程中有不對的地方,還望大家海涵並指正,謝謝!
*****************************************************************************************************
我的部落格園地址:https://www.cnblogs.com/zyx110/
轉載請說明出處
我不能保證我所說的都是對的,但我能保證每一篇都是用心去寫的,我始終認同“分享的越多,你的價值增值越大”,歡迎大家關注我的技術分享“Java匹馬行天下”和學習心得分享“匹馬行天下”,在分享中進步,越努力越幸運,期待我們都有美好的明天!
支援我的朋友們記得點波推薦哦,您的肯定就是我進步的動