在性能方面,JSP中声明方法和Java文件中声明方法哪个更好?

3

我有一些关于JSP的问题,

我有一个方法,假设这个方法的名字是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

<%@ 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文件中,而是放在类中。

我想问一下哪个更好性能。

顺便说一句,我知道作为Java Web程序员,我们不鼓励在JSP文件中使用脚本,但由于某些原因,我无法将所有脚本转换为EL表达式。我能做的最少就是将方法转换成类文件。抱歉,我是Java编程新手。


你必须包含整个JSP文件(其内容)才能使用该方法。即使它有一些微不足道的性能优势(尽管它没有),这也应该让你望而却步,甚至不去考虑它。 - Ravi K Thapliyal
JSP文件最终也是Java文件,因此不可能存在性能差异。 - user207421
正如已经提到的:极不建议在JSP中使用脚本块(scriptlets)。(https://dev59.com/13A75IYBdhLWcg3wqK10#3180202) - informatik01
4个回答

3

在JSP中编写脚本或导入Java类不会影响性能!

无论哪种情况,您的JSP都将由JSP容器自动转换为Servlet,最终Servlet将被编译为字节码!这将在部署应用程序时发生一次,之后就没有JSP、脚本或EL表达式了,只有已经编译好的字节码在JVM中运行。

脚本通常不建议使用是出于其他原因,主要与您的应用程序的可读性和可维护性有关,并非性能问题!

根据我的经验,我告诉你,在脚本JSP页面中调试通常会非常困难!如果您的应用程序出现脚本错误,那就糟了!大多数情况下,您将看到一个空白页面,没有错误消息或足够的线索来深入研究!!!


JSP文件在编译后会被保留,因此它们在部署后仍然存在。 - Thorbjørn Ravn Andersen

0
如果你想测量某段代码执行的时间(以纳秒为单位):
<% 
    long startTime = System.nanoTime(); 
%>

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

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

你可能会在统计上发现一些差异,但这些差异很小,不足以被认为是重要的。无论结果如何,建议将Java代码单独处理。


0

答案就在问题中。你不应该在JSP中放置任何Java代码。相应的是,你在JSP中放置的Java代码越少,情况就会越好。

这与性能无关。方法就是方法,JSP被编译为类,就像你自己的类一样,并由同一个JVM运行。这里重要的是清晰的设计、可维护性、责任分离、易于文档化、代码复用和调试。


0

当您在jsp页面中编写Java代码时,JVM将在运行时将代码编译为Servlet,然后编译为字节码,最后处理请求。而在Java类中编写代码时,该类在部署到Web服务器时会被编译成.class(字节码)。JVM将在运行时处理类。在JVM方面,处理ClassName.class的速度比.jsp要快得多。但这不是性能问题,因为它是可以忽略不计的。 此外,最好将所有代码都写在Java类中,因为在XSS或跨站脚本攻击方面更安全。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接