2013-03-17 49 views
3

在翻譯階段之前,有一個<%! ....%>我的JSP頁面中的代碼行。我知道這隻會在翻譯的servlet中運行一次。這是否意味着servlet引擎將代碼放在servlet的init()方法中?在編譯的servlet中,JSP文件的各個部分都去了哪裏?

我想學的是:哪種代碼會在翻譯後進入哪些方法?

在此先感謝。

+2

不,該代碼進入課程級別。 – 2013-03-17 10:40:34

+0

好的,如果<%........%> ?,我們知道它在每個客戶端訪問servlet期間運行。它看起來像這將安裝在服務方法? – Erdal76t 2013-03-17 16:42:55

+1

你知道你可以看看編譯的servlet源代碼,對吧? – 2013-03-17 17:30:01

回答

5

下面是一個例子:

該JSP代碼:

<%@ page import="java.util.*" %> <!-- 1 --> 
<%! private Date date; %>  <!-- 2 --> 
<% date = new Date(); %>   <!-- 3 --> 
Current date: <%= date %>  <!-- 4 --> 

將得到翻譯到:

import java.util.*; // 1 

public class ServletAbc extends GenericServlet { 

    private Date date; // 2 

    public void service(ServletRequest request,ServletResponse response) 
       throws IOException,ServletException{ 

     PrintWriter out=response.getWriter(); 

     date = new Date(); // 3 

     out.println("Current date: "); // 4 
     out.println(date); 
    } 
} 

請注意,翻譯的小部分是容器依賴的。例如。 out.println()聲明也可能被翻譯爲out.println("Current date: " + date);

+0

班級參數是否始終保密? – Erdal76t 2013-03-18 13:38:00

+0

@ Erdal76t對不起,忘了JSP中的'private'關鍵字。 「<%! ... %>」內的代碼將按原樣插入課程級別。你也可以在那裏聲明靜態變量和方法。 – Uooo 2013-03-18 13:43:31

2

在代碼編譯時 包含在<%! .... %>裏面的代碼這個標籤被認爲是servlet的類成員。內部含有<% .... %>該標籤

代碼進入Servlet的service() method

如果您想查看generated java file,請轉至tomcat/work/.....目錄。

文件將與名被創建爲JspFileName_jsp.javaJspFileName_jsp.class

爲了更好地理解參觀this link