Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jsp中的方法声明和java文件中的方法声明在性能上哪个更好_Java_Class_Jsp_Scriptlet - Fatal编程技术网

jsp中的方法声明和java文件中的方法声明在性能上哪个更好

jsp中的方法声明和java文件中的方法声明在性能上哪个更好,java,class,jsp,scriptlet,Java,Class,Jsp,Scriptlet,我有一些关于jsp的问题 我有一些方法,比如说该方法的名称是getStaffDetail,并且是在staffDetail.jsp文件中编写的 下面是staffDetail.jsp中的代码 <%! public StaffDetails getStaffDetail(int staffId) throws SQLException{ //Request to db //process the result set //return St

我有一些关于jsp的问题

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

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

<%@ include file = "/path/staffDetail.jsp">

<%
    StaffDetails sd = getStaffDetail(1234);
    String stafName = sd.getStfName();
    String stfAddress = sd.getStfAddress();
    //and the rest...
%>
<@ page import = "package.StaffDetail">

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

代码是完全相同的,唯一的区别是我没有把方法放在jsp文件中,而是放在类中

我想问一下哪一次的表现更好


p/s我知道,作为一名java web程序员,我们不鼓励在jsp文件中使用scriplet,但由于某些原因,我无法将所有scriplet转换为EL。我至少可以将该方法转换为类文件。对不起,我是java编程新手,答案在问题中。JSP中不应该有任何Java代码。由此推论,JSP中的Java代码越少越好


但这与性能无关。方法就是方法,JSP被编译成与您自己的类类似的类,并由相同的JVM运行。这里最重要的是干净的设计、可维护性、责任分离、易于编写文档、重用和调试代码。

好吧,在jsp中编写脚本或在jsp中导入java类都没有性能问题

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

由于其他原因,不鼓励使用scprittle,这主要与应用程序的可读性和可维护性有关。表演一点也不精彩


根据我的经验,我可以告诉您,在scriptlet jsp页面中,大部分调试都太难了!如果你的应用程序在scriptlet中崩溃,你就死定了!大多数时候,你会看到一个空白的页面,没有错误信息,也没有足够的线索来浏览

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

如果您想测量某些代码执行所需的时间(以纳秒为单位):



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

JSP文件在编译后保留,因此在部署后仍然存在。您必须包含整个JSP文件(其内容)才能使用该方法。仅此一点就应该阻止您去考虑它,即使它有(尽管它没有)任何边际性能优势。JSP文件最终是一个Java文件,因此不会有性能差异。如前所述:
<@ page import = "package.StaffDetail">

<%
    StaffDetail sdInClass = new StaffDetail();//
    sdInClass.getStfName();
    sdInClass.getStfAddress();
%>
<% 
    long startTime = System.nanoTime(); 
%>

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

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