JSP脚本元素允许将Java代码插入到JSP页面,这些Java代码会在服务器端执行,执行结果输出到JSP页面。
JSP脚本元素有3种格式:
(1) 表达式格式 <%=表达式%>;
(2) 小脚本格式<%Java代码%>;
(3) 声明格式<%!Java代码%>;
1、 表达式格式
JSP表达式用来将值直接插入到JSP页面,JSP表达式语法如下:
<%=Java表达式%>
它将计算Java表达式,并将计算结果转换为字符串插入到JSP页面。例如,以下内容将当前时间插入到JSP页面:
当前时间: <%= new java.util.Date() %>。
在使用表达式时,可以使用一些预定义的Java对象,这些Java对象可以直接在表达式使用:
(1)HttpServletRequest
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。该对象在JSP表达式的表示方式为request。
(2)HttpServletResponse
服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的HttpServletRequest对象、和代表响应的HttpServletResponse对 象。HttpServletResponse对象代表服务器的响应,要向客户端输出数据,需要使用HttpServletResponse对象。
新建sample_two.jsp文件,在页面中输出客户端请求信息。sample_two.jsp代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>JSP表达式</title> </head> <body> <ul> <li>请求URL:<%= request.getRequestURL() %></li> <li>请求11主机地址:<%= request.getRemoteHost() %></li> </ul> </body> </html>
浏览器执行sample_two.js页面结果如下图所示:

2、 JSP小脚本
JSP小脚本可以执行更复杂的操作,可以编写Java代码段,而JSP表达式仅允许执行Java表达式。JSP小脚本可以添加到JSP页面的任意位置,其添加顺序和执行顺序是一致的。JSP小脚本语法如下:
<% Java代码 %>
新建sample_three.jsp文件,在页面中添加JSP小脚本。sample_three.jsp代码如下:
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
List<String> list = new ArrayList<String>();
list.add("hello world");
list.add("hello java");
%>
<h2>Java小脚本</h2>
<ul>
<%
for( int i = 0; i < list.size(); i++ )
{
%>
<li><%= list.get(i) %></li>
<%
}
%>
</ul>
</body>
</html>执行结果如下图所示:

3、 JSP声明
JSP 声明用来定义程序中使用的实体,如变量、方法和类,使用JSP声明定义的变量、方法和类,可以在JSP整个页面中使用。JSP声明语法如下:
<%! Java代码 %>
JSP声明不会输出任何内容,所以它经常与JSP表达式或者小脚本配合使用。
新建sample_four.jsp文件,在页面中声明方法multiTable(),该方法生成九九乘法表,然后在页面中调用该方法输出九九乘法表。sample_four.jsp代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JSP声明</title>
</head>
<body>
<%!
String multiTable(){
StringBuilder builder = new StringBuilder();
for(int i=1;i<=9;i++){
for(int j=1;j<i;j++){
builder.append(i + "*" + j + "=" + i*j + " ");
}
builder.append("<br/>");
}
return builder.toString();
}
%>
<h2>九九乘法表</h2>
<%= multiTable()%>
</body>
</html>执行结果如下图所示:

4、 使用XML语法
JSP表达式也可以使用基于XML语言的语法:
<jsp:expression> Java表达式 </jsp:expression>
XML元素不同于HTML元素,它们区分大小写,需要使用小写形式的jsp:expression。
JSP小脚本也可以使用基于XML语言的语法:
<jsp:scriptlet> Java代码 </jsp:scriptlet>
JSP声明也可以使用基于XML语言的语法:
<jsp:declaration> Java代码 </jsp:declaration>
5、 预定义的Java对象
为了简化JSP脚本中的代码,JSP预定义了8种Java对象,这些Java对象可以直接在JSP中使用。预定义的8种Java对象为:request、response、out、session、application、config、pageContext、page。
前面已经介绍了request和response对象,下面简单介绍后面6种预定义的Java对象。
out对象
out对象用于向浏览器输出数据,使用response对象也可以向浏览器输出数据。
session对象
session对象为与请求有关的HttpSession对象。当用户通过浏览器向服务器发送请求时,服务器会为每个用户创建一个会话对象,即session对象。session用来分别保存每一个用户的信息,使用session可以轻易地识别每一个用户,然后针对每一个用户的要求,给予正确的响应。
application对象
该对象是服务器的全局对象,用于保存应用程序的公用数据。服务器启动后,会自动创建 application 对象,所有用户共享 application 对象。
config对象
config对象为与Servlet有关的ServlerConfig对象,用于获取Servlet的配置数据。
pageContext对象
该对象主要用于访问JSP之间的共享数据。使用pageContext可以访问page,request,session,application范围内的变量。
page对象
page对象指向当前JSP本身,有点像类中的this指针,它是java.lang.Object类的实例。