大家好,我是IT修真院深圳分院的學員,一枚正直善良的JAVA程序員。
1.背景介紹
Servlet(ServerApplet)是JavaServlet的簡稱,一般稱為小服務(wù)程序或服務(wù)連接器,是一個用Java編寫的服務(wù)器端程序。
主要功能在于處理請求和發(fā)送響應(yīng)、交互式地瀏覽和修改數(shù)據(jù),生成動態(tài)Web內(nèi)容,甚至可以說Servlet是為了解決實現(xiàn)動態(tài)頁面而衍生的程序。
狹義的Servlet是指Java語言實現(xiàn)的一個接口,廣義的Servlet是指任何實現(xiàn)了這個Servlet接口的類,一般情況下,
人們將Servlet理解為后者。Servlet運行于支持Java的應(yīng)用服務(wù)器中。
2.知識剖析
Servlet的四個主要內(nèi)置對象
ServletConfig對象
ServletContext對象
request對象
Request對象的作用是與客戶端交互,收集客戶端的Form、Cookies、超鏈接,或者收集服務(wù)器端的環(huán)境變量。
request對象是從客戶端向服務(wù)器發(fā)出請求,包括用戶提交的信息以及客戶端的一些信息。同時也會向服務(wù)器或者瀏覽器定義自己需要的返回的東西。
response對象
Response對象用于動態(tài)響應(yīng)客戶端請示,控制發(fā)送給用戶的信息,并將動態(tài)生成響應(yīng)。
Response對象只提供了一個數(shù)據(jù)集合cookie,它用于在客戶端寫入cookie值。若指定的cookie不存在,則創(chuàng)建它。若存在,則將自動進行更新。結(jié)果返回給客戶端瀏覽器。
3.常見問題
1.servlet的生命周期是怎么樣的?
2.Servlet與JSP的異同
4.解決方案
1.servlet的生命周期是怎么樣的?
Servlet生命周期分為三個階段:
1,初始化階段調(diào)用init()方法
2,響應(yīng)客戶請求階段 調(diào)用service()方法
3,終止階段 調(diào)用destroy()方法
初始化階段
1,Servlet容器啟動時自動裝載某些Servlet
-loadon-startup-1-loadon-startup-
2,在Servlet容器啟動后,客戶首次向Servlet發(fā)送請求的時候
3,Servlet類文件被更新后,重新裝載Servlet
2.Servlet與JSP的區(qū)別是什么?
Servlet與JSP有許多相似之處,都可以生成動態(tài)網(wǎng)頁。
背景:
Servlet體系是基于B/S架構(gòu)開發(fā)web應(yīng)用程序,使用Servlet類將HTTP請求和響應(yīng)封裝在標準JAVA類中來實現(xiàn)各種web應(yīng)用方案的。
當大量的B/S架構(gòu)程序開發(fā)出來以后出現(xiàn)了很多問題:首先servlet類有大量冗余代碼,其次是開發(fā)Servlet的沒法做到有精美的頁面效果。
所以sun提出將服務(wù)端代碼添加在已經(jīng)設(shè)計好的靜態(tài)頁面上,經(jīng)過JSP容器對JSP文件進行自動解析并轉(zhuǎn)換成Servlet類來交給web服務(wù)器運行。
創(chuàng)建方式:
Servlet都是由JAVA程序代碼構(gòu)成,用于流程控制和事務(wù)處理,通過Servlet來生成動態(tài)網(wǎng)頁很不直觀。
而JSP由HTML代碼和JSP標簽構(gòu)成,可以方便地編寫動態(tài)網(wǎng)頁.
編譯:
JSP修改后可以立即看到結(jié)果,不需要編譯;
而Servelt缺需要編譯。
轉(zhuǎn)換:
JSP是動態(tài)網(wǎng)頁開發(fā)技術(shù),是運行在服務(wù)器端的腳本語言,而Servlet是web服務(wù)器端編程技術(shù)。
所以JSP運行時就是轉(zhuǎn)換為Servlet,也就是java程序來執(zhí)行。
優(yōu)缺點:
JSP的優(yōu)點是擅長于網(wǎng)頁制作,生成動態(tài)頁面比較直觀,缺點是不容易跟蹤與排錯。
Servlet是純Java語言,擅長于處理流程和業(yè)務(wù)邏輯,缺點是生成動態(tài)網(wǎng)頁不直觀。
5.編碼實戰(zhàn)
這是因為Tomcat7以及之前的編碼方式都是iso8859-1,tomcat8以后默認編碼格式開始改為utf-8;
這時候我們需要在頁面進行設(shè)置,添加下列代碼使得頁面的編碼方式變成utf-8.
<%@ pagecontentType="text/html;charset=UTF-8" language="java" %>
<%@ page language="java"import="java.util.*" pageEncoding="UTF-8" %>
就可以將頁面的獲取內(nèi)容改為UTF8,顯示正常的數(shù)據(jù)。
但是在我們向服務(wù)器提交信息的時候,返回的信息依然會是iso8859-1,
這就需要我們在后臺進行處理。這里就不仔細講了,也不是什么很麻煩的事情。
6.擴展思考
1、為什么創(chuàng)建的servlet是繼承自httpServlet,而不是直接實現(xiàn)Servlet接口?
2、servlet的生命周期中,可以看出,執(zhí)行的是service方法,為什么我們就只需要寫doGet和doPost方法呢?
7.參考文獻
鏈接:http://www.cnblogs.com/whgk/p/6399262.html
作者:一杯涼茶
鏈接:https://baike.baidu.com/item/Response%E5%AF%B9%E8%B1%A1/7465134?fr=aladdin
作者:百度百科
8.更多討論
jsp中的內(nèi)置對象在servlet中對應(yīng)的是什么?
servlet有九大內(nèi)置對象,其中對應(yīng)的關(guān)系如下:
1、out 來源于Java.io.Writer類,它用于發(fā)送輸出流到客戶端。
2、request 來源于javax.servlet.http.HttpServletRequest接口。它被關(guān)聯(lián)到每一個HTTP請求。
3、response 來源于javax.servlet.http.HttpServletResponse。response對象用于把取得的數(shù)據(jù)返回到客戶端。
4、pageContext 提供訪問JSP頁面的命名空間。它也提供用來訪問其他的JSP隱含對象。
5、session 來源于javax.servlet.http.HttpSession。它用于存儲客戶端請求的信息,因此它是有狀態(tài)交互式的。
6、application 來源于javax.servlet.ServletContext。
7、config 來源于ServletConfig,它包含了當前JSP/Servlet所在的WEB應(yīng)用的配置信息。
8、page 來源于當前被訪問JSP頁面的實例化。它實際使用的是JSP轉(zhuǎn)換成的Servlet。
9、exception 用于捕獲JSP拋出的異常。它只有在JSP頁面屬性isErrorPage=true時才可用。
2.關(guān)于程序Servlet的亂碼關(guān)系?
spring早就已經(jīng)做好了對應(yīng)的處理,只需要在程序中加入z:
3.Tomcat與Servlet
PPT鏈接:戳這里看PPT
騰訊視頻:騰訊視頻
技能樹.IT修真院
“我們相信人人都可以成為一個工程師,現(xiàn)在開始,找個師兄,帶你入門,掌控自己學習的節(jié)奏,學習的路上不再迷茫”。
這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導(dǎo)??靵砼c我一起學習吧