哪个在jsp中的方法声明或java文件中的方法声明之间的性能更好

时间:2013-05-26 17:49:12

标签: java class jsp scriplets

我对jsp有一些疑问,

我有一些方法可以说方法的名称是getStaffDetail并且是在staffDetail.jsp文件中编写的 在staffDetail.jsp下面的代码

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

并且通过使用include指令

调用此方法在personPage.jsp文件中使用

personPage.jsp

<%@ 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编程的新手

4 个答案:

答案 0 :(得分:2)

嗯,在jsp中编写scriptlet或在jsp中导入java类没有性能问题!

在这两种情况下,您的jsp将自动转换为servlet(通过jsp容器),然后servlet最终将被编译为字节代码!这将在部署应用程序时发生一次,之后没有jsp,没有scriptlet,没有el表达式,只有编译后的字节代码才能在JVM中运行。

  

由于其他原因,不建议使用Scpritlet,主要与应用程序的可读性和可维护性有关。表演没有任何意义!

根据我的经验,我可以告诉你,大多数调试在scriptlet jsp页面中都太难了!如果你的应用程序在scriptlet中疯狂,你就死定了!大多数情况下,会看到一个空白页面,没有错误信息或没有足够的线索可以钻取!!!

答案 1 :(得分:0)

问题的答案就在于此。您不应该在JSP中使用任何Java代码。结果是,JSP中的Java代码越少,就越好。

这与性能无关。方法是一种方法,JSP被编译为类似于您自己的类的类,并由同一个JVM运行。这里重要的是干净的设计,可维护性,责任分离,易于记录,重用和调试代码。

答案 2 :(得分:0)

当你在jsp页面中编写java时,JVM会在运行时将代码编译成servlet而不是字节代码,然后处理请求,当在java类中编写代码时,类是当它部署在Web服务器上时编译成.class(byte)。然后JVM将在运行时处理该类。对于JVM,ClassName.class的处理比.jsp快得多。但这不是性能问题,因为它可以忽略不计。 另外,最好在Java类中编写所有代码,因为它在XSS或跨站点脚本编写时更安全。

答案 3 :(得分:0)

如果你想测量一些代码执行的时间(以纳秒为单位):

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

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

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

您可能会在统计上发现一些差异,但要考虑的是最小的。无论结果如何,建议单独使用Java代码。