ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Web基础知识(10)- JSP (二)

2022-03-19 20:33:12  阅读:192  来源: 互联网

标签:Web 动作 10 Bean 指令 JSP 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有