辽阳剐什教育咨询有限公司

有關(guān)Servlet和JSP的梳理

有關(guān)Servlet和JSP的梳理
  • 作者:杭州俍辰科技有限公司
  • 發(fā)表時(shí)間:2017-06-17

大二第一學(xué)期的時(shí)候有學(xué)JSP的課,但是因?yàn)樵陂_學(xué)之前做過JSP的小項(xiàng)目,所以一個(gè)學(xué)期的課也沒聽,直到期末考試成績(jī)出來了,才回想JSP的內(nèi)容還有多少記得,沒想到模模糊糊也記不起多少,趕緊回頭學(xué)回來。接下來是關(guān)于Servlet和JSP的梳理。

-------------------------------------------------------------------------------------------------------------------------------------------------

  Servlet是一個(gè)Java程序,一個(gè)Servlet應(yīng)用有一個(gè)或多個(gè)Servlet程序,而且JSP頁面也會(huì)被轉(zhuǎn)換和編譯成Servlet程序。

  Servlet應(yīng)用無法獨(dú)立運(yùn)行,必須運(yùn)行在Servlet容器中。Servlet容器將用戶的請(qǐng)求傳遞給Servlet應(yīng)用,并將結(jié)果返回給用戶。由于大部分Servlet應(yīng)用都包含多個(gè)JSP頁面,因此更準(zhǔn)確地說是“Servlet/JSP應(yīng)用”。

  其中,Servlet API是開發(fā)Servlet的主要技術(shù)。而Servlet API有以下4個(gè)Java包:

Java

包含的內(nèi)容

javax.servlet

定義Servlet和Servlet容器之間契約的類和接口

javax.servlet.http

定義HTTP Servlet和Servlet容器之間契約的類和接口

javax.servlet.annotation

標(biāo)注Servlet、Filter、Listener的標(biāo)注。它還被標(biāo)注原件定義元數(shù)據(jù)

javax.servlet.descriptor

包含提供程序化登陸web應(yīng)用程序的配置信息的類型。

  Servlet技術(shù)的核心是Servlet,它是所有Servlet類必須直接或間接實(shí)現(xiàn)的一個(gè)接口,而Servlet接口定義了Servlet與Servlet容器之間的契約。這個(gè)契約歸結(jié)起來就是,Servlet容器將Servlet類載入內(nèi)存,并在Servlet實(shí)例上調(diào)用具體的方法。當(dāng)用戶的請(qǐng)求使得Servlet容器調(diào)用Servlet的Service方法,會(huì)傳入一個(gè)ServletRequest實(shí)例和一個(gè)ServletResponse實(shí)例,其中,ServletRequest中封裝了當(dāng)前的HTTP請(qǐng)求,而ServletResponse表示當(dāng)前用戶的HTTP響應(yīng)。對(duì)于每一個(gè)應(yīng)用程序,Servlet容器還會(huì)創(chuàng)建一個(gè)ServletContext實(shí)例,這個(gè)對(duì)象中封裝了上下文(應(yīng)用程序)的環(huán)境詳情。每個(gè)上下文只有一個(gè)ServletContext,而且每個(gè)Servlet實(shí)例都有一個(gè)配置的ServletConfig。

 

 Servlet的生命周期方法:

  

Servlet容器的生命周期方法

作用

init

該方法在Servlet第一次被請(qǐng)求的時(shí)候,Servlet就會(huì)調(diào)用這個(gè)方法,而后不再被調(diào)用,所以可以用這個(gè)方法進(jìn)行初始化工作。調(diào)用這個(gè)方法時(shí),Servlet容器會(huì)傳入一個(gè)ServletConfig。

Service

每當(dāng)請(qǐng)求Servlet時(shí),Servlet容器就會(huì)調(diào)用這個(gè)方法。第一次請(qǐng)求Servlet時(shí),Servlet容器調(diào)用init方法和Service方法。后續(xù)的請(qǐng)求將只調(diào)用Service方法。

destroy

當(dāng)要銷毀Servlet時(shí),Servlet容器就會(huì)調(diào)用這個(gè)方法。一般會(huì)在這個(gè)方法中編寫清除代碼。

  在介紹一個(gè)Servlet中另外兩個(gè)非生命周期的方法:

