3. JSP语法:
3.1 JSP的结构:
一个JSP文件一般是由五部分组成:
(1) 普通的HTML标记符。
(2) JSP标签。
(3) 变量和方法声明。
(4) Java程序片。
(5) Java表达式。
其中后三条被成为JSP的脚本部分。
3.2 JSP的语法:
3.2.1 变量的声明:
(1)在“<%!和%>”之间声明变量或方法。其中变量和方法可以是Java中的任何变量。其作用范围是整个JSP文件。当多个用户访问这个页面时,他们将共享这些变量,任何对变量的修改都会直接影响到其他用户。这些变量只有服务器关闭时才会释放。
例如这个例子就是利用此方法声明的变量,实现了访问网页计数功能:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY BGCOLOR=cyan><FONT size=1>
<%!int i=0;
%>
<%i++;
%>
<P>您是第
<%=i%>
个访问本站的客户。
</BODY>
</HTML>
另外,如果用这个方法来声明方法,则其中方法是在整个JSP页面有效,但在该方法中声明的变量为局部的,只在该法中有效调用完毕时即释放。而用户往往会调用方法来修改某个变量或直接修改变量,所以,在应用这种方法声明变量时当你要试图修改某个数据,尽量加上关键字synchronized以实现同步锁定,防止同时修改变量。
利用该方法声明的类,也是在JSP页面内有效,可以在其范围内使用该类的对象,具体方法和前面的一样。
(2)在“<%和%>”之间声明变量和方法。为局部变量和方法,可以简单的理解为非共享变量,即每个客户都有自己的变量,他们的操作不会影响到其他人,程序执行完内存自动释放。大多的Java程序片是放在这里的。
(3)笔者的简易,尽量不要在JSP中过多使用前两种方式来进行动态操作,应该尽量使用JavaBean来操作,尽量做到静态页面和动态页面相分离,这也是为什么要用JSP替代Servlet的优点。
3.2.2 JSP中的注释:
(1) HTML注释:”<!--和-->”之间的为注释。
(2)JSP注释:在”<%-- 和 --%>”之间的为注释。
3.2.3 JSP中的指令标签:
3.2.3 .1 page指令标签
(1)page 指令用来指定整个页面的一些属性和这些属性的值。
指令格式: <%@ page 属性1=”属性1的值” 属性2=”属性2的值”…%>
例如:<%@ page contentType="text/html; charset=gb2312" %> 可以指定页面显示汉语。
(2) import 指令可以指定多个值,为导入JAVA类库。
例如:<%@ import="java.sql.*",”java.awt.*” %>
(3) language属性: 默认为JAVA,目前也只支持JAVA
例如: <%@ page language=”java”%>
(4) contentType属性:用来指定JSP页面的编码,默认属性为”text/html;
charset=ISO-8859 -1”
(5) session 用于设置是否要使用内置的session对象。默认为true。
(6) buffer 内置输出流对象负责将服务器的某些信息或运行结果发送到客户端显示可以不设置,默认为8kb。
(7) 指定out的缓冲区被填满时,缓冲区是否自动判断。默认为true。
(8) isThreadSafe 属性用来设置页面是否可多线程访问。默认为true。
(9) info属性为JSP页面准备一个字符串,属性值为字符串。
例:<%@ page info=”we are students”%> 可用getServletInfo();获得。
一个综合应用:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
其中errorPage是发生错误后应该转到的异常处理的页面
3.2.3 .2 include指令标签
(1)<%@ include file=”filename”%> 要注意在引用的文件中含有类似 page的contentType属性设置,则此文件不要设置,否则会报错。
(2)可作为动作标签,其格式为:<jsp:include page=”fileName”/> 功能:可动态包含一个文件,即在执行时才对这个文件进行包含,并且可以随时修改包含文件,改后相应结果即发生变化,而静态的引用只能重新编译。
3.2.3 .3 其他标签:
(1) param标签:以“名字-值”对应的形式为其他标签提供附加信息。这个标签与jsp:include、jsp:forward、jsp:plugin标签一起使用。
格式为:<jsp:param name=”名字”, value=”指定给param的值”>
该标签主要功能是和include标签连用,可以达到给加载文件传递参数的作用。
例:
tom.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<% String str=request.getParameter("computer"); //获取值。
int n=Integer.parseInt(str);
int sum=0;
for(int i=1;i<=n;i++)
{ sum=sum+i;
}
%>
<P>
从1到<%=n%>的连续和是:
<BR>
<%=sum%>
</BODY>
</HTML>
Mc1035.jsp:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<P>动态加载文件并传递参数效果:
<jsp:include page="tom.jsp">
<jsp:param name="computer" value="300" />
</jsp:include>
</BODY>
</HTML>
这样在引用tom.jsp的同时就把参数computer的值传了过去,要注意名称要与tom.jsp里的request.getParameter("computer");的一直。
(2)plugin动作标签:用来保证客户可以执行applet小程序。该标签只是JSP页面加载Java plugin,该插件负责客户下载,并使用该插件来运行Java applet。
例:
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<jsp:plugin type="applet" code="B.class" jreversion="1.2" width="200" height="260" >
<jsp:fallback>
Plugin tag OBJECT or EMBED not supported by browser.
</jsp:fallback>
</jsp:plugin>
</body></html>
当客户访问上述JSP页面时,将导致登陆Sun公司下载Java plugin。并执行B.class。
笔者认为现在很少有人用applet程序了,大多用JS