1. 程式人生 > >Servlet系列(三)----Servlet核心API

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 serviceServletRequest requestServletResponse response

此方法用於處理客戶端請求。

public void destroy()

Servlet物件從Servlet容器中移除時,容器呼叫此方法,以便釋放資源

public ServletConfig getServletConfig()

此方法用於獲取Servlet物件的配置資訊,返回ServletConfig物件。

public String getServletInfo()

此方法返回有關Servlet的資訊,他是純文字格式的字串,如作者、版本等。

GenericServlet抽象類

GenericServlet類對Servlet介面進行了實現。他是一個抽象類,分別實現了Servlet

介面和ServletConfig介面,此類對除了service()外的其他方法進行了實現,在建立Servlet物件時,可以繼承GenericServlet類來簡化程式中的程式碼,但是需要實現service()方法。

HttpServlet抽象類

HttpServletGenericServlet類的子類。GenericServlet類對javax.servlet.Servlet介面進行了實現,為程式開發提供了方便。但是在實際開發中,大多數的應用都是使用Servlet處理HTTP協議的請求,並對請求作出迴應,所以通過整合GenericServlet類仍然不是很方便,javax.servlet.http.HttpServlet

類對GenericServlet類進行了擴充套件,為Http請求的處理提供了靈活的方法。

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型別,如GETPOST等。

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 sendRedirectString 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物件例項名