Servlet容器的非生命周期方法

作用

getServletInfo

這個(gè)方法會(huì)返回Servlet的描述

getServletConfig

這個(gè)方法會(huì)返回由Servlet容器傳給init方法的ServletConfig。

但是為了讓getServletConfig返回一個(gè)非null值,必須將傳給init方法的ServletConfig賦給一個(gè)類級(jí)變量。

-------------------------------------------------------------------------------------------------------------------------------------------------

   接下來是Servlet的各類接口:

  ServletRequest

 

接口

說明

ServletRequest

對(duì)于每一個(gè)HTTP請(qǐng)求,Servlet容器都會(huì)創(chuàng)建一個(gè)ServletRequest實(shí)例,并將它傳給Servlet的Service方法。ServletRequest封裝了關(guān)于這個(gè)請(qǐng)求的信息。

  常用的方法有:

    

方法

說明

public int getContentLength()

返回請(qǐng)求主體的字節(jié)數(shù)。

public java.lang.String getContentType()

返回請(qǐng)求主體的MIME類型。

public java.lang.String getParameter(java.lang.String name)

返回指定請(qǐng)求參數(shù)的值

public java.lang.String getProtocol()

返回這個(gè)HTTP請(qǐng)求的協(xié)議名稱和版本

  ServletResponse

接口

說明

ServletResponse

該接口表示一個(gè)Servlet響應(yīng)。在調(diào)用Servlet的Service方法前,Servlet容器首先創(chuàng)建一個(gè)ServletResponse,并將它作為第二個(gè)參數(shù)傳給Service方法。ServletResponse隱藏了向?yàn)g覽器發(fā)送響應(yīng)的復(fù)雜過程。

  常用的方法:

 

方法

說明

getWriter()

返回了一個(gè)可以向客戶端發(fā)送文本的java.io.PrintWriter。默認(rèn)情況下,PrintWriter對(duì)象使用ISO-8859-1編碼。

setContentType(“type”)

設(shè)置響應(yīng)的內(nèi)容類型,并將”text/html”作為一個(gè)參數(shù)傳入。如果沒有設(shè)置相應(yīng)內(nèi)容類型,有些瀏覽器就會(huì)將HTML標(biāo)簽顯示為普通文本。

  ServletConfig

  

接口

說明

ServletConfig

用于存儲(chǔ)關(guān)于Servlet的配置信息。

當(dāng)Servlet容器初始化Servlet時(shí),Servlet容器會(huì)給Servlet的init()方法傳入一個(gè)ServletConfig。ServletConfig封裝可以通過@WebServlet或描述符傳給Servlet的配置信息。

   常用的方法:

 

方法

說明

java.lang.String getInitParameter(java,lang.String name)

為了從Servlet內(nèi)部獲取到初始參數(shù)的值,要在Servlet容器傳給Servlet的init方法的ServletConfig中調(diào)用getInitParameter方法。

java.util.Enumration<java.lang.String> getInitParameterNames()

返回所有初始參數(shù)名稱的一個(gè)Enumeration。

String contactName = servletConfig.getInitParameter(“contactName”)

獲取contactName參數(shù)值

  ServletContext

接口

說明

ServletContext

每個(gè)Web應(yīng)用程序只有一個(gè)上下文,所以ServletContext可以存儲(chǔ)這個(gè)上下文,并且ServletContext還可以共享從應(yīng)用程序中的所有資料處訪問到的信息,并且可以動(dòng)態(tài)注冊(cè)Web對(duì)象,而且是用ServletContext內(nèi)部的Map保存。

  常用的方法:

 

方法

說明

getServletContext().getInitParameter(String name)

獲取在項(xiàng)目下的web.xml中設(shè)置context的初始化參數(shù)

this.getServletContext().log(“測(cè)試”)

在web.xml文件中,使用logger元素來設(shè)置日志文件

getAttribute(String name)/get AttributeNames()

獲取ServletContext中的屬性

setAttribute(String name, Object object)

設(shè)置ServletContext中的屬性

removeAttribute(String name)

移除ServletContext中的屬性

  GenericServlet

接口

說明

GenericServlet

GenericServlet實(shí)現(xiàn)了Servlet和ServletConfig接口。將init方法中的ServletConfig賦給一個(gè)類級(jí)變量,以便可以通過getServletConfig獲取,為Servlet接口中的所有方法提供默認(rèn)的實(shí)現(xiàn),而且提供包括ServletConfig中的方法。

  Http Servlets

    

接口

說明

HttpServlet

HttpServlet類覆蓋了javax.servlet.GenericServlet類。使用HttpServlet時(shí),還要借助分別代表Servlet請(qǐng)求和Servlet響應(yīng)的HttpServletRequest和HttpServletResponse對(duì)象。而HttpServlet與GenericServlet的差別在于,HttpServlet覆蓋的是doGet或者doPost方法,而不是Service方法,而且使用的是HttpServletRequest和HttpServletResponse,而不是ServletRequest和ServletResponse。

HttpServletRequest

表示HTTP環(huán)境中的Servlet請(qǐng)求

HttpServletResponse

表示HTTP環(huán)境中的Servlet響應(yīng)

  各個(gè)接口常用的方法如下:

  

接口

方法

說明

 HttpServletRequest

java.lang.String getContextPath()

返回表示請(qǐng)求上下文的請(qǐng)求URI部分。

 HttpServletRequest

Cookie[] getCookies()

返回一個(gè)Cookie對(duì)象的數(shù)組。

 HttpServletRequest

java.lang.String getHeader(java.lang.String name)

返回指定HTTP標(biāo)題的值。

 HttpServletRequest

java.lang.String getMethod()

返回生成這個(gè)請(qǐng)求的HTTP方法名稱

 HttpServletRequest

java.lang.String getQueryString()

返回請(qǐng)求URL中的查詢字符串。

 HttpServletRequest

HttpSession getSession()

返回與這個(gè)請(qǐng)求相關(guān)的會(huì)話對(duì)象。如果沒有,將創(chuàng)建一個(gè)新的會(huì)話對(duì)象。

 HttpServletRequest

HttpSession getSession(Boolean create)

返回與這個(gè)請(qǐng)求相關(guān)的繪畫對(duì)象,如果有,并且create參數(shù)為True,將創(chuàng)建一個(gè)新的會(huì)話對(duì)象。

 HttpServletResponse

void addCookie(Cookie cookie)

給這個(gè)響應(yīng)對(duì)象添加一個(gè)cookie。

 HttpServletResponse

void addHeader(java.lang.String name, java.lang.String value)

給這個(gè)響應(yīng)對(duì)象添加一個(gè)header。

 HttpServletResponse

void sendRedirect(java.lang.String location)

發(fā)送一條響應(yīng)碼,將瀏覽器跳轉(zhuǎn)到指定的位置。

-------------------------------------------------------------------------------------------------------------------------------------------------

  當(dāng)用戶提交HTML表單時(shí),在表單元素中輸入的值就會(huì)被當(dāng)作請(qǐng)求參數(shù)發(fā)送到服務(wù)器。HTML輸入域(文本域、隱藏域或者密碼域)或者文本區(qū)的值,會(huì)被當(dāng)作字符串發(fā)送到服務(wù)器。空的輸入域或者文本區(qū)會(huì)發(fā)送空的字符串。

  包含多個(gè)值的select元素發(fā)出一個(gè)字符串?dāng)?shù)組,可以通過ServletRequest.getParameterValues進(jìn)行處理。

  核查過的復(fù)選框會(huì)發(fā)送字符串"on"到服務(wù)器,未經(jīng)核查的復(fù)選框則不向服務(wù)器發(fā)送任何內(nèi)容,ServletRequest.getParameter(fieldName)返回null。

  單選框?qū)⒈贿x中按鈕的值發(fā)送到服務(wù)器。如果沒有選擇任何按鈕,將沒有任何內(nèi)容被發(fā)送到服務(wù)器,并且ServletRequest.getParameter(fieldName)返會(huì)null。

  如果一個(gè)表單中包含多個(gè)輸入同名的元素,那么所有值都會(huì)被提交,并且必須利用ServletRequest.getParameterValues來獲取它們。ServletRequest.getParameter將只返回最后一個(gè)值。


上一條:傳愛奇藝在美提交IPO申請(qǐng) 融資10億美元
下一條:微信已支持改微信號(hào):一年可修改一次