`
scenery_86
  • 浏览: 46940 次
社区版块
存档分类
最新评论

Servlet与JSP隐含对象的对应关系

    博客分类:
  • Jsp
阅读更多
在JSP中可以使用 request、response、session 等等的隱含物件,這些隱含物件在轉換為Servlet之後,會對應於Servlet中的一些型態,這在之前談論隱含物件時曾經說明過,如果您會使用隱含物件,並瞭解如何撰寫Java程式,那麽您對於在Servlet中如何使用相對應的物件並不困難,在這邊則只看看如何在Servlet中取得這些對應的物件,然後您可以回顧一下之前介紹過的JSP隱含物件,瞭解這些物件可以如何應用。

request對應於HttpServletRequest,而response對應於HttpServletResponse,如果您繼承 HttpServlet,在Container呼叫Servlet的service()方法,或是接下來的doXXX()等方法,都會以這兩個物件作為參數傳入:

 service(HttpServletRequest req, HttpServletResponse res) 
 doGet(HttpServletRequest req, HttpServletResponse res) 
 doPost(HttpServletRequest req, HttpServletResponse res) 
 .... 

 

application 對應于 ServletContext,在繼承GenericServlet或其子類別,您可以使用getServletContext()方法取得其實例。

config 對應于 ServletConfig,在繼承GenericServlet或其子類別,您可以使用getServletConfig()方法取得其實例。

session 對應於 HttpSession,在Servlet中要取得HttpSession物件,您可以由HttpServletRequest物件取得,例如:


 public void doGet(HttpServletRequest req, 
                   HttpServletResponse res) 
                      throws ServletException, IOException { 
    HttpSession session = req.getSession(); 

    // .... 
}

  
req.getSession()其實是req.getSession(true)在Servlet 2.1之後提供的方便用法,當getSession()中設定的是true時,表示目前如果有有效的HttpSession物件,則傳回該物件,如果沒有有效的HttpSession物件,則建立一個新的HttpSession物件,如果getSession()中的參數設定為false,則在沒有有效 HttpSession物件的情況下,不建立新的HttpSession物件,直接傳回null。

另外,在JSP中可以方便的使用<jsp:forward>或<jsp:include>來轉發或包含另一個資源,以達成 request與response的控制權轉移,在Servlet中,這則是透過實作RequestDispatcher介面的物件來達成,例如,若您要轉發(或包括)一個請求與回應則必須這麽作:

public void doGet(HttpServletRequest req, 
                   HttpServletResponse res) 
                      throws ServletException, IOException { 
    // .... 
    RequestDispatcher dispatcher = 
                 req.getRequestDispatcher("other.jsp"); 
    dispatcher.forward();   
    // dispatcher.include();  如果要 include 的話用這個
    // .... 
} 

 
forward與sendRedirect()的作用有些類似,主要的差別在於forward的動作完全在伺服器內完成,它是將request與 response的控制權轉移給另一個資源,由該資源直接回應用戶端,在轉發之前您可以對request作一些前置處理,然後再由另一個資源作 response,而sendRedirect()則必須與用戶端溝通,告知其重新要求指定的資源。
分享到:
评论
1 楼 wanglei_oklove 2007-05-02  
恩,可以  拿走了一些,谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics