JSP 动作指令

1、概述
2、常见的 JSP 动作指令
3、JavaBean
4、常用 JSP 动作指令
---4.1 jsp:include
---4.2 jsp:useBean
---4.3 jsp:setProperty
---4.4 jsp:getProperty
---4.5 代码示例
---4.6 jsp:forward
---4.7 jsp:param

概述

1、动作指令和编译指令不同,编译指令是通知 servlet 引擎的处理消息。而动作指令是运行时的动作。
2、编译指令在将 JSP 编译成 servlet 时起作用,而处理指令通常可替代成 JSP 脚本。
3、语法:

<jsp:action_name attribute="value" />

常见的 JSP 动作指令

  • <jsp:include>
    在页面被请求的时候引入一个文件。
  • <jsp:useBean>
    寻找或者实例化一个 JavaBean。
  • <jsp:setProperty>
    设置 JavaBean 的属性。
  • <jsp:getProperty>
    输出某个 JavaBean 的属性。
  • <jsp:forward>
    把请求转到一个新的页面。
  • <jsp:param>
    该标签可以作为其他标签的子标签,为其他标签传递参数(include 和 forward)。
    ---------------------------以上为常用---------------------------
  • <jsp:plugin>
    根据浏览器类型为Java插件生成OBJECT或EMBED标记。
  • <jsp:element>
    定义动态XML元素
  • <jsp:attribute>
    设置动态定义的XML元素属性。
  • <jsp:body>
    设置动态定义的XML元素内容。
  • <jsp:text>
    在JSP页面和文档中使用写入文本的模板

JavaBean

1、JavaBean是一个可重复使用的软件组件,遵循特定的接口标准,对Java类的方法命名、行为、继承与实现等有特定的要求。
2、JavaBean 是 JavaWeb 应用的模型组件。
3、JSP 和 servlet 可以调用 JavaBean 完成业务逻辑的操作。
4、JSP 只支持非可视化的 JavaBean。
5、非可视化的 JavaBean 又可分为业务 Bean 和数据 Bean。业务 Bean 用来封装业务逻辑和数据库操作等,数据 Bean 用来封装数据。
5、利用 JavaBean 可以实现业务逻辑和前台应用程序的分离,实现代码的重用,从而提高软件的开发效率。
(1)必须是一个公共的类,即访向控制符为 public。
(2)必须包含有一个访问控制符为 public 的无参构造方法。
(3)属性都是私有的,即访向控制符为 private 。
(4)属性通过 get/set 方法来访问。

  • 代码示例
package com.aaa;

