2013-05-26 21 views
3

我有關於JSP的一些問題,這是方法之間的性能更好申報JSP或方法聲明中的java文件

我一些方法讓說的方法的名稱是getStaffDetail和寫在staffDetail .JSP在staffDetail.jsp

<%! 
    public StaffDetails getStaffDetail(int staffId) throws SQLException{ 
     //Request to db 
     //process the result set 
     //return StaffDetail 
    } 
%> 

以下代碼文件 和該方法通過使用包括指令

調用它personPage.jsp

均personPage.jsp文件使用10
<%@ include file = "/path/staffDetail.jsp"> 

<% 
    StaffDetails sd = getStaffDetail(1234); 
    String stafName = sd.getStfName(); 
    String stfAddress = sd.getStfAddress(); 
    //and the rest... 
%> 

或者我應該寫在Java類的代碼例如StaffDetail.class

package packageName 

import DBAccess; 

public class StaffDetail{ 

    //Request to db 
    //process the result set 
    //Setter n getter in this class 
} 

而在personPage.jsp

<@ page import = "package.StaffDetail"> 

<% 
    StaffDetail sdInClass = new StaffDetail();// 
    sdInClass.getStfName(); 
    sdInClass.getStfAddress(); 
%> 

的代碼完全相同,唯一的區別是,而不是把這個方法放到jsp文件中,我放在類裏

我想問一下哪種性能好一點。

p/s我知道我們作爲java web程序員不鼓勵在jsp文件中使用scriplet,但由於某些原因,我無法將所有scriplet轉換爲EL。我能做的至少是將該方法轉換爲類文件。對不起,我是新的Java編程

+0

您必須包含整個JSP文件(其內容)才能使用該方法。即使它具有(儘管它沒有)任何邊際績效優點,但僅此一點就不應該讓你思考。 –

+0

JSP文件*最終是一個Java文件,因此不會有性能差異。 – EJP

+0

正如已經提到的:[在JSP中使用scriptlets非常令人沮喪](http://stackoverflow.com/a/3180202/814702) – informatik01

回答

0

答案是在問題中。 JSP中不應該有任何Java代碼。推論是你在JSP中擁有的Java代碼越少,它就越好。

這與性能無關。方法是一種方法,JSP被編譯成類似你自己的類的類,並由同一個JVM運行。這裏的重要內容是簡潔的設計,可維護性,職責分離,文檔易用性,重用和調試代碼。

2

那麼,在jsp中編寫scriptlet或在jsp中導入java類沒有任何性能問題!

在這兩種情況下,您的jsp都會自動轉換爲一個servlet(通過jsp容器),然後servlet最終會被編譯爲字節碼!這將在部署應用程序時發生一次,並且在此之後沒有jsp,沒有scriptlet,也沒有el表達式,只有已編譯的字節碼會在您的JVM中運行。

Scrritlets由於其他原因而不鼓勵,主要與應用程序的可讀性和可維護性有關。表演沒有任何關係!

從我的經驗,我可以告訴你,主要是在scriptlet jsp頁面中調試太困難了!如果你的應用程序出現在scriptlet中,你已經死了!大多數時候,會看到一個空白頁面,沒有錯誤信息或沒有足夠的線索來鑽取!

+0

JSP文件在編譯後保留,所以它們在部署後仍然存在。 –

+0

是的,這是一個由於興奮而產生的舌頭...... Lolz –

0

當你在一個jsp頁面中編寫java代碼時,JVM會將代碼編譯成一個servlet,而不是編譯成運行時的字節代碼,然後處理請求,當涉及到在java類中編寫代碼時,類當它被部署到Web服務器上時被編譯成.class(字節)。 JVM將在運行時處理這個類。談到JVM時,ClassName.class的處理速度比.jsp快得多。但這不是性能問題,因爲它可以忽略不計。 加上它更好地將所有代碼寫入Java類,因爲它在XSS或跨站點腳本編寫時更安全。

0

如果你想測量一些代碼需要多長時間來執行(納秒):

<% 
    long startTime = System.nanoTime(); 
%> 

<% 
    // ... the code being measured ... 
%> 

<% 
    long estimatedTime = System.nanoTime() - startTime; 
    // out estimatedTime 
%> 

您可以統計發現一些差異,但最少要考慮的。無論結果如何,建議分開使用Java代碼。