Servlet系列(三)----Servlet核心API
Servlet介面
Servlet的執行需要Servlet容器的支援Servlet容器通過呼叫Servlet物件提供了標準的API介面,對請求進行處理.在Servlet開發中,任何介面都要直接或間接實現javax.servlet.Servlet介面,該介面是Servlet API的核心介面,此介面提供了5個方法
方法 |
說明 |
public void init(ServletConfig config) |
Servlet例項化後,Servlet容器呼叫此方法完成初始化工作 |
public void service(ServletRequest request,ServletResponse response |
此方法用於處理客戶端請求。 |
public void destroy() |
當Servlet物件從Servlet容器中移除時,容器呼叫此方法,以便釋放資源 |
public ServletConfig getServletConfig() |
此方法用於獲取Servlet物件的配置資訊,返回ServletConfig物件。 |
public String getServletInfo() |
此方法返回有關Servlet的資訊,他是純文字格式的字串,如作者、版本等。 |
GenericServlet抽象類
GenericServlet類對Servlet介面進行了實現。他是一個抽象類,分別實現了Servlet
HttpServlet抽象類
HttpServlet是GenericServlet類的子類。GenericServlet類對javax.servlet.Servlet介面進行了實現,為程式開發提供了方便。但是在實際開發中,大多數的應用都是使用Servlet處理HTTP協議的請求,並對請求作出迴應,所以通過整合GenericServlet類仍然不是很方便,javax.servlet.http.HttpServlet
HttpServlet類仍然是一個抽象類,他對service()方法進行了實現,並針對HTTP1.1中定義的7中請求型別提供了相應的方法,分別是doGet(),doPost(),doPut()、doDelete()、doHead()、doTrace()、doOptions()。
HttpServletRequest介面
該介面位於javax.servlet.http包中,此介面繼承了javax.servlet.ServletRequest介面,是Servlet中的重要介面,在開發中經常用到。
下面看一下他的常用方法。
方法 |
說明 |
public String getContextPath() |
返回請求的上下文路徑,此路徑以/開頭 |
public Cookie[] getCookies() |
返回請求中傳送的所有Cookie物件,返回值為Cookie陣列 |
public String getMethod() |
返回請求所使用的HTTP型別,如GET、POST等。 |
public String getQueryString() |
返回請求中引數的字串形式,例如:請求為”MyServlet?username=mr”則返回”username=mr” |
public String getRequestURI() |
返回主機名到請求引數之間部分的字串形式 |
public StringBuffer getRequestURL() |
返回請求的URL,此URL中不包含請求的引數 |
public String getServletPath() |
返回請求URL中的Servlet路徑的字串,不包含引數 |
public HttpSession getSession() |
返回與請求關聯的HttpSession物件 |
具體使用方法如下:
package Servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HttpServletRequestDemo extends HttpServlet {
public HttpServletRequestDemo() {
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print("<p>上下文路徑:"+request.getContextPath()+"</p>");
out.print("<p>HTTP請求型別:"+request.getMethod()+"</p>");
out.print("<p>請求引數:"+request.getQueryString()+"</p>");
out.print("<p>請求URL:"+request.getRequestURI()+"</p>");
out.print("<p>請求URL:"+request.getRequestURL().toString()+"</p>");
out.print("<p>請求Servlet路徑:"+request.getServletPath()+"</p>");
out.flush();
out.close();
}
}
執行效果如下:
HttpServletResponse介面
HttpServletResponse介面位於javax.servlet.http包中,它繼承了javax.servlet.ServletResponse介面,此介面常用方法如下:
方法 |
說明 |
public void addCookie(Cookie cookie) |
向客戶端寫入Cookie資訊 |
public void sendError(int sec) |
傳送一個錯誤狀態碼為sec的錯誤相應到客戶端 |
public void sendError(int sc,String msg) |
傳送一個包含錯誤狀態碼以及錯誤資訊響應到客戶端,引數sc是錯誤狀態,引數msg是錯誤資訊 |
public void sendRedirect(String location) |
使用客戶端重定向到新的URL,引數location為新的地址。 |
例如:模擬一個開發中的異常,使用throw將他丟擲。
package Servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HttpServletResponseDemo extends HttpServlet {
public HttpServletResponseDemo() {
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
try{
throw new Exception("丟擲異常!");
}catch(Exception e){
response.sendError(500, e.getMessage());
}
out.flush();
out.close();
}
}
執行結果如下:
ServletConfig介面
ServletConfig介面位於javax.servlet包中,該介面用於封裝Servlet的初始化引數資訊,在Servlet初始化期間被傳遞,每一個Servlet都有且只有一個ServletConfig物件,此介面中定義了四個方法:
方法 |
引數 |
public String getInitParameter(String name) |
此方法返回String型別名稱為name的初始化引數值 |
public Enumeration getInitParameterNames() |
獲取所有初始化引數名的列舉集合 |
public ServletContext getServletContext() |
用於獲取Servlet上下文物件 |
public String getServletName() |
返回Servlet物件例項名 |