2014-10-08 52 views
0

之間有什麼區別的同異:這兩方法在jsp頁面

this.log("log message"); 

((HttpServlet)page).log("anothermessage"); 

+3

什麼'this'代表JSP?你在使用** Scriplet **嗎? – Braj 2014-10-08 13:12:28

+0

'JspServlet'擴展'HttpServlet'。所以沒有區別。 'GenericServlet'中定義了'log()'方法,它們都是超類。 – Braj 2014-10-08 13:14:57

+0

是的,我使用scriplet和((HttpServlet)頁).log是一個隱式方法,this.log是userdefine方法。我想知道他們之間的區別 – jayraj 2014-10-08 13:15:41

回答

1

如果你看看從JSP生成的Servlet,那麼你會發現thispage都是相同的。這裏page是和JSP中的implicit object

生成的Servlet代碼從JSP:

public void _jspService(HttpServletRequest request, HttpServletResponse response) 
    throws java.io.IOException, ServletException { 

    PageContext pageContext = null; 
    HttpSession session = null; 
    ServletContext application = null; 
    ServletConfig config = null; 
    JspWriter out = null; 
    Object page = this;   // page and this are same 
    JspWriter _jspx_out = null; 
    PageContext _jspx_page_context = null; 
    ... 

log()方法在GenericServlet定義。這裏是tomcat的(Apache)的具體產生的Servlet從JSP實現:

javax.servlet.GenericServlet 
    extended byjavax.servlet.http.HttpServlet 
     extended byorg.apache.jasper.runtime.HttpJspBase 

所以this.log("log message")相當於((HttpServlet)page).log("anothermessage")