JSP相关内容
JSP的编译指令
告诉jsp的引擎如何处理js页面。Jsp编译指令如下
<%@ 指令名 属性=“属性值”%>
l Include指令
说明标签:<%@ include file=” ”%>
动作标签:<jsp:include page=” ” flush=”true”/>
<jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” >
<jsp:param name=”fitstParamer” value=”firstValue”>
<jsp:param name=”lastParamer” value=”lastValue”>
</jsp:include>
一:执行时间上:
<%@ include file=”relativeURI”%> 是在翻译阶段执行
<jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行.
二:引入内容的不同:
<%@ include file=”relativeURI”%>
引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.
<jsp:include page=”relativeURI” flush=”true” />引入执行页面或servlet所生成的应答文本.
另外在两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径.将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.
JSP的指令标识
用于提供整个网页的相关信息和设置页面的相关属性。
指令元素包括三种分别是page,include,taglib
指令通用格式如下:
<%@ 指令类型 属性1=“属性值” 属性2=“属性值”...%>
1. page指令
页面指令,用于定义页面的全局属性及其值
<%@ page contentType=”text/html;charset=gb2312” import=”java.util.*,java.lang.*”%>
属性表:
属性 | 说明 |
language | Jsp的使用的脚本语言,默认的是Java |
import | 定义jsp可以使用哪些API,如果是多个就用逗号隔开;自动包含以下几个包:Java.lang.*,java.servlet.*,java.servlet.jsp.*,java.servlet.http.* |
PageEncoding | 指定jsp页面的指定编码方式。默认情况下为ISO-8859-1,如需在页面上显示中文,必须修改为gb2312或gbk |
contentType | 设置MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。类型和字符集;<%@ page contentType=”MIME,charset=字符集”%>默认情况下为ISO-8859-1,如需在页面上显示中文,必须修改为gb2312或gbk |
session | 设置用户能否需要http的session,其取值有true和false |
IsELIgnored | 其取值有true和false;true代表忽略jsp2.0表达式语言(EL),false为正常求值默认为false。 |
buffer | 指定out变量使用的缓冲区的大小,其取值有none和nkb 默认为8KB |
Info | 定义可以在servlet中通过getServletInfo方法获得的字符串 |
errorPage | 指定jsp页面,让此页面来处理当前页中抛出但未捕获的任何异常 |
isErrorPage | 表示当前页是否可以作用于其他jsp的错误页面 |
isThreadPage | 默认为true,表示jsp生成的servlet是允许并行访问的,false同一时间不允许多个请求访问servlet实例 |
extends | 指定jsp你页面生成的的servlet超类 |
autoFlush | 其取值有true和false;true代表控制缓冲区满之后自动清空输出缓冲区,false是缓冲区溢出后抛出异常 |
2. include指令
<%@ include file=”文件的绝对路径或者相对路径”%>
在指令出现的位置静态插入一文件。
3. taglib 指令
<%@taglib uri=”tagURI” prefix=”tagPrefix”%>
uri属性:该属性指定了标签描述库,该描述符是一个对标签描述文件(*.tld)的映射。文件定义了该标签库中的各个标签名称,并未为每个标签指定一个标签处理类。
Prefix属性:指定标签库的前缀。前缀不能命名为Java,jsp,sun,servlet,Javax,jspx等
动作标识
Jsp提供了一系列使用XML语法写成的动作标识,这些标识可以用来实现特殊的功能,如页面重定向、包含页面、使用javabean、appletx小程序等,可以使用<jsp:param>传递参数
<动作标识名称 属性1=”属性值”.../>
1. <jsp:include>
动作指令包含静态和动态的页面。Include包含是把页面当做静态对象,在转换的时候包含进来,而<jsp:inclue>把页面当做动态对象在页面运行时进行包含。
<jsp:include page=”被包含文件的路径” flush=”true/false”>
<jsp:param name=”参数名称” value=”参数值”/>
</jsp:include>
page属性:”/”则按照当前的应用路径查找文件;文件名或者是路径名称开头按照当前的路径来查找名称。
Flush属性:当输出缓冲区满了时是否清空缓冲区。
Include指令和<jsp:include>动作标识之间的差异
- 属性
<% String path=”login.jsp”%>
<%@ include file=”<%=path%>”%>
该方法将抛出文件找不到的异常
<jsp:include page=”<%=path%>”></jsp:include>
不会抛出异常
2. 处理方法
Include指令最终编译后得到的文件只有一个。
当做中包含的文件是一个独立编译的文件。
- 包含方式.
Include指令是静态包含(被包含的改变则主文件变化需重新编译主文件)
动作指令是动态包含(被包含文件在动作被执行时才会被重新编译否则不编译)
- 包含文件的约定
Include指令对被包含文件的有约定。约定两个page指令的coontentType属性值需要相同,否则抛出异常。动作标识就无须遵循这样的规定。
2. <jsp:forward>
请求转发到另一个jsp、HTML或者先关的资源文件中。
<jsp:forward page=”文件路径|标识路径的表达式”>
<jsp:param name=” 参数名” value=”参数值”/>
<jsp:param name=” 参数名” value=”参数值”/>
</jsp:forward>
3. <jsp:useBean>
在jsp页面上创建一个bean实例,并且可以通过属性的设置可以将实例存储到jsp指定范围内。如果指定的范围已将存在指定的BEAN实例那么将使用该实例,而不会重新创建。
<jsp:useBean
Id=”变量名” scope=”page|request|session|application”
{
Class=”package.className”|type=”数据类型”|class=”package.className” type=”数据类型”|beanName=”package.className” type=”数据类型”}
/>
<jsp: setPropeerty name=”变量名” property=’’ *’’>
也可以在表示体内嵌入子标识或其他内容
<jsp:useBaen id=”变量名” scope=”page|request|session|application”...>
<jsp:setProperty name=”变量名” property=”*”>
</jsp:useBean>
属性 | 说明 |
ID | 定义一个变量名,程序中使用该变量名对所创建的Bean实例进行引用 |
Type | 指定ID属性所定义变量的类型 |
Scope | 定位Bean实例的范围,缺省值为page。 |
Class | 指定一个完整的类名,与beanName的属性不能同时存在,若没有设置type属性必须设置class属性 |
BeanName | 指定一个完整的类名,与class属性不能同时存在,设置该属性必须设置type属性 |
属性的详细介绍
- ID属性
指定变量,在所定义的范围内或Scriptlet中将使用该变量来对创建的Bean实例进行引用。该变量必须符合Java中的变量的命名规则。
- Type属性
指定ID属性所定义变量的类型。Type属性可以指定要创建实例的类的本身、类的父类或者是一个接口。<jsp:useBean id=”us” type=”com.Bean.UserInfo” scope=”session”/>
- Scope属性
Page:指定了创建Bean实例只能够在当前的jsp文件中使用,包括 在通过include指令静态包含的页面中有效。
Request:bean实例可以在请求范围内的进行存取。在请求被转发 至被指定目标页面中可以通过request对象的getAttribute(“id属性 值”)方法获取创建的bean实例。一个请求的生命周期是从客户端 向服务器发出请求,到服务器响应请求并将结果返回给用户之后 结束,请求结束bean实例也失效了。
Session:在一个会话内有效
Application:服务器启动开始到关闭期间有效
- Class=“package.className”
package类名包的名字className类的class文件名称。该属性指定的类不能是抽象的,它必须有公共的没有参数的构造方法。没有type属性必须设置class属性<jsp:useBean id=”us” type=”com.Bean.UserInfo” scope=”session”/>程序首先会在session范围内查找”us” 的UserInfo类的实例,如果不存在,那么会通过new操作符来实现UserInfo来实例化,并以“us”存储到session的范围内
- Class=“package.className”type=”数据类型”
<jsp:useBean id=”us” class=”com.Bean.UserInfo” type=”com.Bean.UserBase” scope=”session”/>
假设UserBase为UserInfo的父类。该标识执行时,程序首先创建一个以type属性的值为类型,以ID属性值为名称变量us,并赋值为null;然后在session范围内查找这个us的实例,如果存在将其转换为type属性指定的UserBase类型并赋值给变量us;如果不存在,那么会通过new操作符来实现UserInfo来实例化,并以“us”存储到session的范围内
- BeanName=“package.className”type=”数据类型”
假设UserBase为UserInfo的父类。该标识执行时,程序首先创建一个以type属性的值为类型,以ID属性值为名称变量us,并赋值为null;然后在session范围内查找这个us的实例,如果存在将其转换为type属性指定的UserBase类型并赋值给变量us;如果不存在,那么会通过instantiate()方法从UserInfo类中实例化一个类并将其转换为UserBase类型后赋值给ID,最后将ID变量存储在session
<jsp:setProperty>
使用Bean给定的setXXX()方法,在bean中设置一个或多个属性。
属性 | 说明 |
Name | 必须存在的属性,指定一个bean实例 |
Property | 必须存在的属性,可选值为“*”或指定bean属性。*号表示bean中的name相匹配的所有请求参量名的属性都会传给适当的设置方法所有的 |
Param | 用于指定请求中的参数,这个可选属性规定了属性的具体值,不能同时使用param和value两个属性,但是允许两个同时不用。 |
Value | 指定一个值 |
设置属性值的方法:
(1)通过用户输入的所有值来匹配bean中的属性
(2)通过用户输入的指定的值来匹配
(3)在运行时使用一个表达式来匹配
<jsp:setProperty name=”beanName”
{
Property=”*”|property=”propertyName”|property=”propertyName ”param=”parameterName”|property=”propertyName ”value=”propertyValue}
/>
- name 属性
其属性被设置的bean实例的名称。<jsp:useBean>必须出现在<jsp:setProperty>之前,否则将会抛出一个异常。
- Property=”*”
在bean中,属性的名字和类型必须与request对象中的参数名称、类型一致。该属性用来存储jsp输入的所有值,用于匹配bean中的属性。
在客户端传到服务器端的参数值一般都是字符创类型,为了这些字符创能够在bean中匹配就必须转换成其他的类型。
其他类型 | 转换方法 |
boolean | Java.lang.Boolean.valueOf(String).booleanValue() |
Boolean | Java.lang.Boolean.valueOf(String) |
byte | Java.lang.Byte.valueOf(String).byteValue() |
Byte | Java.lang.Byte.valueOf(String) |
double | Java.lang.Double.valueOf(String).doubeValue() |
Double | Java.lang.Double.valueOf(String) |
Int | Java.lang.Interger.valueOf(String).intValue() |
Interger | Java.lang.Interger.valueOf(String) |
float | Java.lang.Float.valueOf(String).floatValue() |
Float | Java.lang.Float.valueOf(String) |
long | Java.lang.Long.valueOf(String).longValue() |
Long | Java.lang.Long.valueOf(String) |
- property=”propertyName”
使用request中的一个参数值来指定bean中的一个属性值
- property=”propertyName ”param=”parameterName”
Param指定request中的参数名
- property=”propertyName ”value=”propertyValue
Value指定的值来设定bean的属性
<jsp:getProperty>
获取属性的值并将其转换为一个字符串,然后将其插入到输出的页面中。该标签有一以下限制:
1不能使用该标签来检索一个已经被索引了的属性
2能够和JavaBean组件一起使用但是不能喝EJB不能一起使用。
语法:<jsp:gerProperty name=”BeanName” proerty=”prpertyName”/>
例子:
<jsp:useBean id=”user” scope=”session” class=”company.user”/>
<jsp:gerProperty name=”user” proerty=”prpertyName”/>
<jsp:fallback>
该标识是<jsp:plugin>的子标识,当使用<jsp:plugin>加载Java Applet小程序或者JavaBean下载失败是可以通过该标签向用户输出提示信息
例子:
<jsp:plugin type=“applet” code=”com.source.MyApplet.class” cadeBase=”.”>
<jsp:fallback>加载Java Applet小程序失败</jsp:fallback>
...
</jsp:plungin>
</jsp:plungin>
页面插入Java applet小程序或JavaBean,他们能够在客户端运行。该标识会根据客户端浏览器的版本转换成<object>或<embed>html元素
标识属性表如下:
Type | 插件对象类型bean或applet |
Code | Java类文件名称 |
Codebase | 默认值为当前访问jsp页面的路径 |
Name | bean或applet的名称 |
Archive | 指定预先加载的存档文件路径,多个路径可用逗号分隔 |
Align | 插件对象在页面中的对齐方式 |
Height、width | 页面显示的高度和宽度单位像素 |
Hspace、vspace | 在屏幕或单元格中所流出的空间 |
Jreversion | 默认值为1.1 |
Nspluginurl\iepluginurl | Netscape navogator 和Internet explorer用户能够使用的JRE下载地址 |
<jsp:params> | 传递参数 |
<jsp:fallback> | Java类文件加载失败显示给用户的提示信息 |