public class TestBean {
    private String userName;
    private String passWord;
    private int age;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

常用 JSP 动作指令

jsp:include
  • 这个动作标签可以将另外一个文件内容包含到当前 JSP 页面中,被包含的页面可以是静态的,也可以是动态代码,语法如下。
    < jsp:indude page = "url" flush ="false I true"/>
    或者是
    <jsp:indude page = "uri" fush = "alse I true"> 子动作 </jsp:indude >
  • page:该属性用于指定被包含文件的相对路径。
  • flush:可选参数,用于设置是否刷新缓冲区,如果为 true,则在当前页面输出使用了缓冲区的情况下,将先刷新缓冲区,然后再执行包含操作。如果为 false 则相反;默认为 false,当<jsp: include >动作包含子动作时,使用第二种格式,否则可使用第一种格式。
  • <jsp: include >动作和 include 指令的差别在于,include 动作包含的页面在运行时被加入,而 include 指令在编译的时候就被加入了。
  • 代码示例:
    test.jsp 在页面上输出用 “*” 组成的直角三角形,index.jsp 包含 test.jsp 代码如下。
    index. jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<html>
    <head>
        <title>动作包含</title>
    </head>
    <body>
        <h4>输出三角形</h4>
        <jsp:include page="test.jsp"/>
    </body>
</html>

test.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<html>
    <head>
        <title>输出三角形</title>
    </head>
    <body>
    <%
    for(int i = 1; i <= 9; i++) {
        for (int j = 1; j <= i; j++) {
            out.print("*");
        }
        out.print("<br>");
    }
    %>
    </body>
</html>

在这里插入图片描述

jsp:useBean
  • 语法(当包含子动作时使用第一种格式)
<jsp:useBean id="变量名" class="类路径" scope="储存范围" type="数据类型" >
子动作
</jsp:useBean >
<jsp:useBean id="变量名" class="类路径" scope="储存范围" type="数据类型" />
  • 属性
    1、id:命名引用该 Bean 的变量。如果能够找到 id 和 scope 相同的 Bean 实例,jsp:useBean 动作将使用已有的Bean实例而不是创建新的实例。
    2、class:指定 Bean 的完整包名。
    3、scope:指定 Bean 在哪种上下文内可用,可以取下面的四个值之一:page,request,session 和 application。
    (1)默认值是 page,表示该 Bean 只在当前页面内可用(保存在当前页面的 PageContext 内)。
    (2)request 表示该 Bean 在当前的客户请求内有效(保存在 ServletRequest 对象内)。
    (3)session 表示该 Bean 对当前 HttpSession 内的所有页面都有效。
    (4) application 则表示该 Bean 对所有具有相同 ServletContext 的页面都有效。
    4、type:指定引用该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。请记住变量的名字是由id属性指定的。
    5、beanName:指定 Bean 的名字。如果提供了 type 属性和 beanName 属性,允许省略 class 属性。
jsp:setProperty

<jsp:setProperty> 动作常和 <jsp: useBean> 动作一起使用,为 JavaBean 中属性赋值,可以通过以下四种方式赋值。
1、<jsp:setProperty name="id" property="*"/>
在提交数量较多的 JSP 页面中,一般使用这种方法接收并设置 JavaBean 中的属性值。
当接收到一个 request 对象时,JSP 的内在机制会将 request 对象中的参数名和 JavaBean 中的属性进行匹配,并将名字相同的参数赋值给 JavaBean 的同名属性。
使用这种方法时,要求 JavaBean 中的属性名和 request 对象中的参数名字匹配。如果参数和 JavaBean 中的属性值不匹配,会导致无法赋值。
2、<jsp:setProperty name="id" property="属性名" value= "值" />
value 值可以是一个字符串,也可以是表达式。
这种方式采用特定的值给 JavaBean 中的特定属性赋值,要求 value 值和 JavaBean 中的属性类可以成功转化。
3、<jsp:setProperty name="id" property="属性名" param= "参数名" />
property 指的是 JavaBean 中待赋值的属性名,param 值请求中的参数名。
此参数可以来自于表单也可以是来自于 URL 传递的参数。
JSP 内部机制从 request 对象中获取相应的参数值,并赋值给 JavaBean 中指定的属性值。
注意:如果指定了 param 值,就不可以指定 value 值,即 param 和 value 不可以同时使用。
4、<jsp:setProperty name="id" property="属性名" />
利用表单对 JavaBean 进行赋值时,通常使用这种方式。
既没有指定 value,也没有指定 param,那么执行该动作的时候,会从 request 对象中寻找与属性名相同的参数值,如果有,则将该参数值赋值给 JavaBean 中的属性。
注意:如果利用表单给 JavaBean 赋值,除非使用 param 指定参数,负责表单中的控件必须与 JavaBean 中的属性值相匹配。

jsp:getProperty

1、<jsp:getProperty> 用于获取 JavaBean 中的属性值,并且将属性值转化成字符串发送到输入流中,并且显示到页面上。
2、语法如下:
<jsp:getProperty name="实例名" property="属性名" />
name:指定某一范围的 JavaBean 实例的引用。
property:指定 JavaBean 属性名称。

代码示例

TestBean.java:

package com.aaa;

public class TestBean {
    private String userName;
    private String passWord;
    private int age;
	//get、set省略...
}

regist.html:

