網上解釋:
this永遠表示的是當前對象。在jsp中有九大內置對象,其中page對應this關鍵字。JSP網頁本身,page對象是當前頁面轉換后的Servlet類的實例。從轉換后的Servlet類的代碼中,可以看到這種關系:Object page = this;在JSP頁面中,很少使用page對象。
Jsp本質上就是Servlet,而servlet本質上就是一個類,你還不清楚this是什么意思么?就是指jsp對應的那個servlet對象本身。
自己理解:
jsp在顯示前會先生成對應的.java文件,再生成對應的.class文件,在由容器執行.class文件后顯示,例如hello.jsp,運行時會順序生成hello_jsp.java及hello_jsp.class,位於tomcat目錄的work目錄下,在.java文件中為生成的對應的hello_jsp類,以下為hello_jsp.java文件結構:
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent,
org.apache.jasper.runtime.JspSourceImports {
//此處為文件內容省略
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
//此處為文件內容省略
final java.lang.Object page = this;
//此處為文件內容省略
}
//此處為文件內容省略
}
由此是否可以理解為,this為該hello_jsp類的實例對象,該對象也為Servlet接口的一個實例,及jsp文件運行時的Servlet接口實例對象,因此在jsp中可以有如下的this使用:
hello.jsp文件內容如下:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>jsp中的this使用</title></head>
<body>
<%
String realpath = this.getServletContext().getRealPath("/") ;
%>
<h3>真實路徑: <%=realpath%></h3>
</body>
</html>