【问题标题】:Which is better in performance between method declare in jsp or method declare in java filejsp中的方法声明和java文件中的方法声明哪个性能更好
【发布时间】:2013-05-27 03:22:40
【问题描述】:

我有一些关于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 指令调用它

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

【问题讨论】:

  • 您必须包含整个 JSP 文件(其内容)才能使用该方法。即使它有(尽管没有)任何边际性能优势,仅此一项就应该阻止你去思考它。
  • 一个JSP文件一个Java文件,归根结底,不会有性能差异。

标签: java class jsp scriptlet


【解决方案1】:

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

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

不鼓励使用 Scriptlet 的其他原因主要与应用程序的可读性和可维护性有关。没有什么表现!

根据我的经验,我可以告诉你,在 scriptlet jsp 页面中,大多数调试太难了!如果您的应用程序在 scriptlet 中出现异常,您就死定了!大多数时候,会看到一个空白页,没有错误消息或没有足够的线索来钻取!!!

【讨论】:

  • JSP 文件在编译后保留,因此在部署后仍然存在。
【解决方案2】:

答案就在问题中。 JSP 中不应该有任何 Java 代码。推论是 JSP 中的 Java 代码越少越好。

但这与性能无关。方法就是方法,JSP 被编译成类,就像你自己的类一样,由同一个 JVM 运行。这里重要的事情是简洁的设计、可维护性、职责分离、易于记录、重用和调试代码。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      您可能会发现一些统计差异,但需要考虑的差异很小。不管结果如何,建议将 Java 代码分开。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        • 2017-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多