    <form action="test.jsp" method="post">

在这里插入图片描述
test.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<html>
    <head>
        <title>myJsp</title>
    </head>
    <body>
        <jsp:useBean id="user" class="com.aaa.TestBean" />
        <jsp:setProperty name="user" property="*" />
        使用getProperty<br>
        用户名:<jsp:getProperty name="user" property="userName" /><br>
        密码:  <jsp:getProperty name="user" property="passWord" /><br>
        年龄:  <jsp:getProperty name="user" property="age" /><br>
        客户端名称:<%=request.getRemoteAddr() %>
    </body>
</html>

输入信息后点击提交查询:
在这里插入图片描述

jsp:forward
  • 这个动作标签是请求转发标签,可以将当前页面的请求转发给其他 web 资源,可以是 JSP 页面、HTML页面、Servlet 等。请求转发指的是停止执行当前的 JSP,而执行被转发的资源,转发后与转发前在同一个请求范围内,地址栏的地址并不会发生变化。
    page 属性包含的是一个相对URL。page 的值既可以直接给出,也可以在请求的时候动态计算。
  • 语法如下:
    格式一:
    <jsp:forward page ="ur"/>
    格式二:
    <jsp:forward page ="url">子动作</isp:forward >
  • Page 属性指明被转发的资源,当前 JSP 页面和被转发的资源必须位于相同的上下文环境中。当<jsp: forward >动作不包含子动作时,使用第一种格式,否则使用第二种格式。
  • 注: forward 指令是一个重定向指令,所以 forward 指令下面的指令是不会被执行到的。
  • 代码示例:
    由 first.jsp 请求转发到 second.jsp,在 first. jsp 中向 request 对象中保存变量,在 second.jsp 中读取变量 name,由于请求转发仍在同一个请求中,所以 request 对象中的变量仍然有效。
    first.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>first</title>
</head>
    <body>
    <h3>这是first.jsp界面</h3>
        <%
            request.setAttribute("name","zhangsan");
        %>
        <%--有动作--%>
        <jsp:forward page="second.jsp"><jsp:param name="qwe" value="zs"/></jsp:forward>
        <%--无动作--%>
        <%--<jsp:forward page="second.jsp"/>--%>
    </body>
</html>

second.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>second</title>
    </head>
    <body>
        <h3>这是second.jsp界面</h3>
        request对象中name的值是:
        <%=request.getAttribute("name") %>
        <br>
        重定向时通过param传过来的值是:
        <%=request.getParameter("qwe") %>
    </body>
</html>

在这里插入图片描述

jsp:param
  • 该标签可以作为其他标签的子标签,<jsp: include >或者<jsp: forward >为其标签传递参数。
    语法如下。
    <jsp: param name ="Name" value ="Value"/>
    Name:用于设定参数名称。
    Value:用于设定对应参数的值。
  • 代码示例:
    在 third.jsp 中,向被转发的资源 fourh.jsp 传递两个参数 name 和 pwd,在 fourth.jsp 中使用 request.getParameter()方法获取参数值。
    third.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>third</title>
    </head>
    <body>
        <h3>third.jsp界面</h3>
        <%
            request.setAttribute("name","zhangsan");
        %>
        <jsp:forward page="fourth.jsp">
            <jsp:param name="name" value="zs"/>
            <jsp:param name="psw" value="123"/>
        </jsp:forward>
    </body>
</html>

fourh.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>fourth</title>
    </head>
    <body>
        <h3>这是fourth.jsp界面</h3>
        request对象中name的值是:
        <%=request.getAttribute("name") %>
        <br>
        param动作传过来的name值是:
        <%=request.getParameter("name") %>
        <br>
        param动作传过来的psw值是:
        <%=request.getParameter("psw") %>
    </body>
</html>

在这里插入图片描述

posted @ 2021-03-12 17:29  YU_UY  阅读(253)  评论(0编辑  收藏  举报