16

我或多或少知道 <%! 和 <%,但我似乎找不到 <%= 和 <% 之间的区别。我试图通过在当前使用 <%= ... %> 的表达式中引入一些逻辑来避免空值错误。除非我将标签替换为 <%...%>,否则我会收到错误消息。但是,在我的构建之后,我得到一个 jsp 错误而不是 servlet 错误。我不能真正将我的原始代码粘贴到此处,但 <%= ... %> 中的代码本质上是检索在 Struts 1 项目中作为 servlet 参数传递的嵌套数组对象(更像是另一个数组对象中的数组对象)。我只想添加一个 try...catch 语句,以防对象的属性尚未实例化。

<%=((package.package.package.ClassName)session.getAttribute("attrName")).getObjectList()[0].getSecondObject.length%>; 

这是 jsp 问题,还是 Struts 1 问题?再说一遍,这两个标签有什么区别?

4

2 回答 2

23

您可以在<%...%>Java 中编写任何您想要的逻辑。

使用<%=...%>会将括号之间的表达式的结果输出到屏幕上。所以而不是写例如

<% System.out.println("Hello World") %> 

你可以简单地写

<%= "Hello world" %> 

基本上, <%= %> 所做的是调用toString()正在评估的表达式的方法。

如果您需要按照您所说的添加空检查逻辑,您可以使用

 <%..%>

以下是您可以参考的链接:

https://web.archive.org/web/20200711234346/http://www.easywayserver.com/jsp/JSP-example.htm

https://www.tutorialspoint.com/jsp/jsp_syntax.htm

于 2013-04-29T18:20:41.290 回答
0

<% %> ------> 这个标签我们在JSP 中称为scriptlet 标签。实际上,无论您在 .jsp 文件中做什么,它都会在内部转换回 Servlet,因为在服务器中,只有在内部运行的是 Servlet,您可以在 Servlet 内部的 out.println() 中编写所有 Html 代码,但作为开发人员,我们很容易将后端和前端分开,这就是我们需要JSP文件的主要原因。因此,如果您需要在 Servlets 中做一些与 service() 方法相关的事情,请在 <% %> 这个标签内进行。如果您只需要获取某些内容的输出,请使用 <%= %>----> 表达式标记。如果您需要查看 JSP 文件如何在内部转换回 servlet,请使用 netbeans IDE(它有一个单独的工具可以查看它。)。

  • 在 servlet 的 service() 方法中编写代码 == <% %> [在 scriptlet 标记内编码]

  • 在服务方法之外但在 Servlet 类内部编写代码 == <%= %>[在表达式标记内编码]

于 2019-12-01T09:04:45.910 回答