上接前一日
--------------------------------------------------
12.JSP指令元素
JSP指令元素是JSP非常重要的组成部分。指令元素有三个,page、include和taglib,指令元素的语法格式为<%@ ************** %>,使用JSP指令元素可以设定JSP网页属性、描述网页信息等,下面针对三个指令元素进行详细的讲解:
12.1 page元素:初始化JSP网页的属性,其语法结构为
<%@ page attribute = "value" attribute2 = "value2"...%>
page元素的作用范围是整个JSP页面,因此可以把该元素放置在页面上任何位置,但是为了保证可读性,建议将其放置在文件顶部。
page元素主要有13个属性,详见下表:(该表最初的总结整理来源于 白广元等编著的《Java Web整合开发完全自学手册:Struts + Hibernate + Spring + Eclipse》page 23 在此谢谢白老师的总结和整理)
属性 | 定义 | 默认值 |
language = "scriptingLanguage" | 指定JSP服务器编译JSP网页的编译语言 | 目前只支持JAVA语言 |
extends = "className" | 定义JSP页面产生的Servlet继承哪个父类 | |
import = "importList" | 定义JSP页面引用的其他Java API | |
session = "true | false" | 是否使用session对象 | true |
Buffer = "none | size inkb" | 决定输出流 (Out Stream) 是否有缓冲区 | 8KB |
autoFlush = "true | false" | 决定输出流的缓冲区是否需要自动清除,缓冲区满了会产生异常(Exception) | true |
isThreadSafe ="true | false" | 多线程、并发设置,也就是告诉JSP服务器是否可以处理一个以上的请求 | true |
Info = “text” | JSP网页相关信息 | |
errorPage = "error_url" | JSP页面异常后网页会被重定向到哪一个URL | |
isErrorPage = "true | false" | 表示此JSP网页是否为处理异常错误的页面 | false |
contentType = "ctinfo" | 表示MIME类型和JSP网页的编码方式 | |
pageEncoding = "ctinfo" | 设置JSP网页编码方式 | |
isELIgnored = "true | false" | 设置JSP网页是否忽略EL表达式 | false |
提醒:1.session,session这个概念在计算机网络中极为重要,一般称为:会话。
计算机专业术语的Session:指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间,这个期间可以包括许多操作。
Web中的Session:指用户浏览网站时,从进入网站到浏览器关闭所经过的这段时间,综上所述,Session实际上是一个特定的时间概念。(因此,Session的概念需要包括客户端,服务器端以及不中断的操作时间。也就是每个客户端都会同服务器端建立单一的session,例如:A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。) --在JSP中 session的具体工作原理将会在后续的专题中进行讲解和分析,在此不再叙述。
2.MIME(Multipurpose Internet Mail Extensions):多用途互联网邮件扩展类型,就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
3.import属性可以使用多次,其他属性只能使用一次。
12.2 include元素:该元素用于向某JSP页面插入其他JSP文件的HTML文本和JAP代码等,在编译JSP网页时,服务器会先将相关的JSP页面粘合在一起,然后统一进行编译。在这里需要注意,如果include进来的JSP页面上拥有相同的JAVA变量或者函数定义,那么合并后编译会报错,HTML标签也同样会相互影响,因此,要避免片段文件中有<html>、<body>之类的全局标签出现。
该元素只有一个属性,其语法结构为: <%@ include file = "relativeURL" %>
12.3 taglib元素,能够让用户自定义新的标签。(后续会讲解如何自定义标签,如何使用自定义标签)
该元素的语法为: <%@ taglib uri = "tagLibraryURI" prefix = "tagPrefix"%>
uri 说明taglibrary的存放位置
prefix 用来区分多个自定义标签
13.JSP动作元素 或者叫 动作标签、动作指令
JSP动作元素是JSP自带的标准标签库,该库利用XML语法格式的标记来控制JSP服务器的行为。利用JSP动作元素可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生产HTML代码。该元素的整体语法格式为 : <jsp:xxx > xxxxxxxxx </jsp>
JSP中,标准动作元素包括
<jsp:include>:动态插入文件标签
<jsp:param>:KYE/VALUE标签
<jsp:forward>:跳转标签
<jsp:useBean>:JavaBean标签
<jsp:setProperty>:设置JavaBean属性标签
<jsp:getProperty>:读取JavaBean属性标签
<jsp:plugin>:插件标签
<jsp:fallback>:报错标签
<jsp:element>:元素标签(jsp2.0)
<jsp:attribute>:属性标签(jsp2.0)
<jsp:body>:body标签(jsp2.0)
13.1 <jsp:include>:动态插入文件标签,该标签的作用是把文件或表达式代表的文件插入到正在生成的JSP页面中去,这里的动态插入与<%@ include %>这种静态引入文件的方式不同,不同点如下:
13.1.1引入文件的时间不同:静态引入是在JSP文件被转换成Servlet的时候进行的,动态引入是在页面被请求的时候进行的。
13.1.2引入文件的内容和格式不同:静态引入的文件内容和格式是JSP网页片段,而动态引入的则是完整的JSP文件,JSP服务器会结合客户端请求将两个JSP文件分别转化为不同的Servlet,此处的变量名、方法等都是可以重复的。
13.1.3引入文件的效率不同:静态的会快一些。
13.1.4引用文件名的方式不同:相比静态引用文件,动态引用文件的文件名可以是一个变量或表达式。
13.1.5编译范围不同:动态引用文件会单独编译相关的文件,不会进行整体编译。
该标签的语法为:<jsp:include page = "relative URL" flush = "true | false"/> , flush = true 表示缓冲区满时会自动情况(默认为false)。
13.2 <jsp:forward>:跳转标签,该标签的作用是把请求转到其他页面,语法为 <jsp:forward page = "relative URL" />,其中page的参数值可以为表达式,比如,<jsp:forward page = "<%=javaExpression%>" />
13.3 <jsp:useBean>:JavaBean标签,<jsp:setProperty>:设置JavaBean属性标签,<jsp:getProperty>:读取JavaBean属性标签。
这一组标签恐怕是JSP中最重要的一组标签了,通过装载JavaBean,实现对于JavaBean的操作和JAVA组件的重用(POJO),同时也避免了JSP实例化对象的复杂度。下边是这三个标签的语法:
13.3.1 <jsp:useBean id = "name" class = "package.classpage.classname"> ,由于参数较多,因此整理到下表:
属性 | 属性描述 | 初始值 |
id | 命名引用该JavaBean的变量,如存在id和scope相同的JavaBean实例,则使用已有实例,不会重新创建实例 | |
class = "package.classpage.classname" | 指定JavaBean的完整路径名(包结构) | |
scope=“scopeType” | 指定JavaBean可以在那种上下文中使用,标准属性值有4个,分别是: page、request、session 和 application | page |
type="TypeName" | 指定引用该对象的变量类型 | |
beanName = "BeanName" | 制定JavaBean的名字,如果提供type和beanName属性,允许省略class属性 |
13.3.2 <jsp:setProperty name = "BeanName" property = "property" value = "value">
属性 | 属性描述 |
name | 表示要设置属性的BeanName |
property | 属性名 |
value | 属性值 |
param | 指定用哪个请求参数作为Bean属性的值 |
13.3.3 <jsp:getProperty name = "BeanName" property = "property">
属性 | 属性描述 |
name | 表示要设置属性的BeanName |
property | 属性名 |
13.3.4 下面给大家写个简单的例子展示一下jsp:useBean的用法,他装载一个Bean,然后设置/读取gossip girl属性
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'gossipTestBean.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<p> TestBean - check </p><br>
<!--
JavaBean的定义,其中id = test bean 是用来给 其他两个标签中name调用的
-->
<jsp:useBean id = "testbean" class = "nc.ui.test.testbean.CheckBean" />
<!--
设置JavaBean的属性值,其中property 引用的是JAVA类中CheckBean的gossip变量
value便是给javabean赋值的值
-->
<jsp:setProperty name = "testbean" property = "gossip" value ="Hello Gossip Girl" />
<!--
获取JavaBean的属性值,其中property 引用的是JAVA类中CheckBean的gossip变量
-->
<jsp:getProperty name = "testbean" property = "gossip" />
</body>
</html>
package nc.ui.test.testbean;
public class CheckBean {
private String gossip = "I am B";
public String getGossip() {
return gossip;
}
public void setGossip(String gossip) {
this.gossip = gossip;
}
}
显示的效果如下: