您好,登錄后才能下訂單哦!
Servlet是java web中的動(dòng)態(tài)資源,是三大組件(Servlet,Filter,Listener)之一,用于處理客戶端的請(qǐng)求,并作出相應(yīng),具體用法為:
一,實(shí)現(xiàn)Servlet的三種方式:
1.實(shí)現(xiàn)javax.servlet.Servlet接口
public class ServletOne implements Servlet{
public void destroy(){}
public ServletConfig getServletConfig(){}
public String getServletInfo(){}
public void init(ServletConfig arg0) throws ServletException {}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {}
}
(1).init()方法在Servlet創(chuàng)建時(shí)被調(diào)用
(2).destroy()方法在Servlet銷毀時(shí)創(chuàng)建
(3).service()方法每請(qǐng)求一次servelt調(diào)用一次
2.繼承javax.servlet.GenericServlet,并重寫其所有的抽象方法
public class ServletTwo extends GenericServlet{
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {}
}
3.繼承javax.servlet.http.HttpServlet
public class ServletFour extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}
(1).doGet()處理get請(qǐng)求
(2).doPost()處理post請(qǐng)求
注:用此方法實(shí)現(xiàn)的Servlet只能處理http協(xié)議的請(qǐng)求
二,配置Servlet
通過以上方式定義好了一個(gè)Servlet,但此時(shí)的Servlet還不能處理客戶端請(qǐng)求,因?yàn)闆]有給此Servlet指定處理來自客戶端的那個(gè)請(qǐng)求,因此要把此Servlet配置成能處理客戶端請(qǐng)求的Servlet。在WebContent/WEB-INF/web.xml中配置如下:
<servlet>
<servlet-name>one</servlet-name>
<servlet-class>com.web.servlet.ServletOne</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>one</servlet-name>
<url-pattern>/one</url-pattern>
</servlet-mapping>
一個(gè)<servlet>標(biāo)簽就把一個(gè)Servlet和一個(gè)名字綁定在了一起,一個(gè)<servlet-mapping>標(biāo)簽就把一個(gè)servlet名字和一個(gè)路徑綁定在了一起,因此經(jīng)過此配置客戶端就可以通過訪問 http://localhost:8080/項(xiàng)目名/one 這一個(gè)路徑來訪問 com.web.servlet.ServletOne 這個(gè)Servlet。當(dāng)然一個(gè)<servlet-mapping> 標(biāo)簽也可以有多個(gè)<url-pattern>標(biāo)簽,來給一個(gè)Servlet綁定多個(gè)訪問路徑,如:
<servlet-mapping>
<servlet-name>TServlet</servlet-name>
<url-pattern>/login</url-pattern>
<url-pattern>/log</url-pattern>
</servlet-mapping>
也可以在<servlet-mapping>標(biāo)簽中使用通配符*來指定訪問路徑,但是*不能出現(xiàn)在路徑的中間位置如:
<url-pattern>/servlet/*</url-pattern> 對(duì)的
<url-pattern>*.do</url-pattern> 對(duì)的
<url-pattern>/*.do</url-pattern> 錯(cuò)的
那么就會(huì)出現(xiàn)一個(gè)地址同時(shí)匹配一個(gè)精確的<url-pattern>和一個(gè)使用了通配符的<url-mapping>,此時(shí)會(huì)優(yōu)先選擇精確<url-mapping>所綁定的Servlet。
三,域?qū)ο?/span>
域?qū)ο笫侵冈谝欢ㄗ饔糜虮还蚕淼膶?duì)象,在Servlet中有四大域?qū)ο螅篠ervletContext,HttpSession,ServletRequest,PageContext,注意:PageContext是jsp的九大內(nèi)置對(duì)象之一,因?yàn)閖sp是一個(gè)特殊的Servlet,故這里將PageContext也算在內(nèi)。域?qū)ο笸ㄓ玫牟僮鲗傩缘姆椒椋?br/>
void setAttribute(String name,Object obj) 網(wǎng)域?qū)ο笾斜4嬉粋€(gè)屬性
Object getAttribute(String name) 從域?qū)ο笾蝎@取一個(gè)屬性值
void removeAttribute(String name) 從域?qū)ο笾幸瞥粋€(gè)屬性
四,獲取資源文件
1.獲取資源的真實(shí)路徑:
ServletContext context = getServletContext()
String path = context.getRealPath("/a.txt")
2.獲取資源流:
InputStream in = context.getResourceAsStream("/a.txt")
注:以上參數(shù)必須以 / 開頭,表示相對(duì)于項(xiàng)目
3.獲取類路徑下的資源
對(duì)于web項(xiàng)目來說,當(dāng)把項(xiàng)目發(fā)布后就沒有 src 這個(gè)目錄,所以在拿類路徑下的資源文件時(shí),就不能用 new InputStream("") 這種方式來獲取。此時(shí)src目錄就相當(dāng)于WebContent/WEB-INF/classes目錄,可以用兩種方式來獲取
(1).類.getResourceAsStream(String path)
path以 / 開頭表示路徑相對(duì)于 classes
path不以 / 開頭表示路徑相對(duì)于當(dāng)前類
(2).類.getClassLoader().getResourceAsStream(String path)
此時(shí)path只想對(duì)于classes
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。