Web基础知识(10)- JSP (二)
作者:互联网
JSP 指令、JSP 动作
1. JSP 指令
JSP 指令(directive)用来告诉 Web 服务器如何处理 JSP 页面的请求和响应。
服务器会根据 JSP 指令来编译 JSP,生成 Java 文件。JSP 指令不产生任何可见输出,在生成的 Java 文件中,不存在 JSP 指令。
JSP 指令语法如下:
<%@ directive attribute = "value" [attribute2 = "value2" ...] %>
注意:[] 中的内容是可选的,@ 符号和指令名称之间,以及最后一个属性和结束 %> 之间的空格是可选的。
指令分为以下 3 种类型。
指令 说明
<%@ page ... %> 定义与页面相关的属性,例如脚本语言、错误页面和缓冲要求
<%@ include ... %> 引入其它 JSP 文件
<%@ taglib ... %> 声明并导入标签库
1) page 指令
JSP page 指令用来定义当前页面的相关属性。page 指令可以在 JSP 页面的任意位置编写,通常放在 JSP 页面的顶部。
page 指令的语法如下:
<%@ page attribute = "value" %>
page 指令相关的属性:
属性 | 说明 |
buffer | 指定输出流是否有缓冲区,取值:none、缓冲区大小(默认值为 8kb) |
autoFlush | 指定缓冲区是否自动清除,默认值 true |
contentType | 指定 MIME 类型和字符编码 <%@ page contentType="text/html;charset=UTF-8" %> |
errorpage | 指定当前 JSP 页面发生异常时,需要重定向的错误页面,<%@ page errorpage="errpage.jsp" %>,errpage.jsp 的 isErrorpage 值必须为 true |
isErrorpage | 指定当前页面为错误页面,默认值 false |
extends | 指定当前页面继承的父类,一般很少使用 |
import | 导入类、接口、包,类似于 Java 的 import 关键字 |
info | JSP 页面的描述信息,可以使用 getServletInfo() 方法获取 |
isThreadSafe | 是否允许多线程使用,默认值 true |
language | 指定页面中使用的脚本语言,例如:<%@ page language= "java" %> |
session | 指定页面是否使用 session,默认值 true |
isELIgnored | 指定页面是否忽略 JSP 中的 EL,默认值 true |
2) include 指令
include 指令用于在 JSP 页面引入其它内容,可以是 JSP 文件、html 文件和文本文件等,相当于把文件的内容复制到 JSP 页面。引入的文件和 JSP 页面同时编译运行。
使用 include 指令有以下优点:
(1) 增加代码的可重用性
(2) 使 JSP 页面的代码结构清晰易懂
(3) 维护简单
include 的语法如下:
<%@ include file="URL" %>
其中,file 指定需要引入文件的相对路径,可以在页面的任何位置编写 include 指令。
示例
header.jsp 代码如下:
<h3>Header Section</h3>
代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <%@ include file="header.jsp" %> 6 </body> 7 </html>
3) taglib 指令
在 JSP 中,我们可以使用 taglib 指令声明并引入标签库。Java API 允许在页面中自定义标签,标签库就是自定义标签的集合。
taglib 指令的语法如下:
<%@ taglib uri="tagliburl" prefix="tagPre" %>
其中,uri 指定自定义标签库的存放位置;prefix 指定标签库的前缀。为了区分不同的标签库,在页面中使用标签库以对应的 prefix 开头。
示例:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <%@taglib uri="http://www.springframework.org/tags/form" prefix="springForm"%> 3 <!DOCTYPE html> 4 <html> 5 <body> 6 <springForm:form method="POST" action=""> 7 <table> 8 <tr> 9 <td><springForm:label path="username">Username:</springForm:label></td> 10 <td><springForm:input path="username" /></td> 11 </tr> 12 <tr> 13 <td><springForm:label path="password">Password:</springForm:label></td> 14 <td><springForm:input path="password" /></td> 15 </tr> 16 <tr> 17 <td colspan="2"> 18 <input type="submit" value="Submit"/> 19 </td> 20 </tr> 21 </table> 22 </form:form> 23 </body> 24 </html>
2. JSP 动作
JSP 动作使用 XML 语法格式的标签来控制服务器的行为。利用 JSP 动作可以动态地插入文件、重用 JavaBean 组件、把用户重定向到另一个页面、为 Java 插件生成 HTML 代码等。
JSP 动作与 JSP 指令的不同之处如下:
(1) JSP 指令在翻译阶段执行,从而设置整个 JSP 页面的属性。JSP 页面被执行时首先进入翻译阶段,程序会先查找页面中的 JSP 指令,并将它们转换成 Servlet。所以,JSP 指令是在页面转换时期被编译执行的,且编译一次。
(2) JSP 动作在请求处理阶段执行,它们只有执行时才实现自己的功能。通常用户每请求一次,动作标识就会执行一次。
JSP 动作语法如下:
<jsp:action_name attribute="value" />
或
<jsp:action_name attribute="value"></jsp:action_name>
action_name 表示 JSP 动作名称,attribute 表示相应 JSP 动作的属性名称。常用的 JSP 动作如下表所示:
动作 | 说明 |
jsp:include | 页面被请求时引入一个文件 |
jsp:forward | 将请求转发到另一个页面 |
jsp:param | 用来传递参数信息,经常和其它动作一起使用 |
jsp:userBean | 实例化 JavaBean |
jsp:setProperty | 设置 JavaBean 的属性 |
jsp:getProperty | 获取 JavaBean 的属性 |
jsp:plugin | 根据浏览器类型替换成 <object> 或者 <embed>标签 |
jsp:element | 定义动态 XML 元素 |
jsp:attribute | 设置动态 XML 元素的属性 |
jsp:body | 设置动态 XML 元素的内容 |
jsp:text | 允许在JSP页面和文档中使用写入文本的模板 |
1) JSP include 动作
<jsp:include> 动作用来在页面中引入文件,文件可以是 HTML、JSP 页面和文本文件等。通过 include 动作,我们可以多次使用同一个页面,增加了代码可重用性。例如,在页面中使用 include 动作引入头部和底部页面。
<jsp:include> 的语法如下:
<jsp:include page="relativeURL | <%=expression%>" flush="true" />
page 指定引入页面的路径,flush 表示在引入文件前是否刷新缓冲区,默认为 false。
注意:“jsp” 和 “:” 以及 “include” 三者之间没有空格。
示例:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <jsp:include page="header.jsp" /> 6 </body> 7 </html>
2) JSP forward 动作
<jsp:forward> 动作用来将请求转发到另一个页面中,请求的参数数据会被一起转发到目标页面。
<jsp:forward> 的语法如下:
<jsp:forward page="url"/>
其中,page 指定需要转发文件的相对路径,且指定的文件只能是该 Web 应用中的文件。
示例:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <jsp:forward page="next.jsp" /> 6 </body> 7 </html>
3) JSP param 动作
<jsp:param> 动作用来传递参数信息,经常和其它动作一起使用,例如 <jsp:include> 和 <jsp:forward>。
<jsp:param> 的语法如下:
<jsp: param name="param_name" value="param_value" />
name 指定参数名称,value 指定参数值。
示例:
home.jsp 代码如下
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <jsp:forward page="next.jsp"> 6 <jsp:param name="name" value="WebBasic" /> 7 <jsp:param name="url" value="http://www.test.com" /> 8 </jsp:forward> 9 </body> 10 </html>
next.jsp 代码如下
1 <%@ page language="java" contentType="text/html;charset=utf-8"%> 2 <html> 3 <body> 4 <p>name: <%=request.getParameter("name")%></p> 5 <p>url: <%=request.getParameter("url")%></p> 6 </body> 7 </html>
4) JSP useBean 动作
<jsp:useBean> 用于获取 Bean 对象。<jsp:useBean> 首先会在指定范围内查找 Bean 对象,如果 Bean 对象不存在,则创建 Bean 对象。
<jsp:useBean> 的语法如下:
<jsp:useBean id="name" class="package.class" scope="page|request|session|application" />
说明:
(1) id 表示 Bean 实例化对象的变量名,可以在指定范围内使用该变量名;
(2) class 表示需要实例化 Bean 的类路径,指定的类必须包含 public 且无参数的构造方法;
(3) scope 指定 Bean 的作用域,取值为:
a) page 只能在当前页面使用该 Bean 对象;
b) request 只能在一次请求范围内使用该 Bean 对象;
c) session 只能在一次会话范围内使用该 Bean 对象;
d) application 可以在整个应用范围内使用该 Bean 对象。
示例:
创建一个简单的 Test 类,代码如下
1 package com.example; 2 3 public class Test { 4 public String concatStr(String str) { 5 return str.concat("http://www.test.com"); 6 } 7 }
bean.jsp 代码如下
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <jsp:useBean id="test" class="com.example.Test" /> 6 <% 7 String str = "Visit "; 8 out.print(test.concatStr(str)); 9 %> 10 </body> 11 </html>
5) JSP setProperty 和 getProperty 动作
<jsp:getProperty> 动作用于获取 Bean 的属性值,<jsp:setProperty> 动作用于设置 Bean 的属性值。
(1) <jsp:setProperty>
<jsp:setProperty> 的语法如下:
<jsp:setProperty name = "beanName" property = "attributeName" value = "attributeValue"/>
其中,name 指定需要修改属性的 Bean 的名称;property 指定 Bean 的属性,即 Bean 类中的属性;value 是要设定的属性值。
<jsp:setProperty> 通常和 <jsp:useBean> 一起使用,分为两种情况。
a) 在 <jsp:useBean> 标签外使用 <jsp:setProperty> ,例如:
<jsp:useBean id="User" ... />
...
<jsp:setProperty name="User" property="attributeName" value="attributeValue"/>
以上情况,无论 <jsp:useBean> 是否实例化了 User 对象,<jsp:setProperty> 都会执行。
b) 在 <jsp:useBean> 标签里使用 <jsp:setProperty> ,例如:
<jsp:useBean id = "User" ...>
...
<jsp:setProperty name="User" property="attributeName" value="attributeValue"/>
</jsp:useBean>
以上情况,只有 <jsp:useBean> 实例化了 User 对象,<jsp:setProperty> 才会执行。
(2) <jsp:getProperty>
<jsp:getProperty> 的语法如下:
<jsp:getProperty name = "beanName" property = "attributeName">
其中,name 指定需要获取属性的 Bean 的名称;property 指定 Bean 的属性,即 Bean 类中的属性。
注意:<jsp:setProperty> 和 <jsp:getProperty> 动作都会按照 page、request、session 和 application 的顺序依次查找指定 Bean 的实例对象,直到第一个实例被找到。如果任何范围内都不存在这个 Bean 实例,则会拋出异常。
示例
创建 Test 类,代码如下:
1 package com.example; 2 3 public class Test { 4 private String name; 5 private String url; 6 public String getName() { 7 return name; 8 } 9 public void setName(String name) { 10 this.name = name; 11 } 12 public String getUrl() { 13 return url; 14 } 15 public void setUrl(String url) { 16 this.url = url; 17 } 18 }
bean.jsp 代码如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <form action="next.jsp" method="post"> 6 <p>Name: <input type="text" name="name" /></p> 7 <p>Url: <input type="text" name="url" /></p> 8 <p><input type="submit" value="Submit" /></p> 9 </form> 10 </body> 11 </html>
next.jsp 代码如下
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html> 3 <html> 4 <body> 5 <% 6 request.setCharacterEncoding("UTF-8"); 7 %> 8 <jsp:useBean id="test" class="com.example.Test" /> 9 <jsp:setProperty property="*" name="test" /> 10 <jsp:getProperty property="name" name="test" /> 11 <jsp:getProperty property="url" name="test" /> 12 </body> 13 </html>
注意:当 property 的取值为 * 时,要求 Bean 属性的名称与类型要与 request 请求中参数的名称及类型一致,以便用 Bean 中的属性来接收客户输入的数据,系统会根据名称来自动匹配。
6) JSP plugin 动作
<jsp:plugin> 动作用来根据浏览器的类型,插入通过 Java 插件,运行 Java Applet 所必需的 OBJECT 或 EMBED 元素。
如果需要的插件不存在,它会下载插件,然后执行 Java 组件。Java 组件可以是一个 applet 或一个 JavaBean。
plugin 动作有多个对应 HTML 元素的属性用于格式化 Java 组件。param 动作可用于向 Applet 或 Bean 传递参数。
以下是使用 plugin 动作的典型实例:
1 <jsp:plugin type="applet" codebase="dirname" code="MyApplet.class" width="60" height="80"> 2 <jsp:param name="fontcolor" value="red" /> 3 <jsp:param name="background" value="black" /> 4 5 <jsp:fallback> 6 Unable to initialize Java Plugin 7 </jsp:fallback> 8 9 </jsp:plugin>
如果你有兴趣可以尝试使用 applet 来测试 <jsp:plugin> 动作,<fallback> 元素是一个新元素,在组件出现故障的错误是发送给用户错误信息。
7) JSP element、attribute、body 动作
<jsp:element> 、 <jsp:attribute>、 <jsp:body> 动作元素动态定义XML元素。动态是非常重要的,这就意味着 XML 元素在编译时是动态生成的而非静态。
以下实例动态定义了 XML 元素:
1 <%@page language="java" contentType="text/html"%> 2 <html xmlns="http://www.w3c.org/1999/xhtml" 3 xmlns:jsp="http://java.sun.com/JSP/Page"> 4 <body> 5 <jsp:element name="xmlElement"> 6 <jsp:attribute name="xmlElementAttr"> 7 Value for the attribute 8 </jsp:attribute> 9 <jsp:body> 10 Body for XML element 11 </jsp:body> 12 </jsp:element> 13 </body> 14 </html>
执行时生成 HTML 代码如下:
1 <html xmlns="http://www.w3c.org/1999/xhtml" 2 xmlns:jsp="http://java.sun.com/JSP/Page"> 3 <head> 4 <body> 5 <xmlElement xmlElementAttr="Value for the attribute"> 6 Body for XML element 7 </xmlElement> 8 </body> 9 </html>
8) JSP text 动作
<jsp:text> 动作元素允许在 JSP 页面和文档中使用写入文本的模板,语法格式如下:
<jsp:text>Template data</jsp:text>
以上文本模板不能包含其他元素,只能只能包含文本和EL表达式。
请注意,在XML文件中,您不能使用表达式如 ${whatever > 0},因为>符号是非法的。 你可以使用 ${whatever gt 0} 表达式或者嵌入在一个CDATA部分的值。
<jsp:text><![CDATA[<br>]]></jsp:text>
如果你需要在 XHTML 中声明 DOCTYPE,必须使用到 <jsp:text> 动作元素,实例如下:
1 <jsp:text> 2 <![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">]]> 3 </jsp:text> 4 <html> 5 <body> 6 <books> 7 <book> 8 <jsp:text> 9 Welcome to JSP Programming 10 </jsp:text> 11 </book> 12 </books> 13 </body> 14 </html>
你可以对以上实例尝试使用 <jsp:text> 及不使用该动作元素执行结果的区别。
标签:Web,动作,10,Bean,指令,JSP,jsp,页面 来源: https://www.cnblogs.com/tkuang/p/16027824.html