JSP简介
所谓JSP就是在网页文件中嵌入Java代码或JSP定义的一些标记。JSP是建立在Servlet上的,在执行时JSP容器会先将JSP文件转换成Servlet文件以及class 文件,然后再执行。所以说JSP实际上也是Servlet。JSP容器也是Servlet容器。
JSP语法
JSP页面由元素和模板数据组成,模板数据不必理会,这些内容将直接发到客户端,JSP容器不会处理,例如HTML内容。
JSP元素分为指令元素、脚本元素和动作元素三种。
指令元素
指令元素用于为转换阶段提供整个JSP页面的相关信息,不会产生任何的输出到当前的输出流中。指令元素有三种分别是:page、include和taglib。语法形式如下所示:
<%@ directive (attr="value")* %>
XML语法格式
<jsp:directive.page attr1="value1" attrl="value2".. />
page指令
page指令的作用范围是整个JSP页面,无论放到哪里都可以,好的习惯应该放到JSP页面的顶部。page指令有13个属性:
- language="scriptingLanguage"
用于指定脚本元素使用的脚本语言,默认java,就目前来说也仅支持java
- extends="className"
用于指定JSP页面转换后的Servlet类从哪一个类继承,通常不需要使用,JSP容器会自动提供。需要注意的是该值时完整的限定类名
- import="importList"
用于指定脚本环境中可以使用的Java类。例如:
<%@ page import="java.util.Vector, java.io.*" %>
//或者
<%@ page import="java.util.Vector" %>
<%@ page import="java.io.*" %>page指令中只有import属性可以重复设置。默认导入列表是:java.lang.*,java.servlet.*,java.servlet.jsp.*和javax.servlet.http.*。
- session="true|false"
用于指定JSP页面中是否可以使用session对象,默认true
- buffer="none|sizekb"
用于指定out对象的缓冲区大小,若设为none,表示没有缓冲区,所有输出通过ServletResponse的PrintWriter对象写出。单位为kb,默认8kb。
- autoFlush="true|false"
用于指定当缓冲区满的时候,缓存是否自动刷新,若设为false,当缓冲区满时会抛出一个异常。默认true
- isThreadSafe="true|false"
用于指定对JSP页面的访问是否是线程安全的。默认true。此属性不推荐使用
- info="info_text"
用于指定页面的相关信息,该信息可以通过Servlet接口的getServletInfo()方法得到。
- errorPage="error_url"
用于指定当JSP页面发生异常时,将转向哪一个错误处理页面。需要注意的是,若一个页面通过使用该属性定义了错误页面,那么在web.xml文件中定义的任何错误页面将不会被访问。
- isErrorPage="true|false"
用于指定当前JSP页面是否是另一个JSP页面的错误处理页面,默认false。
- contentType="ctinfo"
指定用于响应的JSP页面的MIME类型和字符编码。例如:
<%@ page contentType="text/htmll charset=gb2312" %>
- pageEncoding="peinfo"
用于设置JSP页面使用的字符编码,若设置了该属性,则使用该属性指定的字符集,若无,则使用contentType属性指定的字符集,如果两个都没有指定,则使用字符集"ISO-8859-1"
- isELIgnored="true|false"
用于定义在JSP页面中是否执行或忽略EL表达式。默认值依赖于web.xml文件。
include指令
include指令用于在JSP页面中静态的包含一个文件,该文件可以使JPS文件,HTML文件、文本文件或者一段Java代码。需要注意的是包含的文件最好不要包含<html><body>等标签,这会影响到原JSP文件中同样的标签。源文件与被包含文件可以彼此访问定义的变量和方法,因此包含时需要格外小心。include指令语法如下:
<%@ include file="relativeURLsper" %>
xml语法格式
<jsp:directive.include file="relativeURLspec" />
示例:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030" %>
<%@ page contentType="text/html; charset=gb2312" %>
<html>
<head>
<title>My JSP 'MyJsp.jsp' starting page</title> </head>
<body>
现在时间是:
<%@ include file="date.jsp" %>
</body>
</html>
date.jsp
<%
out.println(new java.util.Date().toLocaleString());
%>
taglib指令
taglib指令允许页面使用用户定制的标签。语法格式如下:
<%@ taglib (uri="tagLibraryURL" | tagdir="tagDir") prefix="tagPrefix" %>
xml语法格式
<jsp:directive.taglib (uri="tagLibraryURL" | tagdir="tagDir") prefix="tagPrefix" />
- uri
该属性唯一的标识和前缀相关的标签库描述符,可以是绝对或者相对的URI。这个URI用于定位标签库描述符的位置
- tagdir
该属性指示前缀将被用于标识安装在/WEB-INF/tags/目录或者子目录下的标签文件
- prefix
定义一个prefix:tagname形式的字符串前缀,用于区分多个自定义标签。
脚本元素
脚本元素包含三个部分:声明、表达式和脚本段
声明
声明脚本元素用于声明在JSP页面的脚本语言中使用的变量和方法。声明必须是完整的声明语句,遵照java语言的语法。声明不会再当前输出流中产生任何输出。
声明语法:
<%! declaration(s) %>
xml语法格式的声明
<jsp:declaration>declaration(s)</jsp:declaration>
声明示例:
<%! int i; %>
<%! int j =0; %>
<%! public String f(int i) {if (i<3) return "3" ;} %>
可以再一个声明中声明多个变量和方法,也可以使用多个声明。在声明变量的时候要注意不要忘记变量后面的分号,声明只在当前JSP页面有效。另外,使用声明声明的变量,在JSP容器转化JSP页面为Servlet类时,将作为该类的实例变量(类成员变量)或者类变量(类静态成员变量),在多用户并发访问时,这将导致线程安全的问题。
脚本段
脚本段是在请求处理期间要执行的java代码段。脚本段可以产生输出,并将输出发送到客户端,也可以是流程控制语句。语法如下:
<% scriptlet %>
xml语法格式
<jsp:scriplet> scriplet</jsp:scriplet>
在脚本段中声明的变量为局部变量,在后面的脚本段中可以使用该变量。脚本段中的变量时线程安全的。
表达式
表达式脚本元素是Java语言中完整的表达式,在请求处理时计算这些表达式,计算的结果将被转成字符串,插入到当前的输出流中。语法如下:
<%= expression %>
xml语法格式
<jsp:expression> expression</jsp:expression>
要注意,在书写表达式时,一定不要再表达式后面添加任何的标点符号。
动作元素请见下一个博文。