第四章 JSP语法详解
1. (p67)JSP将动态部分用特殊的标记嵌入,这些标记通常以“<%”开始,并以“%>”结束。
2. (p67)三类主要的JSP元素:
——Scripting elements:可以定义最终转换为Servlet的部分
——Directives:可以控制这个Servlet的整体结构
——Actions:可以指定可重用的已有组件,另外还可以控制JSP引擎的运行
3. (p68)一般的注释:<!--comment-->
隐藏的注释:<%--comment--%>
用隐藏注释标记的字符会在JSP编译时被忽略。JSP编译器不会对<%--and--%>之间的语句进行编译,它不会显示在客户的浏览器中,也不会出现在源代码中。
4. (p68)声明变量和方法:<%! declaration; [declaration]%>
一般情况下,一个声明的有效范围是本页面。但是,如果JSP源文件用<jsp:include>指令或include指令包含一些静态文件,声明的有效范围将会扩大,也就是说:声明在该静态文件中也有效。但是如果JSP源文件中用<jsp:include>指令包含进来一个动态文件,主JSP文件中的声明在该动态文件中将不起作用。
5. (p69)表达式:<%=expression %>
表达式用于求值,然后其值转化为字符串,而且插入在JSP文件中显示该表达式的地方。而且可以在文本中使用表达式。表达式标签能包含符合JAVA语言规范的任何有效表达式,但是要注意:不能使用分号作为表达式的结尾,然而,在脚本段<%……%>标签中,表达式要求以分号作为结尾。
例子1:
<%! String s = new String("hello"); %>
<font color="blue"><%=s%></font>
例子2:
随机显示一个数字:
<font color="blue"><%=java.lang.Math.random()%></font>
6. (p70)Page指令用来定义JSP文件中的全局属性。在一个JSP页面中,可以定义一个或多个Page指令。但是,除了import属性以外的其他几种属性,只能定义一次。<%@page%>指令作用于整个JSP页面,同样包括静态的包含文件。但是不能作用于动态的包含文件。
<% page attribute="value"...%>
属性:
1)<%@ page language="java"%>
指定文件中所使用的脚本语言,目前仅java为有效值和默认值。该指令作用于整个文件,当多次使用该指令时,只有第一次使用是有效的。
2)<%@ page import="java.io.*,java.util.*" %>
指定导入的Java软件包名或者类名列表,该列表用逗号分隔,在JSP文件中,可以多次使用该指令来导入不同的软件包。
3)<%@ page content-type="text/html;charset=GB2312" %>
指定响应结果的MIME类型,默认的MIME类型是text/html。默认字符编码为ISO-8859-1。当多次使用该指令时,只有第一次使用是有效的。
4)<%@ page session="true" %>
指定JSP页是否使用Session,默认为true。如果它为false,就不能使用session对象,以及定义scope=session的<jsp:useBean>元素,这样的使用会导致错误。
5)<%@ page buffer="none | 8kb | sizekb" %>
Buffer的大小被out对象用于缓存处理执行后的JSP对客户浏览器的输出。
6)<%@ page autoFlush="true | false" %>
用来设置当buffer溢出时,是否需要强制输出。如果其值定义为true,则输出正常;如果它被设置为false,当buffer溢出时,就会导致一些意外错误的发生。如果把buffer设置为none,那么就不能把autoFlush设置为false。默认是true。
7)<%@ page isThreadSafe="true | false" %>
用来设置JSP文件是否支持多线程使用。如果设置为true,那么一个JSP能够同时处理多个用户的请求;相反,如果设置为false,一个JSP只能一次处理一个请求。默认值为true。
8)<%@ page info="text" %>
在JSP被执行时,用来描述当前JSP文件的相关信息。可以通过Servlet.getServletInfo()方法取得。
9)<%@ page errorPage="relativeURL" %>
设置处理异常事件的JSP文件。当发生异常时,就跳转到relativeURL指定的界面上。
10)<%@ isErrorPage="true | false" %>
设置此页是否为出错页,如果被设置为true,则可以使用exception对象。默认为false。
11)<%@ extends="package.class" %>
表明JSP编译时需要加入的Java class的全名,但是需要慎重使用,会限制JSP的编译能力。
18. (p72)在JSP文件中用Include指令包含一个静态的文件,同时解析这个文件中的JSP语句:<%@ include file="path" %>
Include命令将在JSP编译时插入一个包含文本或代码的文件。当使用include时,这个包含的过程是静态的。这个被包含的文件所执行的结果将会插入到JSP文件中放<%@include %>的地方。
19. (p77)<jsp:include>标签允许包含动态文件和静态文件。如果文件是静态文件,那么把包含的文件内容加到jsp文件中,这个被包含文件不会被JSP编译器执行。相反,如果这个被包含文件是动态的文件,那么这个被包含文件将会被JSP编译器执行。
20. (p78)<jsp:forward>标签重定向到一个HTML文件、JSP文件,或者一个程序段。该标签从一个JSP文件向另一个文件传递一个包含用户请求的request对象。<jsp:forward>标签以下的代码,将不能执行。可以使用<jsp:param>标签向目标文件传递参数和值,注意如果使用了<jsp:param>标签,那么目标文件必须是一个动态的文件。
21. (p80)<jsp:useBean>标签用来在JSP页面中创建一个Bean实例并指定它的名字以及作用范围。至于如何理解,请参考下面两个帖子:
http://turingbook.group.javaeye.com/group/blog/577256
http://www.wang48.com/jishubaodianview/?jsd_id=201
22. (p81)<jsp:getProperty name="name" property="propertyName" /> 将获得Bean的属性值,并将之转换为一个字符串,然后显示在JSP页面中。注意事项:
1)在使用<jsp:getProperty>之前,必须用<jsp:useBean>创建它。
2)不能使用<jsp:getProperty>来检索一个已经被索引了的属性。
3)能否和JavaBeans组件一起使用<jsp:getProperty>,但是不能与EJB一起使用。
23. (p85)<jsp:plugin>元素用于在浏览器中播放或显示一个对象(典型的就是Applet和Bean),而这种显示需要有浏览器的java插件。
24. 本章最后的例子没有看