Servlet基本用法二介面和類,servlet用法介面
一、摘要
本文主要簡單介紹開發Servlet需要用到的介面和類。
二、ServletRequest和ServletResponse介面
當客戶請求到來時,由容器建立一個ServletRequest對象,封裝請求資料,同時建立一個ServletResponse對象,封裝響應資料。這兩個對象作為參數傳遞給service方法。
這兩個介面都用很多方法,這裡就不逐一介紹。
HttpServletRequest和HttpServletResponse分別繼承自ServletRequest和ServletResponse介面。
三、ServletConfig介面
Servlet容器使用ServletConfig對象在Servlet初始化期間向它傳遞配置資訊,一個Servlet對象只有一個|ServletConfig對象。該介面中定義下述四個方法:
//返回名字為name的初始化參數的值 String getInitParameter(String name); //返回所有初始化參數的的名字的枚舉集合 Enumeration getInitParameterNames() ; //返回Servlet內容物件的引用 ServletContext getServletContext(); //返回Servlet執行個體的名字 String getServletName() ;
該幾個方法的簡單例子代碼如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //返回名字為name的初始化參數的值 System.out.println(getServletConfig().getInitParameter("name")); //返回所有初始化參數的的名字的枚舉集合 Enumeration<String> paraNames=this.getServletConfig().getInitParameterNames(); for(Enumeration e=paraNames;e.hasMoreElements();) { String name=e.nextElement().toString(); String value=getServletConfig().getInitParameter(name); System.out.println(name+"-----"+value); } //返回Servlet內容物件的引用 System.out.println(getServletConfig().getServletContext().getContextPath()); //返回Servlet執行個體的名字 System.out.println(getServletConfig().getServletName()) ; }
輸出結果為:
四、ServletContext介面
ServletContext介面用來表示上下文,該介面定義一組方法,Servlet可以使用這些方法與它的Servlet容器進行通訊。ServletContext對象是Web伺服器中一個已知路徑的根。我們可以通過ServletConfig對象的getServletContext方法來得到ServletContext對象,也可以調用GenericServlet類的getServletContext方法得到ServletContext對象。
一個Web應用程式只有一個ServletContext對象,該對象可以被Web應用程式的所有Servlet所訪問,因此通常使用Servlet對象儲存一些需要在Web應用程式中共用的資訊。eg,統計頁面訪問量的小例子,代碼如下:
public class ContextDemo extends HttpServlet{ private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context=getServletContext(); Integer count=null; synchronized(context) { count=(Integer)context.getAttribute("counter"); if(count==null) { count=new Integer(1); } else { count=new Integer(count.intValue()+1); } context.setAttribute("counter", count); } response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); out.println("<html><head><title>頁面訪問統計</title></head><body>"); out.println("該頁面已被訪問了"+"<b>"+count+"</b>"+"次"); out.println("</body></html>"); out.close(); }
五、RequestDispatcher介面
RequestDispatcher對象用於封裝一個由路徑所標識的伺服器資源,利用RequestDispatcher對象可以將請求轉寄給其他的Servlet或者JSP頁面。
兩種方法可以擷取該對象,一種是從ServletRequest介面的getRequestDispatcher方法擷取,另一種是從ServletContext介面的getRequestDispatcher擷取。兩者的區別是參數的資源的路徑名,前者不但可以是相對於上下文根的路徑名,而且可以是相對於當前Servlet的路徑,而後者只能是是相對於上下文根的路徑名。
在RequestDispatcher介面中定義了兩種方法:
forward(req,resp)和include(req,resp),兩者的區別是前者將請求轉寄給其他的Servlet,將由被調用的Servlet負責對請求作出相應,而原先Servlet的執行則終止。而後者將調用的Servlet對請求作出的響應併入原先的響應對象中,原先的Servlet還可以繼續輸出響應資訊。範例程式碼如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //該方法用於在響應中包含其他資源的內容並從ServletContext介面得到RequestDispatcher對象 /*RequestDispatcher rd=this.getServletContext().getRequestDispatcher("/hello.html"); rd.include(request, response);*/ //該方法用於將請求從一個Servlet傳遞給伺服器上另外的Servlet、JSP頁面或者是HTML檔案。 /*RequestDispatcher rd=this.getServletContext().getRequestDispatcher("/hello.html"); rd.forward(request, response);*/ //從ServletRequest介面得到RequestDispatcher對象 RequestDispatcher rd=request.getRequestDispatcher("hello.html"); rd.include(request, response); }