摘要:概述是公司提供的一門(mén)用于開(kāi)發(fā)動(dòng)態(tài)資源的技術(shù)。把開(kāi)發(fā)好的類(lèi)部署到服務(wù)器中。應(yīng)用程序被停止或重新啟動(dòng)之前,引擎將卸載,并在卸載之前調(diào)用的方法。
servlet概述
Servlet是sun公司提供的一門(mén)用于開(kāi)發(fā)動(dòng)態(tài)web資源的技術(shù)。
Sun公司在其API中提供了一個(gè)servlet接口,用戶(hù)若想用發(fā)一個(gè)動(dòng)態(tài)web資源(即開(kāi)發(fā)一個(gè)Java程序向?yàn)g覽器輸出數(shù)據(jù)),需要完成以下2個(gè)步驟:
(1)編寫(xiě)一個(gè)Java類(lèi),實(shí)現(xiàn)servlet接口。 (2)把開(kāi)發(fā)好的Java類(lèi)部署到web服務(wù)器中。 (3)按照一種約定俗成的稱(chēng)呼習(xí)慣,通常我們也把實(shí)現(xiàn)了servlet接口的java程序,稱(chēng)之為Servlet
servlet運(yùn)行過(guò)程:
(1)Servlet程序是由WEB服務(wù)器調(diào)用,web服務(wù)器收到客戶(hù)端的Servlet訪問(wèn)請(qǐng)求后: ①Web服務(wù)器首先檢查是否已經(jīng)裝載并創(chuàng)建了該Servlet的實(shí)例對(duì)象。如果是,則直接執(zhí)行第④步,否則,執(zhí)行第②步。 ②裝載并創(chuàng)建該Servlet的一個(gè)實(shí)例對(duì)象。 ③調(diào)用Servlet實(shí)例對(duì)象的init()方法。 ④創(chuàng)建一個(gè)用于封裝HTTP請(qǐng)求消息的HttpServletRequest對(duì)象和一個(gè)代表HTTP響應(yīng)消息的HttpServletResponse對(duì)象,然后調(diào)用Servlet的service()方法并將請(qǐng)求和響應(yīng)對(duì)象作為參數(shù)傳遞進(jìn)去。 ⑤WEB應(yīng)用程序被停止或重新啟動(dòng)之前,Servlet引擎將卸載Servlet,并在卸載之前調(diào)用Servlet的destroy()方法。IDEA創(chuàng)建第一個(gè)servlet程序
選中自己的project,打開(kāi)Project Structure界面》》選中Libraries》》點(diǎn)擊"+"并選擇java》》選擇并選中自己的tomcat/lib/servlet-api.jar》》Apply》》OK
通過(guò)idea創(chuàng)建servlet,選中項(xiàng)目的src目錄,右鍵選擇new
創(chuàng)建一個(gè)servlet,命名為testServlet
創(chuàng)建成功后testServlet.java文件中有一行關(guān)鍵的代碼:
@WebServlet(name = "TestServlet") 備注:可以加上具體的urlPattern參數(shù)來(lái)定義servlet的具體的請(qǐng)求的URL,如下 @WebServlet(name = "TestServlet",urlPatterns = "/test")
示例代碼:
示例代碼分享:
關(guān)于servlet之http請(qǐng)求的request與response對(duì)象:
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; import java.util.Arrays; import java.util.Enumeration; import java.util.Arrays; @WebServlet(name = "testServlet",urlPatterns = "/test") public class testServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //請(qǐng)求頭,請(qǐng)求行,請(qǐng)求體 System.out.println("請(qǐng)求行:"); System.out.println("url:"+request.getRequestURL()); System.out.println("uri"+request.getRequestURI()); System.out.println("methord:"+request.getMethod()); System.out.println("querystring:"+request.getQueryString()); System.out.println("addr:"+request.getRemoteAddr()); System.out.println("host:"+request.getRemoteHost()); System.out.println("--------------------"); System.out.println("請(qǐng)求頭:"); EnumerationheaderNames = request.getHeaderNames(); while(headerNames.hasMoreElements()){ String key = headerNames.nextElement(); String value = request.getHeader(key); System.out.println(key+"="+value); } System.out.println("--------------------"); System.out.println("請(qǐng)求體:"); Enumeration params = request.getParameterNames(); while (params.hasMoreElements()){ String key = params.nextElement(); //接收的參數(shù)中一般有中文,注意編碼 String value = request.getParameter(key); value = new String(value.getBytes("iso-8859-1"),"UTF-8"); System.out.println(key+"="+value); } System.out.println("--------------------"); //開(kāi)始response //1.二進(jìn)制流方式輸出 response.setContentType("text/html;charset=UTF-8");//一定要做編碼的設(shè)置,否則瀏覽器可能輸出亂碼 //response.getOutputStream().write("中國(guó)".getBytes("UTF-8")); //2.字符流方式輸出 response.getWriter().write("字符流"); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74336.html
摘要:系列文章請(qǐng)查看超詳細(xì)的面試題總結(jié)一之基礎(chǔ)知識(shí)篇超詳細(xì)的面試題總結(jié)二之基礎(chǔ)知識(shí)篇超詳細(xì)的面試題總結(jié)三之集合篇常見(jiàn)問(wèn)題下面的都是自己之前在學(xué)習(xí)的時(shí)候總結(jié)的,對(duì)于鞏固的基礎(chǔ)知識(shí)應(yīng)該有很大幫助。注意多線程的并發(fā)的讀寫(xiě)類(lèi)屬性會(huì)導(dǎo)致數(shù)據(jù)不同步。 系列文章請(qǐng)查看: 超詳細(xì)的Java面試題總結(jié)(一)之Java基礎(chǔ)知識(shí)篇 超詳細(xì)的Java面試題總結(jié)(二)之Java基礎(chǔ)知識(shí)篇 超詳細(xì)的Java面試題總結(jié)(...
摘要:出現(xiàn)的目的同一樣也是要提到頁(yè)面中的腳本代碼。標(biāo)準(zhǔn)標(biāo)準(zhǔn)標(biāo)簽庫(kù)有個(gè)子庫(kù),但隨著發(fā)展,目前常使用的是他的核心庫(kù)標(biāo)簽庫(kù)標(biāo)簽庫(kù)的前綴下載與導(dǎo)入下載從的網(wǎng)站下載的包。 一、JSP技術(shù)1.jsp腳本和注釋jsp腳本:1) ----- 內(nèi)部的java代碼翻譯到service方法的內(nèi)部2) ----- 會(huì)被翻譯成service方法內(nèi)部out.print()3) ---- 會(huì)被翻譯成servlet的成員的...
摘要:協(xié)議版本請(qǐng)求頭客戶(hù)端向服務(wù)器端表示,我能支持什么類(lèi)型的數(shù)據(jù)。在地址欄上輸入項(xiàng)目名稱(chēng)向報(bào)告,我這個(gè)應(yīng)用里面有這個(gè),名字叫做具體的路徑是注冊(cè)的映射。的配置,通過(guò)這個(gè)對(duì)象,可以獲取在配置的時(shí)候一些信息先說(shuō),在寫(xiě)怎么用,最后說(shuō)有什么用。 1.Http協(xié)議 什么是協(xié)議 雙方在交互、通訊的時(shí)候, 遵守的一種規(guī)范、規(guī)則。 http協(xié)議 針對(duì)網(wǎng)絡(luò)上的客戶(hù)端 與 服務(wù)器端在執(zhí)行http請(qǐng)求的時(shí)候...
摘要:當(dāng)后繼請(qǐng)求相同的頁(yè)面時(shí),容器加載之前生成的類(lèi),并且通知去執(zhí)行已經(jīng)存在的字節(jié)碼,從而省去了轉(zhuǎn)換的過(guò)程,這也是第一次執(zhí)行頁(yè)面時(shí)間較長(zhǎng)的原因。 以往學(xué)習(xí)的時(shí)候大多是看完書(shū)或者看完視頻,動(dòng)手實(shí)踐一下就OK了。然而過(guò)了一段時(shí)間我發(fā)現(xiàn)東西都忘差不多了,需要復(fù)習(xí)才能重新掌握?,F(xiàn)在開(kāi)始學(xué)習(xí)JavaWeb了,我將在這里記錄自己的學(xué)習(xí)的一點(diǎn)一滴,不僅便于自己以后回顧知識(shí)點(diǎn),也希望能對(duì)JavaWeb初學(xué)者有...
摘要:創(chuàng)建與銷(xiāo)毀對(duì)象是發(fā)送請(qǐng)求服務(wù)器就會(huì)創(chuàng)建它,當(dāng)響應(yīng)產(chǎn)生時(shí),對(duì)象就會(huì)銷(xiāo)毀。是容器為開(kāi)發(fā)人員提供的對(duì)象,它提供了對(duì)某一資源的已過(guò)濾請(qǐng)求調(diào)用鏈的視圖。 一、Listener監(jiān)聽(tīng)器 Javaweb開(kāi)發(fā)中的監(jiān)聽(tīng)器,是用于監(jiān)聽(tīng)web常見(jiàn)對(duì)象 HttpServletRequest HttpSession ServletContext 監(jiān)聽(tīng)它們的創(chuàng)建與銷(xiāo)毀 屬性變化 session綁...
閱讀 3569·2023-04-25 16:35
閱讀 714·2021-10-11 11:09
閱讀 6192·2021-09-22 15:11
閱讀 3362·2019-08-30 14:03
閱讀 2604·2019-08-29 16:54
閱讀 3356·2019-08-29 16:34
閱讀 3063·2019-08-29 12:18
閱讀 2132·2019-08-28 18:31