Servlet是java web中的動態資源,是三大組件(Servlet,Filter,Listener)之一,用于處理客戶端的請求,并作出相應,具體用法為:
一,實現Servlet的三種方式:
1.實現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創建時被調用
(2).destroy()方法在Servlet銷毀時創建
(3).service()方法每請求一次servelt調用一次
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請求
(2).doPost()處理post請求
注:用此方法實現的Servlet只能處理http協議的請求
二,配置Servlet
通過以上方式定義好了一個Servlet,但此時的Servlet還不能處理客戶端請求,因為沒有給此Servlet指定處理來自客戶端的那個請求,因此要把此Servlet配置成能處理客戶端請求的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>
一個<servlet>標簽就把一個Servlet和一個名字綁定在了一起,一個<servlet-mapping>標簽就把一個servlet名字和一個路徑綁定在了一起,因此經過此配置客戶端就可以通過訪問 http://localhost:8080/項目名/one 這一個路徑來訪問 com.web.servlet.ServletOne 這個Servlet。當然一個<servlet-mapping> 標簽也可以有多個<url-pattern>標簽,來給一個Servlet綁定多個訪問路徑,如:
<servlet-mapping>
<servlet-name>TServlet</servlet-name>
<url-pattern>/login</url-pattern>
<url-pattern>/log</url-pattern>
</servlet-mapping>
也可以在<servlet-mapping>標簽中使用通配符*來指定訪問路徑,但是*不能出現在路徑的中間位置如:
<url-pattern>/servlet/*</url-pattern> 對的
<url-pattern>*.do</url-pattern> 對的
<url-pattern>/*.do</url-pattern> 錯的
那么就會出現一個地址同時匹配一個精確的<url-pattern>和一個使用了通配符的<url-mapping>,此時會優先選擇精確<url-mapping>所綁定的Servlet。
三,域對象
域對象是指在一定作用域被共享的對象,在Servlet中有四大域對象:ServletContext,HttpSession,ServletRequest,PageContext,注意:PageContext是jsp的九大內置對象之一,因為jsp是一個特殊的Servlet,故這里將PageContext也算在內。域對象通用的操作屬性的方法為:
void setAttribute(String name,Object obj) 網域對象中保存一個屬性
Object getAttribute(String name) 從域對象中獲取一個屬性值
void removeAttribute(String name) 從域對象中移除一個屬性
四,獲取資源文件
1.獲取資源的真實路徑:
ServletContext context = getServletContext()
String path = context.getRealPath("/a.txt")
2.獲取資源流:
InputStream in = context.getResourceAsStream("/a.txt")
注:以上參數必須以 / 開頭,表示相對于項目
3.獲取類路徑下的資源
對于web項目來說,當把項目發布后就沒有 src 這個目錄,所以在拿類路徑下的資源文件時,就不能用 new InputStream("") 這種方式來獲取。此時src目錄就相當于WebContent/WEB-INF/classes目錄,可以用兩種方式來獲取
(1).類.getResourceAsStream(String path)
path以 / 開頭表示路徑相對于 classes
path不以 / 開頭表示路徑相對于當前類
(2).類.getClassLoader().getResourceAsStream(String path)
此時path只想對于classes
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。