首页 > 代码库 > JSP语法

JSP语法

脚本程序

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。

脚本程序的语法格式:<% 代码片段 %>

任何文本、HTML标签、JSP元素必须写在脚本程序的外面。

 

<html>
      <head><title>HelloWorld</title></head>
<body>
HelloWorld!<br/>
<%
out.println("Your IP address is " +request.getRemoteAddr());
%>
</body>
</html>

JSP声明

一个声明语句可以声明一个或多个变量、方法,供后面的Java代码使用。在JSP文件中,必须先声明这些变量和方法然后才能使用它们。

JSP声明的语法格式: <%!declaration; [ declaration; ]+ ... %>

 

<%! int i =0; %>
<%! int a, b,c; %>
<%! Circle a= new Circle(2.0); %>
 

JSP表达式

一个JSP表达式中包含的脚本语言表达式,先被转化成String,然后插入到表达式出现的地方。

由于表达式的值会被转化成String,所以可以在一个文本行中使用表达式而不用去管它是否是HTML标签。

表达式元素中可以包含任何符合Java语言规范的表达式,但是不能使用分号来结束表达式。

JSP表达式的语法格式: <%=表达式 %>

<html>
<head><title>AComment Test</title></head>
<body>
<p>
   Today's date: <%= (newjava.util.Date()).toLocaleString()%>
</p>
</body>
</html>

JSP注释

JSP注释主要有两个作用:为代码作注释以及将某段代码注释掉。

JSP注释的语法格式:

<%-- 这里可以填写 JSP 注释 --%>

 

JSP 指令

JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。

JSP中的三种指令标签:

<%@ page ... %>       定义网页依赖属性,比如脚本语言、error页面、缓存需求等等

<%@ include ... %>   包含其他文件

<%@ taglib ... %>     引入标签库的定义

Page指令

<%@ page attribute="value" %>

等价的XML格式:

<jsp:directive.page attribute="value" />

 

下表列出与Page指令相关的属性:

buffer   指定out对象使用缓冲区的大小

autoFlush   控制out对象的 缓存区,true/false,默认为true

contentType      指定当前JSP页面的MIME类型和字符编码

errorPage   指定当JSP页面发生异常时需要转向的错误处理页面

isErrorPage 是否可以作为另一个JSP页面的错误处理页面,true/false

extends       指定servlet从哪一个类继承

import 导入要使用的Java类,多个包可以用逗号分割

info      定义JSP页面的描述信息,可以通过Servlet.getServletInfo()得到

isThreadSafe     指定对JSP页面的访问是否为线程安全

language     定义JSP页面所用的脚本语言,默认是Java

session 指定JSP页面是否使用session,true/false

isELIgnored 指定是否执行EL表达式,true/false

isScriptingEnabled   确定脚本元素能否被使用,true/false

trimDirectiveWhitespace 是否去掉指令前后的空白字符,true/false

Include指令

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

Include指令的语法格式如下:

<%@ include file="relative url" %>

Include指令中的文件名实际上是一个相对的URL。如果没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

等价的XML语法:

<jsp:directive.include file="relative url" />

与<jsp:include page=”url”/>的区别:Include指令是先包含,再编译,jsp:include标签是先运行,再包含,就是说前者是把包含的文件合并到一个文件,最后编译成一个class文件;后者是两个文件单独执行,然后将结果合并到一块

 

Taglib指令

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

Taglib指令的语法:

<%@ taglib uri="uri" prefix="prefixOfTag" %>

uri属性确定标签库的位置,prefix属性指定标签库的前缀。

等价的XML语法:

<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />
 

JSP 动作元素

与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的

动作元素基本上都是预定义的函数,JSP规范定义了一系列的标准动作,它用JSP作为前缀,可用的标准动作元素如下:

 

jsp:include  在页面被请求的时候引入一个文件。

jsp:useBean       寻找或者实例化一个JavaBean。

jsp:setProperty 设置JavaBean的属性。

jsp:getProperty 输出某个JavaBean的属性。

jsp:forward 把请求转到一个新的页面。

jsp:plugin    根据浏览器类型为Java插件生成OBJECT或EMBED标记。

jsp:element       定义动态XML元素

jsp:attribute      设置动态定义的XML元素属性。

jsp:body      设置动态定义的XML元素内容。

jsp:text 在JSP页面和文档中使用写入文本的模板

 

所有的动作要素都有两个属性:id属性和scope属性。

 

id属性:

id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用。

 

scope属性:

该属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命。 scope属性有四个可能的值:(a) page, (b)request, (c)session, 和 (d) application。

 

<jsp:include>动作元素

<jsp:include page="relative URL" flush="true" />

以下是include动作相关的属性列表。

page     包含在页面中的相对URL地址。

flush     布尔属性,定义在包含资源前是否刷新缓存区。

<jsp:useBean>动作元素

<jsp:useBean id="name" class="package.class" />
 

在类载入后,可以通过jsp:setProperty 和 jsp:getProperty 动作来修改和检索bean的属性。

 

以下是useBean动作相关的属性列表。

 

class     指定Bean的完整包名。

type      指定将引用该对象变量的类型。

beanName  通过 java.beans.Beans 的 instantiate() 方法指定Bean的名字。

 

     <jsp:useBean id="test" class="action.TestBean" />
      <!-- 此句可以从request域中自动取得所有符合的属性值-->
     <jsp:setProperty name="test" property="*" />
      <jsp:setProperty name="test"property="message"  value=http://www.mamicode.com/"HelloJSP..." />>

 

<jsp:setProperty>和<jsp:getProperty>

<jsp:setProperty>的属性列表

name    name属性是必需的。它表示要设置属性的是哪个Bean。

property     property属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。

value    value 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换。  value和param不能同时使用,但可以使用其中任意一个。

param  param 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。

 

<jsp:getProperty>的属性列表

name    要检索的Bean属性名称。Bean必须已定义。

property     表示要提取Bean属性的值

 

<jsp:forward> 和<jsp:param>

<jsp:forward page=”url”>
      <jsp:param name=”param1” value=http://www.mamicode.com/”value1”/>>

<jsp:directive>

<jsp:directive>与JSP指令相对应,可以互换

<jsp:directive.page/>

<jsp:directive.include/>

<jsp:directive.taglib/>

 

<jsp:element> 、 <jsp:attribute>、 <jsp:body>动作元素

<jsp:element>、 <jsp:attribute>、 <jsp:body>动作元素动态定义XML元素。动态是非常重要的,这就意味着XML元素在编译时是动态生成的而非静态。

 

以下实例动态定义了XML元素:

 

<%@page language="java" contentType="text/html"%>
<html xmlns="http://www.w3c.org/1999/xhtml"
     xmlns:jsp="http://java.sun.com/JSP/Page">
 
<head><title>GenerateXML Element</title></head>
<body>
<jsp:elementname="xmlElement">
<jsp:attributename="xmlElementAttr">
   Value for the attribute
</jsp:attribute>
<jsp:body>
   Body for XML element
</jsp:body>
</jsp:element>
</body>
</html>


执行时生成HTML代码如下:

 

<html xmlns="http://www.w3c.org/1999/xhtml"
     xmlns:jsp="http://java.sun.com/JSP/Page">
 
<head><title>GenerateXML Element</title></head>
<body>
<xmlElement xmlElementAttr="Value for the attribute">
   Body for XML element
</xmlElement>
</body>
</html>

JSP语法