jsp脚本:在<% %>里插入Java代码,每一句都需要;结束。
语法:<% ***java代码*** %>
脚本的本质就是把在第一次编译jsp页面生成一个servlet类的字节码文件时,把代码插入到其中的_jspService()方法中;
例如:
.html:
<%
boolean flag=true;
String name="Jerry";
%>
<% if(flag){ %>
Hello <%=name %>
<%}else{ %>
byebye
<% } %>
编译后的.java
boolean flag=true;
String name="Jerry";
out.write('\r');
out.write('\n');
out.write(' ');
if(flag){
out.write("\r\n");
out.write("\t Hello ");
out.print(name );
out.write("\r\n");
out.write("\t ");
}else{
out.write("\r\n");
out.write("\t byebye\r\n");
out.write("\t ");
}
JSP声明:允许用户定义Servlet中的变量、方法
语法:<%!code %>
示例:
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage=""%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>声明示例</title>
</head>
<!-- 下面是JSP声明部分 -->
<%!
//声明一个整型变量
public int count;
//声明一个方法
public int add(int a,int b) {
return a+b;
}%>
<body>
<%
//将count的值输出后再加1
out.println(count++);
%>
<br />
<%
//使用add()方法算出和
out.println(add(8,9));
%>
</body>
</html>
声明的本质:就是将声明的变量和方法,作为转译后的Servlet类的变量和方法。
JSP表达式:是对数据的表示,系统将其作为一个值进行计算。
一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。
由于表达式的值会被转化成String,所以您可以在一个文本行中使用表达式而不用去管它是否是HTML标签。
表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。
语法:<%=variable%> 或者 <%=user.getName() %>
本质:在将JSP页面转换成Servlet后,使用out.print()将表达式的值输出。这样如果user.getName()的返回值是"liky", 那么实际上在servlet中就将转换成out.print("liky");
所以在表达式中出现的方法,必须要有返回值。
<%! String language = "JSP" %>
<h1>This is my <%=language %> page</h1>
脚本和声明变量的对比:
(1) private, public等访问控制符:声明:由于JSP声明语法定义的变量和方法对应Servlet类的成员变量的方法, 所以JSP声明部分定义的变量和方法可以使用private, public等访问控制修饰, 也可以使用static修饰, 将其变成类属性和类方法。但不能使用abstract修饰声明部分的方法, 因为abstract导致JSP对应的Servlet变成抽象类,从而导致无法实例化。
脚本: 脚本中声明的变量都是_jspService()函数中的局部变量,所以是不能使用private,public等访问控制符的。
(2)方法声明
声明: 在声明中,可以声明方法, 因为实际是在声明Servlet类的方法;
脚本: 在脚本中,不可以声明方法,因为在Java的_jspService()的方法中是不能声明的方法。
(3) 编译结果
声明: 将声明的变量和方法,作为Servlet类的变量和方法。脚本: 将代码插入到Servlet的_jspService()方法中。
参考博客:https://blog.csdn.net/wu_cai_/article/details/51480692