其他分享
首页 > 其他分享> > Web基础知识(10)- JSP (二)

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