第5章 JSP语法及应用分析

本文详细解读了JSP文件中的注释、模板元素、指令元素及动作元素,包括HTML/XML注释、JSP注释、Java注释、脚本元素(声明、表达式、脚本)、指令元素(页面、include、taglib)和动作元素(参数、包含、转发、属性设置、属性获取、JavaBean调用)。文章旨在帮助开发者深入了解JSP文件的内部结构和工作原理。

JSP文件的构成元素分析


分析JSP文件中的注释

1.HTML/XML注释

这种注释方式可以用来注释JSP文件中除了java脚本外的所有内容。它用"<!--"和"-->"之间的部分来标识。它的特点是当JSP被解析为Java文件时,

注释的语句被out.println()方法返回到客户端,所以在作为JSP响应发送到客户端的HTML代码中,仍然可以找到这类注释。


2.JSP注释

这类注释同样可以用来注释JSP文件中除了Java脚本外的所有内容。它用“<%--”和"--%>"之间的部分来标识。它的特点是只能用来注释JSP文件,

在JSP文件解析为Java文件时,这类注释会被删除,不会出现在Java代码中,更不会出现在返回到客户端的HTML源码中。


3.Java注释

这种注释方式只能用来注释Java脚本。它的特点是在JSP被解析为Java文件时被保留,所以它也可以用来注释JSP对应的Java文件。


模板元素


脚本元素


1.声明(Declaration)

它们是脚本元素中声明变量和方法的部分,一般用符号"<%!"和"%>"来标识。声明完一个方法或者变量后就可以在剩余的脚本元素中去调用该方法或变量。


2.表达式(Expression)

它们把方法的结果或变量的值作为一个字符的输出,一般用"<%="和"%>"之间的部分来标识。


3.脚本(Scriptlets)

它们一般是在遍历和循环中将方法的结果或变量的值用out.println()方法输出,用"<%"和"%>"之间的部分来标识。


指令元素


指令元素一般有3类:  页面(page)指令,include指令和taglib指令。它们一般用符号"<%@"和"%>"之间的部分来标识


动作元素


动作元素一般用标签"<jsp:XXX>"来标识


脚本元素详解


脚本元素中的声明(Declaration)


在JSP文件的脚本元素中,声明用来定义变量和方法。它用来将文件中用到的变量或方法封装起来,这样可以使代码

变得简洁,只有声明后的变量才能在其他地方调用。声明的格式如下:

<%! variable declaration /method declaration(paraType param) %>

脚本元素中的表达式(Expression)


表达式将一个常量、变量或者方法的返回值输出为一个字符串。表达式必须有一个返回值,它输出的字符串作为HTML页面的一部分被最终输出到

客户端显示。语法如下所示:

<%= Some Java expression%>


脚本元素中的Scriptlet


Scriptlet是一段可以在请求处理阶段执行的Java代码。它可以用来进行业务逻辑的处理;可以用来产生一些输出;可以是一些流程控制语句;

还可以是一些Java注释。Scriptlet一般包含在"<%"和"%>"之间,语法如下所示

<% Java code statements %>

在JSP文件被解析为Java代码时,Scriptlet被包含在Java代码的Service()方法中。


指令元素详解


指令元素是指在JSP文件中包含在符号"<%@"和符号"%>"之间的部分。他不向客户端输出任何内容,是用来设置全局变量,声明类、要实现的方

法和输出内容的类型等。在JSP文件被解析为Java文件时,Web容器会将它们翻译为对应的Java代码。指令元素的格式如下:

<%@ directivename attribute="value",attribute="value" %>

directivename一般有3个值:page,include和taglib,分别代表页面指令,include指令和taglib指令。attribute的值根据directivename值得不同而不同。


页面(page)指令元素


页面指令用来定义JSP文件中的全局属性,这些全局属性都是影响整个页面的重要属性。一个JSP文件中可以有多个页面指令,在JSP文件被解析为Java代码

时,这些页面指令也被解析为对应的Java代码。页面指令的格式如下:

<%@ page attribute="value"...

其中,attribute可以为language,import,contentType,session,buffer,autoFlush,isThreadSafe,info,errorPage,isErrorPage,extends等。

需要说明的是上述attribute中,除了import,其他的属性只能有一个属性/值对。页面指令的详细语法如下所示。

<%@ page
    [language="Java"]
    [import="{package.class|package.*}",...]
    [contentType="TYPE,charset=CHARSET"]
    [session="true"|"false"]
    [buffer="none|4kb|sizekb"]
    [autoFlush="true"|"false"]
    [info="text"]
    [errorPage="true|false"]
    [extends="package.class"]
    [isELIgnored="true"|"false"]
    [pageEncoding="painfo"]
%>


包含(include)指令元素

include指令用来将指定位置上的资源包含在当前JSP文件中。在JSP文件被编译为Java文件时,这些被包含的资源会被作为JSP文件的一部分被翻译为

Java文件。所以这些资源可以看做是JSP文件的一部分。include指令的格式如下:

<%@ include file="filename" %>

上面的filename指定要包含资源的文件名。如果filename以"/"开头,那么该文件的路径是参照JSP应用的上下文路径;如果filename是以文件名或目录

名开头,那么该文件的路径就是当前JSP文件的路径。


自定义标签(taglib)指令元素


自定义标签的一般顺序是开发标签库、为标签库编写.tld配置文件、最后在JSP页面里使用自定义标签。在JSP文件中taglib指令的使用格式如下:

