JSP的动作元素

JSP的动作元素是在请求处理阶段起作用的,其语法只有一种形式,且满足XML表示

<jsp:action attribute="valu">

常见的动作元素有以下几种

语法 描述
jsp:include 在页面被请求的时候引入一个文件。
jsp:useBean 寻找或者实例化一个JavaBean。
jsp:setProperty 设置JavaBean的属性。
jsp:getProperty 输出某个JavaBean的属性。
jsp:forward 把请求转到一个新的页面。
jsp:plugin 根据浏览器类型为Java插件生成OBJECT或EMBED标记。
jsp:element 定义动态XML元素
jsp:attribute 设置动态定义的XML元素属性。
jsp:body 设置动态定义的XML元素内容。
jsp:text 在JSP页面和文档中使用写入文本的模板

以下html、jsp文件均放在web根目录下

1. <jsp:include>动作元素

该动作元素可以导入一个文件,用法如下。

  • include属性指定导入文件的路径。
  • flush属性定义在包含资源区是否刷新缓存区。

test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>show img</title>
</head>
<body>
    <img src="img/1.jpg">
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: jiangxiaoju
  Date: 2020/2/20
  Time: 0:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:include page="test.html" flush="true" ></jsp:include>
</body>
</html>

在这里插入图片描述

2. <jsp:useBean> <jsp:setProperty><jsp:getProperty>

  • <jsp:useBean>:常见用法为

    <jsp:useBean id="name" class="package.class" />
    

    载入类后,可以通过<jsp:setProperty><jsp:getProperty>设置或则获取bean的属性。

    常用的属性有三个:

    • class:指定Bean的完整包名。
    • type:指定将引用该对象变量的类型。
    • beanName:通过 java.beans.Beans 的 instantiate() 方法指定Bean的名字。
  • <jsp:setProperty>:常见用法为

    jsp:setProperty用来设置已经实例化的Bean对象的属性,有两种用法。首先,你可以在jsp:useBean元素的外面(后面)使用jsp:setProperty

    <jsp:useBean id="myName" ... />
    ...
    <jsp:setProperty name="myName" property="someProperty" .../>
    
    <jsp:useBean id="myName" ... >
    ...
       <jsp:setProperty name="myName" property="someProperty" .../>
    </jsp:useBean>
    

    此时,jsp:setProperty只有在新建Bean实例时才会执行,如果是使用现有实例则不执行jsp:setProperty。

    常用的属性有四个:

    • name: name属性是必需的。它表示要设置属性的是哪个Bean。
    • property:property属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。
    • value:value 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换。   value和param不能同时使用,但可以使用其中任意一个。
    • param: param 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。
  • <jsp:getProperty>:常见用法为

    jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。语法格式如下:

    <jsp:useBean id="myName" ... />
    ...
    <jsp:getProperty name="myName" property="someProperty" .../>
    

    常用属性有两种:

    • name: 要检索的Bean属性名称。Bean必须已定义。
    • property:表示要提取Bean属性的值。

使用例子

先准备一个javaBean

package test;

public class TestBean {
    private String message = "No message specified";

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
<%--
  Created by IntelliJ IDEA.
  User: jiangxiaoju
  Date: 2020/2/20
  Time: 0:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:include page="test.html"></jsp:include>
<jsp:useBean id="testBean" class="test.TestBean" ></jsp:useBean>
<p>setProperty</p>
<jsp:setProperty name="testBean" property="message" value="hello world"></jsp:setProperty>
<p>getProperty</p>
the Property is:<jsp:getProperty name="testBean" property="message"/>
</body>
</html>

在这里插入图片描述

3. <jsp:forward>动作元素

​ jsp:forward动作把请求转到另外的页面。jsp:forward标记只有一个属性page。语法格式如下所示:

<jsp:forward page="Relative URL" />

常用属性:

  • page: page属性包含的是一个相对URL。page的值既可以直接给出,也可以在请求的时候动态计算,可以是一个JSP页面或者一个 Java Servlet.

forwardServlet.java

package com.jxj4869.filter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/forwardServlet")
public class ForwardServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("jsp:forward test");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

<%--
  Created by IntelliJ IDEA.
  User: jiangxiaoju
  Date: 2020/2/20
  Time: 0:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <jsp:forward page="/forwardServlet"></jsp:forward>
</body>
</html>

在这里插入图片描述

4. <jsp:text>动作元素

​ 允许在JSP页面和文档中使用写入文本的模板,语法格式如下:

<jsp:text>Template data</jsp:text>

以上文本模板不能包含其他元素,只能只能包含文本和EL表达式(注:EL表达式将在后续章节中介绍)。请注意,在XML文件中,您不能使用表达式如 ${whatever > 0},因为>符号是非法的。 你可以使用 ${whatever gt 0}表达式或者嵌入在一个CDATA部分的值。

5. <jsp:element> 、 <jsp:attribute>、 <jsp:body>动作元素

<jsp:element> 、 <jsp:attribute>、 <jsp:body>动作元素动态定义XML元素。动态是非常重要的,这就意味着XML元素在编译时是动态生成的而非静态。

<%--
  Created by IntelliJ IDEA.
  User: jiangxiaoju
  Date: 2020/2/20
  Time: 0:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <jsp:element name="myXmlElement">
        <jsp:attribute name="testAttribute" >
                value
        </jsp:attribute>
        <jsp:body>
            JSP:Body
        </jsp:body>
    </jsp:element>
</body>
</html>

可以看到动态生成了xml元素

在这里插入图片描述

完整代码在Github:Github

发布了74 篇原创文章 · 获赞 83 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_43058685/article/details/104409037