jsp表达式标记之间的差异<%和<%=

时间:2013-04-29 17:54:21

标签: jsp jsp-tags struts-1

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

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

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

2 个答案:

答案 0 :(得分:11)

<%...%>之间,你可以在java中编写你想要的任何逻辑。

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

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

你可以简单地写

<%= "Hello world" %> 

基本上,&lt;%=%&gt;是调用正在评估的表达式的toString()方法。

如果你需要添加空检查逻辑,你可以使用

 <%..%>

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

http://www.easywayserver.com/jsp/JSP-example.htm http://www.tutorialspoint.com/jsp/jsp_syntax.htm

答案 1 :(得分:0)

<%%> ------>此标记在JSP中称为scriptlet标记。实际上,无论您在.jsp文件中执行什么操作,它都会在内部转换回Servlet,因为在Servers中,内部运行的唯一东西是Servlet,因此您可以在Servlet的out.println()内部编写所有的HTML代码,但是作为开发人员,我们很容易将后端和前端分为不同的部分,这就是我们需要JSP文件的主要原因。因此,如果您需要在Servlet中执行与service()方法相关的操作,请在此标记的<%%>中进行。如果只需要输出某些内容,请使用<%=%> ----> expression标记。如果需要了解JSP文件如何在内部转换回servlet,请使用netbeans IDE(它有一个单独的工具来查看它)。

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

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