<%@ taglib url="taglibURL" prefix="tagPrefix" %>


动作元素详解


参数元素<jsp:param>


该动作元素用来给其他的标签提供参数。

<jsp:param name="paramName" value="paramValue" />

包含元素<jsp:include>


该动作元素用于在客户端请求时间内把静态或者动态的资源包含在JSP页面内,被包含的对象只有对JspWriter对象的访问权,并且它不能设置头

和Cookie。该指令的格式如下:

<jsp:include page="fileName" flush="true" />

1.page="fileName"

fileName为一个被包含资源的相对路径,或者是代表相对路径的表达式。如果路径以“/”开头,那么路径主要是参照JSP应用的上下文路径;如果路径

以文件名或目录名开头,这个路径就是当前使用的JSP文件的路径。

2.flush="true"

该属性用来指定是否自动刷新。flush的值必须被设置为true,不能为false,但是默认值为false。

3.<jsp:param/>

<jsp:param>可以用来被包含的动态页面传递一个或多个参数。


转发元素<jsp:forward>


该元素用来将请求转发到其他的JSP页面、Servlet或者静态资源文件,每当遇到该元素时,就停止执行当前的JSP而执行被转发的资源。请求转发的

资源必须位于和发送请求的JSP页面相同的上下文环境中。该元素的使用方式为:

<jsp:forward page="url"/>
或者
<jsp:forward page="url">
<jsp:param name="paramName" value="paramValue"/>
...
</jsp:forward>

1.page="url"

url的值为一个字符串或者一个表达式,用于指定要请求的文件的URL或文件名。要请求的文件可以是JSP文件、Servlet,或一个程序端。

2.<jsp:param name="paramName" value="paramValue">


属性设置元素<jsp:setProperty>


该元素和<jsp:useBean>一起使用,用来给JavaBean设置属性,该标签会调用JavaBean的setXXX()方法去完成一个或者多个属性的设置。使用

该元素一般有4中方法:


<jsp:setProperty name="BeanName" property="*">
<jsp:setProperty name="BeanName" property="propertyName" param="parameterName">
<jsp:setProperty name="BeanName" property="propertyName">
<jsp:setProperty name="BeanName" property="propertyName" value="propertyValue">


4中方法都有name,它用来指定设置值得JavaBean的名字,下面解释各种方法.


1.property="*"

这种设置方式最快捷。JSP的内在机制会将request对象中的参数名字和JavaBean中的属性名字进行配对,并对名字相同的参数值赋给JavaBean中的

同名属性。使用这种方式要求JavaBean中的属性和request对象中的参数的名字相匹配。

如果request对象中某一个匹配参数值为空值,那么对应的JavaBean中的属性不会设置任何值;同样,如果JavaBean的属性中有一个在request对象

中找不到与它对应的参数,那么这个属性也不会被设置任何值。


2.property=“propertyName” param=“parameterName”

propertyName代表JavaBean的属性,它和JavaBean中某属性的setXXX()中的XXX必须相同。parameterName代表request对象中的参数名。该方式

把指定的参数值赋值给指定的属性值,适应于属性名和参数名不一致的情况。


3.property=“propertyName”

propertyName代表JavaBean的一个属性。这种方式将request对象中与该属性名字相同的参数的值赋给这个属性。如果request中没有与该属性匹配

的参数,这个属性也不会被设置任何值。


4.property=“propertyName” value="propertyValue"

propertyValue可以是一个字符串,也可以是表达式。如果是字符串,需要用对象的valueOf()方法将其转换为对应JavaBean属性的数据类型。



属性获取元素<jsp:getProperty>


该元素用来获取JavaBean中属性的值。它将JavaBean的值转换为String类型,然后发送到输出流中。它使用的方法如下:

<jsp:getProperty name="BeanName" property="propertyName">


1.name="BeanName"

这个是必须指定的,BeanName为JavaBean的名字,也即通过<jsp:useBean/>引入的JavaBean的id

2.property=“userName”


JavaBean调用元素<jsp:useBean>

该元素用来在JSP文件中使用一个JavaBean的实例,并声明该实例的名字以及作用范围,从而保证该实例可以在声明的作用范围内使用。使用的语法如下所示:

<jsp:useBean id="name" scope="page|request|session|application" class="className">


1.id="name"

id用来在使用范围内唯一标识该JavaBean的实例,这样就可以通过它来调用该JavaBean的实例。


2.scope=“page|request|session|application”

该项用来指定JavaBean实例的使用范围,它的默认值是page。以下是各项的详细说明。

page:可以在使用<jsp:useBean>标签的JSP文件以及该文件包含的所有静态资源中使用。直到执行完毕向客户端发回响应或转到另外一个文件为止。


request:在请求的范围内有效,可以使用request对象访问JavaBean。


session:从创建JavaBean实例开始,就可以在session有效的范围内使用这个实例。这个实例对jsp页面来说是共享的。可以使用session对象访问

JavaBean实例。但是需要注意的是在创建该JavaBean实例的JSP文件中,必须在页面指令<%@page %>中声明"session=true"


application:在创建JavaBean实例开始,就可以在使用相同application的所有JSP页面中使用该实例。application对象在应用服务器启动时就创建了,直到

该服务器关闭才结束。


3.class=“className”

class用来指定该JavaBean类的路径和类名。这样Web容器中才能找到该JavaBean对应的Class文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值