• 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>
    

    在这里插入图片描述

  • 相关阅读:
    cef加载flash的办法
    一个高性能的对象属性复制类,支持不同类型对象间复制,支持Nullable<T>类型属性
    php检测php.ini是否配制正确
    openwrt的路由器重置root密码
    windows 7 + vs2010 sp1编译 x64位版qt4
    解决SourceGrid在某些系统上无法用鼠标滚轮滚动的问题
    判断一个点是否在多边形内部,射线法思路,C#实现
    [转载]使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理
    让Dapper+SqlCE支持ntext数据类型和超过4000字符的存储
    通过WMI
  • 原文地址:https://www.cnblogs.com/yu011/p/14525230.html
Copyright © 2020-2023  润新知