三:动作语法(action)(JSP_0300_Action工程)
?
1:<jsp:include>(include文件夹下的程序)
用于动态包含JSP程序或HTML文件等
除非这个指令会被执行到,否则它是不会被Tomcat等JSP?Engine编译。
格式:
<jsp:include?page=“URLSpec”?flush=“true”/>
<jsp:include?page=“URLSpec”?flush=“true”>
<jsp:param?name=“ParamName”?value=“paramValue”/>
</jsp:include>
jsp:param用来设定include文件时的参数和对应的值
jsp:include和编译指令@include的区别
1.@include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而jsp:include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入
2.@include不能带参数,?而<jsp:include>可以动态包含的文件和被包含文件用的是同一个request对象
?
?
2:<jsp:forward>(forward文件夹下的程序)
???jsp:param用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)
格式:
<jsp:forward?page=“urlSpec”?flush=“true”/>
<jsp:forward?page=“urlSpec”>
<jsp:param?name=“paramName”?value=“paramValue”/>
</jsp:forward>
<jsp:param>用于指定参数和其对应的值
?
<jsp:forward>与response.sendRedirect的区别
<jsp:forward>
使用同一个request
forward后的语句不会继续发送给客户端
速度快
服务器内部转换,
可以传参数
response.sendRedirect
是不同的request
send后的语句会继续执行,除非return
速度慢
需要到客户端的往返,可以转到任何页面
可以传参数,直接写在url后面
?
?
3:<jsp:useBean>(testbean文件夹下的程序)
通过jsp:useBean,可以在JSP中使用定义好的Bean
?
Bean的基本要素:
1:必须要有一个不带参数的构造器。在JSP元素创建Bean时会调用空构造器
2:Bean类应该没有任何公共实例变量,也就是说,不允许直接访问实例变量,变量名称首字母必需小写
3:通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改成大写
?
jsp:useBean各项参数含义:
id:对象实例名称
scope:Bean作用的范围,默认为page,对整个jsp页面有效
class:Bean类名称(全名)
type:Bean实例类型,可以是本类,或其父类,或实现的接口,默认为本类
?
Scope各项参数的意义:
page:仅涵盖使用JavaBean的页面
(PageBean.jsp/CounterBean.java)
request:有效范围仅限于使用JavaBean的请求
(RequestBean.jsp/RequestBean2.jsp/CounterBean.java)
session:有效范围在用户整个连接过程中(整个会话阶段均有效)
(SessionBean.jsp/Session2.jsp/CounterBean.java)
application:有效范围涵盖整个应用程序。也就是对整个网站均有效
(Application.jsp/Application2.jsp/CounterBean.java)
<jsp:useBean>?
创建一个Bean实例并指定它的名字和作用范围.?
JSP?语法?
<jsp:useBean?id="beanInstanceName"?scope="page/request/session/application"?
{?
class="package.class"? ?
type="package.class"? ?
class="package.class"?type="package.class"? ?
beanName="{package.class?<%=?expression?%>}"?type="package.class"?
}?
{?
/>? ?
>?other?elements?</jsp:useBean>?
}?
例子?
<jsp:useBean?id="cart"?scope="session"?class="session.Carts"?/>?
<jsp:setProperty?name="cart"?property="*"?/>?
<jsp:useBean?id="checking"?scope="session"?class="bank.Checking"?>?
<jsp:setProperty?name="checking"?property="balance"?value="0.0"?/>?
</jsp:useBean>?
描述?
<jsp:useBean>用于定位或示例一个JavaBeans组件。<jsp:useBean>首先会试图定位一个Bean实例,如果这个Bean不存在,那么<jsp:useBean>就会从一个class或模版中进行示例。?
为了定位或示例一个Bean,<jsp:useBean>会进行以下步聚,顺序如下:?
通过给定名字和范围试图定位一个Bean.?
对这个Bean对象引用变量以你指定的名字命名.?
如果发现了这个Bean,将会在这个变量中储存这个引用。如果你也指定了类型,那么这个Bean也设置为相应的类型.?
如果没有发现这个Bean,将会从你指定的class中示例,并将此引用储存到一个新的变量中去。如果这个class的名字代表的是一个模版,那么这个Bean被java.beans.Beans.instantiate示例.?
如果<jsp:useBean>已经示例(不是定位)了Bean,同时<jsp:useBean>和</jsp:useBean>中有元素,那么将会执行其中的代码.?
<jsp:useBean>元素的主体通常包含有<jsp:setProperty>元素,用于设置Bean的属性值。正如上面第五步所说的,?<jsp:useBean>的主体仅仅只有在<jsp:useBean>示例Bean时才会被执行,如果这个Bean已经存在,?<jsp:useBean>能够定位它,那么主体中的内容将不会起作用?
属性以及用法?
id="beanInstanceName"?
在你所定义的范围中确认Bean的变量,你能在后面的程序中使用此变量名来分辨不同的Bean?
这个变量名对大小写敏感,必须符合你所使用的脚本语言的规定,在Java?Programming?Language中,这个规定在Java?Language?规范已经写明。如果这个Bean已经在别的<jsp:useBean>中创建,那么这个id的值必须与原来的那个id值一致.?
scope="page? ?request? ?session? ?application"?
Bean存在的范围以及id变量名的有效范围。缺省值是page,以下是详细说明:?
page?-?你能在包含<jsp:useBean>元素的JSP文件以及此文件中的所有静态包含文件中使用Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。?
?
request?-?你在任何执行相同请求的Jsp文件中使用Bean,直到页面执行完毕向客户端发回响应或转到另一个文件为止。你能够使用Request对象访问Bean,比如request.getAttribute(beanInstanceName)?
session?-?从创建Bean开始,你就能在任何使用相同session的Jsp文件中使用Bean.这个Bean存在于整个Session生存周期内,任何在分享此?Session的Jsp文件都能使用同一Bean.注意在你创建Bean的Jsp文件中<%?@?page?%>指令中必须指定session=true?
application?-?从创建Bean开始,你就能在任何使用相同application的Jsp文件中使用Bean.这个Bean存在于整个application生存周期内,任何在分享此application的Jsp文件都能使用同一Bean.?
class="package.class"?
使用new关键字以及class构造器从一个class中示例一个bean.这个class不能是抽象的,必须有一个公用的,没有参数的构造器.这个package的名字区别大小写。?
type="package.class"?
如果这个Bean已经在指定的范围中存在,那么写这个Bean一个新的数据库类型?。如果你没有使用class或beanName指定type,Bean将不会被示例.package和class的名字,区分大小写.?
beanName="{package.class? ?<%=?expression?%>}"?type="package.class"?
使用java.beans.Beans.instantiate方法来从一个class或连续模版中示例一个Bean,同时指定Bean的类型。?
beanName可以是package和class也可以是表达式,它的值会传给Beans.instantiate.tupe的值可以和Bean相同。?
package?和?class?名字区分大小写.?
?
?
4:<jsp:getProperty>
<jsp:getProperty?name=“beanName”?property=“propertyName”/>
相当于beanName.getPropertyName()方法调用(getXxx()方法)
?
获取Bean的属性值,用于显示在页面中
JSP?语法
<jsp:getProperty?name="beanInstanceName"?property="propertyName"?/>
例子
<jsp:useBean?id="calendar"?scope="page"?class="employee.Calendar"?/>
<h2>
Calendar?of?<jsp:getProperty?name="calendar"?property="username"?/>
</h2>
描述
这个<jsp:getProperty>元素将获得Bean的属性值,并可以将其使用或显示在JSP页面中.在你使用<jsp:getProperty>之前,你必须用<jsp:useBean>创建它.
?
<jsp:getProperty>元素有一些限制:
你不能使用<jsp:getProperty>来检索一个已经被索引了的属性
你能够和JavaBeans组件一起使用<jsp:getProperty>,但是不能与Enterprise?Bean一起使用。
属性
name="beanInstanceName"
bean的名字,由<jsp:useBean>指定
property="propertyName"
所指定的Bean的属性名。
?
技巧:
在sun的JSP参考中提到,如果你使用<jsp:getProperty>来检索的值是空值,那么NullPointerException将会出现,同时如果使用程序段或表达式来检索其值,那么在浏览器上出现的是null(空).
?
?
5:<jsp:setProperty>
<jsp:setProperty?name=“beanName”?
property=“propertyName”?|property=“*”
value=“property?value”?|param=“paramName”/>
相当于beanName.setPropertyName(value)方法调用(setXxx()方法)
设置Bean中的属性值.?
JSP语法?
<jsp:setProperty?
name="beanInstanceName"?
{?
property=?"*"? ?
property="propertyName"?[?param="parameterName"?]? ?
property="propertyName"?value="{string? ?<%=?expression?%>}"?
}?
/>?
例子?
<jsp:setProperty?name="mybean"?property="*"?/>?
<jsp:setProperty?name="mybean"?property="username"?/>?
<jsp:setProperty?name="mybean"?property="username"?value="Steve"?/>?
描述?
<jsp:setProperty>元素使用Bean给定的setter方法,在Bean中设置一个或多个属性值。你在使用这个元素之前必须得使?用<jsp:useBean>声明此Bean.因为,<jsp:useBean>和<jsp:setProperty>是联系在一起的,同时这他们使用的?Bean实例的名字也应当相匹配(就是说,在<jsp:setProperty>中的name的值应当和<jsp:useBean>中id的值相同)?
你能使用多种方法利用<jsp:setProperty>来设定属性值?:?
通过用户输入的所有值(被做为参数储存中request对象中)来匹配Bean中的属性?
通过用户输入的指定的值来匹配Bean中指定的属性?
在运行时使用一个表达式来匹配Bean的属性?
每一种设定属性值的方法都有其特定的语法,下面我们会来讲解?
属性及其用法?
name="beanInstanceName"?
表示已经在<jsp:useBean>中创建的Bean实例的名字.?
property="*"?
储存用户在Jsp输入的所有值,用于匹配Bean中的属性。在Bean中的属性的名字必须和request对象中的参数名一致.?
从客户传到服器上的参数值一般都是字符类型?,这些字符串为了能够在Bean中匹配就必须转换成其它的类型,下面的表中列出了Bean属性的类型以及他们的转换方法.?
把字符串转化为其它类型的方法.?Property?类型?
方法?
boolean?or?Boolean?
java.lang.Boolean.valueOf(String)?
byte?or?Byte?
java.lang.Byte.valueOf(String)?
char?or?Character?
java.lang.Character.valueOf(String)?
double?or?Double?
java.lang.Double.valueOf(String)?
integer?or?Integer?
java.lang.Integer.valueOf(String)?
float?or?Float?
java.lang.Float.valueOf(String)?
long?or?Long?
java.lang.Long.valueOf(String)?
如果request对象的参数值中有空值,那么对应的Bean属性将不会设定任何值。同样的,如果Bean中有一个属性没有与之对应的Request参数值,那么这个属性同样也不会设定.?
property="propertyName"?[?param="parameterName"?]?
使用request中的一个参数值来指定Bean中的一个属性值。在这个语法中,property指定Bean的属性名,param指定request中的参数名.?
如果bean属性和request参数的名字不同,那么你就必须得指定property和param?,如果他们同名,那么你就只需要指明property就行了.?
如查参数值为空(或未初始化),对应的Bean属性不被设定.?
property="propertyName"?value="{string??<%=?expression?%>}"?
使用指定的值来设定Bean属性。这个值可以是字符串,也可以是表达式。如果这个字符串,那么它就会被转换成Bean属性的类型(查看上面的表).如果它是一个表达式,那么它类型就必须和它将要设定的属性值的类型一致。?
如果参数值为空,那么对应的属性值也不会被设定。另外,你不能在一个<jsp:setProperty>中同时使用param和value?
技巧?
如果你使用了property="*",那么Bean的属性没有必要按Html表单中的顺序排序
?