在建立了第一个JSP程序后我们对JSP的语法有一个归纳总结。
JSP注释
JSP注释有两种类型,一种注释将会发送到客户端浏览器,语法格式如下:
<!--comment-->
如:
<!--这是一个注释,该注释可以在客户端看到-->
该注释可以在浏览器中通过查看HTML源码的方式看到,该类注释类似于普通的HTML注释。不同点在于,注释中可以加入JSP表达式,来传递无法静态显示的信息,如:
<!--现在时间是 <%= (new java.util.Date()).toLocalString() %>-->
另外一种是不会在客户端浏览器显示的注释,语法格式如下:
<%--comment--%>
用法同上,这是这种注释不能再客户端浏览器查看。
JSP声明
用来定义JSP程序中需要使用的变量,方法等。语法格式如下:
<%!declaration%>
例如:
<%! int i; String c; %>
<%! int i = 2; %>
<%! public int sum(); %>
JSP表达式
语法格式如下:
<%=expression%>
例如:
圆周率: <%= Math.PI %>
当前时间: <%= (new java.util.Date()).toLocalString() %>
JSP程序段
Java程序段被包含在程序段内,其中也可以进行变量、方法等的声明。格式如下:
<% code fragment %>
例如我们第一个JSP程序中的
<%
String name = request.getParameter("NAME");
String sex = request.getParameter("SEX");
%>
JSP指令
page指令
page指令通常用于JSP页面顶端,用来定义JSP页面的全局属性,如编码,错误页面等。语法示例:
<%@ page language="java" import="java.util.*" contentType=text/html;charst=gb2312" %>
常用的设置属性如下:
- language=”java”,用于声明脚本语言的种类,通常都是”java”。
- import=” “,用于声明JSP页面中需要导入的包,其作用等同于Java程序中的import。注:该指令可以单条同时导入多个包,中间用逗号隔开。<%@ page import=”java.io.* ,java.util.*” %>。也可以分成多条包含。
- session=”true|false”,用于指明session对象是否可用(session是JSP的一个内置对象),默认为true。
- buffer=”none|8kb|sizekb”,用于指定输出缓冲。该值不为none时,意为需要输出缓冲,此时服务器不会直接输出内容到浏览器,而是等待缓存满或者脚本执行完毕才会输出显示。该设置默认值为8kb。
- antoflush=”true|false”,指明缓存是否自动清除。默认为true,若手动设置为false,缓存溢出会抛出异常。
- errorPage=”URL”,用于指定当前页面产生异常后,重定向的页面。
- isErrorPage=”true|false”,用于指定当前页面可否用作其他页面的错误处理页面。默认值为false。
include指令
该指令用于在当前JSP页面包含一个文件,从而和当前页面组成一个整体文件。include中包含的文件会在页面编译时被引入。并且,被包含页面的任何一个部分发生变动,整个JSP页面都会重新编译。语法格式如下:
<%@ include file=" " %>
例如:
date.jsp
<%
Date date = new Date();
%>
<%=
date.toString()
%>
include.jsp
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312"%>
<html>
<head><title>JSP-welcome</title></head>
<body>
现在是:<%@ include file="date.jsp" %>
</body>
</html>
需要注意的是,源文件和被包含文件中的变量和方法名不能发生冲突,因为它们最终是会生成同一个文件的,这样将会导致编译错误!
JSP动作指令
JSP动作指令可用来控制JSP容器的动作,可以动态插入文件,重用javaBean组件,导向另一个页面等。
JSP中有7种标准动作元素:
- jsp:include
- jsp:forward
- jsp:plugin
- jsp:param
- jsp:useBean
- jsp:getProperty
- jsp:setProperty
jsp:include
格式用法:
<jsp:include page=" " />
例如:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=gb2312" %>
<html>
<head>
<title>Include动作指令示例</title>
</head>
<body>
<font size=2>
现在是:<jsp:include page="date.jsp" />
</font>
</body>
</html>
date.jsp:
<%@ page language="java" import="java.util.*" contentType="text/html; charset=gb2312" %>
<%
Date date = new Date();
%>
<%=
date.toString()
%>
上面说的include指令和这里的include动作指令的作用都是包含一个文件到当前页面。他们的区别是什么?
include指令包含的资源为静态的。被包含的资源和当前JSP页面是一个整体,资源相对路径的解析发生在当前页面被请求转换为Servlet时。
include动作指令可以对动态资源进行包含。当前页面和被包含的资源是两个独立的实体,在资源解析时,当前页面会对被包含的JSP页面发送请求,被包含的JSP页面对该请求对象进行处理,然后将处理结果返回。
关于这两者的区别,我们将会在下文中通过一个实验来说明。实验说明JSP中include指令和include动作指令的区别
jsp:forwrd
用来把当前页面重定向到另一个页面。将当前页面的请求转发给其他Web资源,同时用户看到的地址是当前页面地址,内容为重定向页面的内容。其语法格式如下:
<jsp:forward page="URL" />
其中URL也可以是一个表达式<%=expression%>。
例如:
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head><title>JSP-welcome</title></head>
<body>
<jsp:forward page="login.jsp"/>
</body>
</html>
将当前页面重定向到登录页面。
jsp:param
该动作指令可以作为其他动作指令的子标签,用来传递参数。语法格式如下:
<jsp:param name="" value="" />
比如配合<jsp:forward>
使用如下,首先在forpage.jsp中将页面重定向到forpage1.jsp,并传入一个参数para1 = hello;
然后再在forpage1中将页面重定向到forpage2,再传入参数para2 = world:
forpage.jsp
<html>
<head>
<title>forward配合param示例1</title>
</head>
<body>
<jsp:forward page="forpage1.jsp">
<jsp:param name="para1" value="hello" />
</jsp:forward>
</body>
</html>
forpage1.jsp
<html>
<head>
<title>forward配合param示例2</title>
</head>
<body>
<jsp:forward page="forpage2.jsp">
<jsp:param name="para2" value="world" />
</jsp:forward>
</body>
</html>
forpage2.jsp:
<html>
<head>
<title>forward配合param示例3</title>
</head>
<body>
para1 : <%=request.getParameter("para1")%><br>
para2 : <%=request.getParameter("para2")%>
</body>
</html>
这样在forpage2中就得到了前面两次传过来的参数para1和para2,页面将打印:
para1 : hello
para2 : world
jsp:plugin
下载一个插件到客户端,以便执行applet或bean。
jsp:useBean
jsp:getProperty
jsp:setProperty
以上三种通常都是和JavaBean配合使用的,后面结合JavaBean一起看。