转自:http://www.cnblogs.com/linwen5723/p/5967674.html
什么是Scriptlet?
在JSP中,Scriptlet称为脚本小程序,所有嵌套在HTML代码中的Java程序都必须使用Scriptlet标记出来。
第一种:<% %>
在此Scriptlet中可以定义局部变量(并非全局变量)编写语句
例如:
<%
int x=10;
out.println("<p>x="+x+"</P>");
%>
<%
out.println("<p>x="+x+"</P>");
%>
初学JSP者看到上面这段代码可能会觉得陌生又熟悉,那是因为这完全就是java代码,却又输出了HTML语句,没错!这就是使用java语句在网页上显示"x=10"
第二次在网页上显示变量x时,同样是"x=10",小编以前以为<% %>里面定义的变量是局部变量所以出了<% %>就会报错,但其实不是,想想Java中对局部变量的定义,局部变量存在在一个方法中或者以个代码块中,如果上面的<% %>全部去掉,是不是像Java中的一个代码块了呢?所以第二次输出也是正确的。
第二种:<%! %>
在这种Scriptlet中可以定义全局变量,方法,类
<%!public static final String info = "www.baidu.com";//定义全局变量
public int add(int a, int b) {//定义方法
return a + b;
}
class Person {//定义类
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "name=" + this.name + "\tage=" + this.age;
//在此方法中不可以有输出语句
}
}%>
<%
out.println("<p>info=" + info + "</p>");
out.println("<p>3+5=" + add(3, 5) + "</p>");
out.println("<p>个人信息:" + new Person("张三", 12).toString() + "</p>");
%>
网页上显示结果:
第三种:<%=%>
在此Scriptlet中输出一个变量或一个具体的常量,称为表达式输出
将上面的输出形式换成下面的输出形式:
<p>info=<%=info %></p>
<p>3+5=<%=add(3,5) %></p>
<p>个人信息:<%=new Person("张三",12).toString() %></p>
将得到同样的效果.
那么问题来了,既然这两种输出形式的效果一样,那么以后是不是随便写那个都可以呢?
尽量不要使用out.println();输出,而使用表达式输出
在jsp的开发中,实际上就是在HTML中加入一些控制及输出的语句,所以在输出时为了使HTML代码和Java代码相分离,最好的做法是只输出由Java(JSP)程序产生的变量,那么这时使用表达式输出就比使用out.println()更加方便.