JavaWeb學習——Servlet相關的接口和類

JavaWeb學習——Servlet相關的接口和類

摘要:本文主要學習了Servlet相關的接口和類。html

Servlet的接口和類

三種方式

實現Servlet有三種方式:java

實現javax.servlet.Servlet接口。程序員

繼承javax.servlet.GenericServlet類。web

繼承javax.servlet.http.HttpServlet類。服務器

實現Servlet接口

Servlet接口是最基礎的接口,若是要使用Servlet,就要實現這個接口,或者繼承其餘已經實現了這個接口的類。app

建立一個類並實現Servlet接口:ide

 1 public class TestServlet implements Servlet {
 2     @Override
 3     public ServletConfig getServletConfig() {
 4         return null;
 5     }
 6 
 7     @Override
 8     public String getServletInfo() {
 9         return null;
10     }
11 
12     @Override
13     public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
14         System.out.println("service()方法被執行……");
15     }
16 
17     @Override
18     public void init(ServletConfig config) throws ServletException {
19         System.out.println("init()方法被執行……");
20     }
21 
22     @Override
23     public void destroy() {
24         System.out.println("destroy()方法被執行……");
25     }
26 }

繼承GenericServlet類

GenericServlet類實現並重寫了Servlet接口的一些方法,使得程序員在開發的時候只須要關注service()方法的實現就好。學習

建立一個類並繼承GenericServlet類:編碼

1 public class TestServlet extends GenericServlet {
2     @Override
3     public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
4         System.out.println("service()方法被執行……");
5     }
6 }

繼承HttpServlet類 

HttpServlet類繼承了GenericServlet類,是對HTTP請求的特殊支持,因爲開發的項目通常遵循HTTP協議,因此常常使用的是HttpServlet類。spa

在HttpServlet的service(HttpServletRequest, HttpServletResponse)方法會去判斷當前請求是GET仍是POST,若是是GET請求,那麼會去調用本類的doGet()方法,若是是POST請求會去調用doPost()方法,這說明在子類中去重寫doGet()或doPost()方法便可。

建立一個類並繼承HttpServlet類:

 1 public class TestServlet extends HttpServlet {
 2     @Override
 3     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 4         super.doGet(req, resp);
 5     }
 6     
 7     @Override
 8     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 9         super.doPost(req, resp);
10     }
11 }

其餘的接口和類

ServletConfig接口

表明當前Servlet的配置信息,封裝了ServletContext對象和配置參數信息。

能夠經過Servlet裏面的getServletConfig()方法獲取:

1 public ServletConfig getServletConfig();

經常使用方法:

1 public String getServletName();// 獲取當前Servlet的友好名稱。
2 public ServletContext getServletContext();// 獲取ServletContext對象。
3 public String getInitParameter(String name);// 獲取初始化參數,初始化參數能夠在web.xml配置文件的<servlet></servlet>標籤裏的<init-param></init-param>標籤裏設置。
4 public Enumeration<String> getInitParameterNames();// 獲取所有初始化參數,初始化參數一樣須要在web.xml配置文件的<servlet></servlet>標籤裏的<init-param></init-param>標籤裏設置。

ServletContext接口

表明當前Web應用,服務器爲每一個Web應用程序都建立一個對應的ServletContext對象,被全部客戶端共享。當Web應用啓動時自動建立,當Web應用關閉和從新啓動、服務器關閉時都會形成ServletContext銷燬。

能夠經過ServletConfig裏面的getServletContext()方法獲取:

1 public ServletContext getServletContext();

經常使用方法:

 1 public String getServletContextName();// 獲取當前項目的名稱。
 2 public String getServerInfo();// 返回Servlet容器名稱和版本號。
 3 public ServletContext getContext(String uripath);// 經過路徑獲取ServletContext對象。
 4 public String getContextPath();// 獲取服務器上當前項目的相對目錄。好比:/HelloWorld。
 5 public String getRealPath(String path);// 獲得指定文件的真實路徑,從應用程序根目錄開始。好比:TestServlet獲得的是盤符:\文件夾\工做空間\項目名稱\WebContent\TestServlet。
 6 public Set<String> getResourcePaths(String path);// 獲得指定相對路徑下的文件夾名和文件名,從應用程序根目錄開始,指定路徑必須以/開頭。好比:/獲得的是應用程序根目錄下的內容。
 7 public URL getResource(String path) throws MalformedURLException;// 獲得指定相對路徑下的地址,從應用程序根目錄開始。好比:/獲得的是jndi:/域名/項目名/。
 8 public InputStream getResourceAsStream(String path);// 將指定文件轉化爲流以便讀取,從應用程序根目錄開始。好比:index.html能夠獲取到應用程序根目錄下的index.html並轉爲流。
 9 public RequestDispatcher getRequestDispatcher(String path);// 建立跳轉到指定路徑的轉發器,從應用程序根目錄開始,指定路徑必須以/開頭。
10 public RequestDispatcher getNamedDispatcher(String name);// 建立跳轉到指定Servlet名的轉發器,不須要也不能以/開頭。
11 public String getInitParameter(String name);// 獲取指定的初始化參數,初始化參數須要在web.xml配置文件的<context-param></context-param>標籤裏設置。
12 public Enumeration<String> getInitParameterNames();// 獲取全部指定的初始化參數,初始化參數也須要在web.xml配置文件的<context-param></context-param>標籤裏設置。
13 public boolean setInitParameter(String name, String value);// 設置初始化參數,效果同在web.xml配置文件的<context-param></context-param>標籤裏設置的同樣。
14 public Object getAttribute(String name);// 經過屬性名獲取屬性對象。
15 public Enumeration<String> getAttributeNames();// 獲取所有屬性名。
16 public void setAttribute(String name, Object object);// 設置屬性名和屬性對象。
17 public void removeAttribute(String name);// 經過屬性名刪除屬性對象。

RequestDispatcher接口

RequestDispatcher實例對象是由Servlet引擎建立的,用於包裝一個要被其餘資源調用的資源,並能夠經過其中的方法將客戶端的請求轉發給所包裝的資源。

RequestDispatcher接口中定義了兩個方法:forward()方法和include()方法。forward()和include()方法接收的兩個參數,必須是傳遞給當前Servlet的service()方法的ServletRequest和ServletResponse對象,或者是對它們進行了包裝的ServletRequestWrapper和ServletResponseWrapper對象。

能夠經過ServletContext對象的getRequestDispatcher()方法和getNamedDispatcher()方法獲取:

1 public RequestDispatcher getRequestDispatcher(String path);
2 public RequestDispatcher getNamedDispatcher(String name);

請求轉發:

1 // 該方法用於將請求從一個Servlet傳遞到服務器上另外的Servlet、Jsp頁面或者Html文件,由當前的Servlet發送給另外一個Servlet,該方法必須在響應被提交給客戶端以前調用。
2 // 在當前的Servlet中能夠給請求設置屬性,設置的響應頭信息不回被忽略,可是設置的響應體信息可能會被忽略。
3 public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException;

請求包含:

1 // 該方法用於在響應中包含Servlet、Jsp頁面或者Html文件,由當前的Servlet發送給客戶端,必需要在當前Servlet中設置編碼格式。
2 // 當前Servlet和要包含的資源均可以設置響應體,按前後順序輸出到客戶端。
3 public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException;

請求轉發與請求包含比較:

請求轉發大可能是應用在Servlet中,轉發目標大可能是Jsp頁面。

請求包含大可能是應用在Jsp頁面中,完成多頁面的合併。

相關文章
相關標籤/搜索