为什么 void 方法无法在 jsp 中的 scriptlet 和表达式标记内部打印

why void method cannot print inside of scriptlets and expression tags in jsp


当我尝试使用声明标记打印 return int 的方法时,通常 scriplet 和表达式标记可以打印该方法。

        <%! int print(int i, int j, int k) {
                return i + j + k;
        }%>

        <%= print(10, 20, 30)%> 
        <% out.print(print(10, 20, 300));%>

但是当我尝试使用相同的标签打印 void return 方法时,出现编译错误。

    <%! void print(int i, int j, int k) {
            System.out.print(i + j + k);
        }%>

    <%= print(10, 20, 30)%> 
    <% print(10, 20, 300);%>

..

C:\Users\dilin\Documents\NetBeansProjects\Practice\build\generated\src\org\apache\jsp\index_jsp.java:60: error: 'void' type not allowed here
  out.print( print(10, 20, 30));
                  ^1 error

这是因为 void 方法不能作为打印输出吗?


我是网络开发的新手。所以请多多包涵。谢谢。

当您编写 out.print() 时,它需要一些返回值。但是你的方法写成void。这就是为什么它给你错误

这简单明了。在您的脚本中,您正在调用不带参数的 java.io.PrintStream#print 方法。因此,编译器会报错。

参考Java docs。虽然 PrintStream 中有多个 print 方法的重载变体,但其中 none 是 no-argument 重载。您的自定义 print 方法 returns void 因此您不能将它传递给接受参数的方法。

附带说明,强烈建议不要使用 scriptlet,因为它们会使您的应用程序容易受到安全威胁。