问题小结(一)——servlet生命周期、get和post请求、内置对象、单例模式等
文章目錄
- 1. 說說jetty與tomcat的區別。
- 2. 如何修改jetty默認端口?如何修改tomcat默認端口?
- 2.1 修改jetty默認端口
- 2.2 修改tomcat 默認端口
- 3. 如何啟動jetty服務器?
- 4. 簡述Servlet的生命周期。
- 5. Servlet如何處理用戶的請求?
- 6. 說說get請求和post的請求的區別。
- 7. 說說相對地址與絕對地址的區別。
- 8. 說說請求重定向與請求轉發的區別。
- 9. jsp有哪九大內置對象?servlet如何獲取session和application對象?
- 10. 什么是單例?單例有哪些設計模式?
1. 說說jetty與tomcat的區別。
相同點:
- tomcat與jetty都是一種servlet的引擎,他們都支持標準的servlet規范和javaEE規范
不同點:
- jetty更快,更靈活,內核更小。默認使用utf-8字符集,不存在中文亂碼情況,但不太適合做大型開放。
- tomcat比較傳統,功能更強大,特別適合大型項目開發,但經常有中文亂碼情況,默認使用ISO_8859_1字符集。
2. 如何修改jetty默認端口?如何修改tomcat默認端口?
2.1 修改jetty默認端口
- 打開jetty安裝目錄下的start.ini文件
- 如下圖把端口修改為:8888
2.2 修改tomcat 默認端口
- 打開tomcat安裝目錄下的server.xml文件
- 如下圖把端口修改為:8080
3. 如何啟動jetty服務器?
一般情況下都可以通過安裝目錄下的start.jar包來啟動jetty,除此之外,還可以通過dos命令,先進入jetty的安裝文件夾,再輸入命令來進行啟動。
啟動命令為:java -jar start.jar
4. 簡述Servlet的生命周期。
(1)加載和實例化
當Servlet容器啟動或客戶端發送一個請求時,Servlet容器會查找內存中是否存在該Servlet實例,若存在,則直接讀取該實例響應請求,直接進入步驟(3);如果不存在,就通過構造方法創建一個Servlet實例。
(2) 初始化
實例化后,Servlet容器將調用Servlet的 init() 方法進行初始化(一些準備工作或資源預加載工作)。
(3)服務
初始化后,Servlet處于能響應請求的就緒狀態。當接收到客戶端請求時,調用service() 的方法處理客戶端請求,HttpServlet的service()方法會根據不同的請求 轉調不同的doXxx()方法:doGet()和doPost()。
(4)銷毀
重新發布項目,正常關閉tomcat時,會執行destroy() 方法,如果非正常關閉,相當于程序中斷,不會執行方法。
5. Servlet如何處理用戶的請求?
- 針對 Servlet 的每次請求,Web 服務器在調用 service() 方法之前,都會創建 HttpServletRequest 和 HttpServletResponse 對象。簡稱 request 對象和response 對象。瀏覽器訪問 Servlet 的交互過程如下圖所示:
- 首先瀏覽器向 Web 服務器發送一個 HTTP 請求,Web 服務器根據收到的請求,會先創建一個 HttpServletRequest 和 HttpServletResponse 對象,然后再調用相應的 Servlet 程序。
- 在 Servlet 程序運行時,它首先會從 HttpServletRequest 對象中讀取數據信息,然后通過 service() 方法處理請求消息,并將處理后的響應數據寫入到 HttpServletResponse 對象中。最后,Web 服務器會從 HttpServletResponse 對象中讀取到響應數據,并發送給瀏覽器。
6. 說說get請求和post的請求的區別。
相同點:
- get和post都是http請求方式。(http請求方式遠不止這兩種)
不同點:
- get 請求重點在從服務器上獲取資源,而post 請求重點在向服務器發送數據。
- get 請求過程中其參數在瀏覽器的地址欄的url中可見,所以隱私性安全性較差,且參數長度有限制,而 post 請求傳遞的參數放在Request body中,不會在地址欄的url中顯示,比GET要安全,且參數長度無限制。
- get 請求比較常見的方式是通過url地址欄請求,而post 請求最常見是通過form表單發送數據請求。
7. 說說相對地址與絕對地址的區別。
- 相對地址相對當前資源的地址。 容易出錯,寫法簡單。
- 絕對地址放之四海而皆準的地址。 肯定不會出錯,拼起來比較麻煩 。
- 舉例:假設你的網頁在如下位置:D:\WORK\web\111.html,而圖片在D:\WORK\web\images\111.jpg,有以下兩種情況:
①你在網頁中直接以D:\WORK\web\images\111.jpg這個路徑表示你的圖片。<這個就是圖片的絕對路徑>
②你在網頁中以: images\111.jpg來表示你的這個圖片。<這個是圖片的相對路徑>
8. 說說請求重定向與請求轉發的區別。
請求重定向(redirect):
- 語法:response.sendRedirect(url); 需要兩次請求,地址欄會發生改變,
request對象也會變,且request 里的屬性無法保存。
請求轉發(forward):
- 語法:request.getRequestDispatcher(url).forward(request,response); 需要一次請求,地址欄不會發生改變,request對象不變,且request 里的屬性可以保存。
9. jsp有哪九大內置對象?servlet如何獲取session和application對象?
- jsp的九大內置對象:out,page,request,response,session,application,exception,pageContext,config
其中常用的是:request,response,session,application - 獲取session對象:
request.getSession().setAttribute(“name”,“大胖”); //如獲取大胖這個對象 - 獲取application對象:
request.getServletContext().setAttribute(“nation”,“china”); //如獲取中國這個對象
10. 什么是單例?單例有哪些設計模式?
- 單例模式是一種常見的設計模式,單例模式的寫法有好幾種,主要介紹:懶漢式單例、餓漢式單例。
- 單例模式有以下特點:
(1)單例類只能有一個實例
(2)單例類必須自己創建自己的唯一實例
(3)單例類必須給所有其他對象提供這一實例
單例模式確保某個類只有一個實例,而且自行實例化并向整個系統提供這個實例。在計算機系統中,線程池、緩存、日志對象、對話框、打印機、顯卡的驅動程序對象常被設計成單例。選擇單例模式就是為了避免不一致狀態,避免政出多頭。
形象比喻:餓漢主動找食物吃,懶漢躺在地上等著人喂。
public class MySun {//懶漢模式private static MySun sun; //單例對象private MySun(){ //私有構造方法}//靜態工廠方法public static MySun getInstance(){if(sun==null){sun = new MySun();}return sun;} }①要想讓一個類只能構建一個對象,自然不能讓它隨便去做new操作,因此MySun的構造方法是私有的。
②sun是MySun類的靜態成員,也是我們的單例對象。它的初始值可以寫成null,也可以寫成new MySun()。
③getInstance()是獲取單例對象的方法。如果單例初始值是null,還未構建,則構建單例對象并返回。這個寫法屬于單例中的懶漢模式。如果單例對象一開始就被new MySun()主動構建,則不再需要判空操作,這種寫法屬于餓漢模式。
總結
以上是生活随笔為你收集整理的问题小结(一)——servlet生命周期、get和post请求、内置对象、单例模式等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaWeb(九)——JavaBean
- 下一篇: JavaWeb(十)——jetty服务器