<jsp:javabean>动作标签实例

<jsp:javabean>动作标签实例

之后补齐基础知识

  1. scope属性

    该属性指定了所创建Bean实例的存取范围,省略该属性时的值为page.<jsp:useBean>标识被执行时,首先会在scope属性指定的范围来查找指定的Bean实例,如果该实例已经存在,则引用这个Bean,否则重新创建,并将其存储在scope属性指定的范围内。

    scope属性可选值如下

    • page:(当前页面范围)

      制定了所创建的Bean实例只能够在当前的JSP文件中使用,包括在通过include指令静态包含(实际上是一个页面)的页面中有效

    • request: (请求范围[^1] )

      指定了所创建的Bean实例可以在请求范围内进行存取。在请求被转发至的目标页面中可通过request对象的getAttribute("id属性值") 方法获取创建的Bean实例。一个请求的生命周期是 从客户端向服务器发出一个请求到服务器响应这个请求给用户后 结束,所以请求结束后,存储在其中的Bean的实例也就是失效了。

    • session:(一个用户,多个页面)

      指定了所创建的Bean实例的有效范围为session.

      session是当用户访问Web应用时,服务器为用户创建的一个对象,服务器通过session的ID值 来区分其他的用户。针对某一个用户而言, 在该范围中的对象可被多个页面共享。(购物车应用)

      可以使用session对象的getAttribute("id属性值")方法获取存储在session中的Bean实例,也可以使用session对象的getValue("id属性值")来获取,但该方法不建议使用。

    • application:(多个用户,多个页面)

      该值指定了所创建的Bean实例的有效范围从服务器启动开始到服务器关闭结束。 application对象是在服务器启动时创建的,它被多个用户共享。所以访问该application对象的所有用户共享存储于该对象中的Bean实例。 (浏览人数)

      可以使用application对象的getAttribute(“id属性值”)方法获取在application中的Bean实例

先放上本次实例

本次实例主要解决了 :

如果在session范围和request范围都存在名为car的ShopCar实例,而存储在session范围内的ShopCar实例是通过<jsp:useBean>标识创建的。那么代码中的<jsp:setProperty>标识会为哪个范围中的ShopCar实例赋值呢?

实例工程架构如下

存在一个javaBean,关键代码如下:

package com.bean;

public class ShopCar {

    private String name;
    private String maker;
    public ShopCar() {
        name = "noname";
        maker="noplace";
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMaker() {
        return maker;
    }
    public void setMaker(String maker) {
        this.maker = maker;
    }

}

JavaBean:简单说,它就是一个Java类,这个类可以重复地使用。

它必须遵循以下规定:

  • 是一个公有类。
  • 具有一个公有的不带参数构造方法。
  • 每个属性必须定义一组getXXX()和setXXX()方法, 以便读取和存储其属性值。
  • 符合上述规定的JavaBean,将拥有:事件处理、自省机制、永续储存等特性。

    参照博主

新建javabean1.jsp 文件:

 <!-- 导入ShopCar类 -->
<%@page import="com.bean.ShopCar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <h2>第一种方法实例化javaBean</h2>
    <%
        ShopCar car = new ShopCar(); //创建一个javaBean ShopCar的实例
        session.setAttribute("car",car); //将创建的JavaBean实例存在session范围内

    %>

    <h2>第二种方法实例化javaBean</h2>
    <%-- 这里的id就是javaBean实例的名字 相当于ShopCar car = new ShopCar()
    两种方法作用一致 --%>
    <%--<jsp:useBean id="car" class="com.bean.ShopCar" scope="session"/> --%>
    <jsp:setProperty name="car" property="*"/>

    <%
        ShopCar r_car = new ShopCar();
        request.setAttribute("car", r_car);  //作用域范围是request
    %>
    <jsp:setProperty name="car" property="name" value="Panax"/>
    <jsp:setProperty name="car" property="maker" value="JiLin"/>

    Request范围内:<br>
    车名: <%=r_car.getName() %>
    地址:<%=r_car.getMaker() %>
    <br>
    Session范围内:<br>
    车名: <%=car.getName() %>
    地址: <%=car.getMaker() %>

</body>
</html>

  • id指的是实例化的对象,class就是Java类。这一行相当于

    ShopCar car = new ShopCar();

  • name是对象,property是属性,value是属性的值。

==实验结果==:

从结果得知:

<jsp:setProperty>标识被执行时,会按照page、request、session和application的顺序来查找由name属性指定的Bean实例,并且返回第一个被找到的实例;若任何范围内不存在这个Bean实例,就会抛出异常

[^1]:客户端和服务器的一次通信就是一次请求(发送请求或得到相应)

原文地址:https://www.cnblogs.com/janeqin/p/10225575.html

时间: 2024-10-16 23:15:08

<jsp:javabean>动作标签实例的相关文章

jsp forward 动作标签

forward 动作标签: <jsp:forward page="要转向的页面"> </jsp:forward> 或 <jsp:forward page="要转向的页面"/> 该指令的作用是:从该指令处停止当前页面的继续执行,而转向其他的一个JSP页面. 在下面例子的JSP页面中,首先随机获取一个数,如果该数大于0.5就转向页面example2.jsp,否则转向fileoutput.jsp <%@ page contentT

jsp param动作标签

param 标签以"名字-值"对的形式为其它标签提供附加消息.这个标签与jsp:include.jsp:forward.jsp:plugin标签一起使用. param 动作标签 <jsp:param name="名字"value ="指定给param的值"/> 当该标签与jsp:include标签一起使用时.能够将param标签的值传递到include指令要载入的文件里去,因此include动作标签假设结合param标签.能够在载入文

用&lt;jsp:include&gt;或&lt;jsp:forward&gt;动作标签与&lt;jsp:param&gt;搭配使用时出现的乱码问题

解决方案:在原请求也加入request.setCharacterEncoding("gb2312"); 例子1: <% request.setCharacterEncoding("gb2312"); %> <jsp:include page="content.jsp"> <jsp:param name="param" value="哈哈哈"></jsp:param&

jsp 三大指令和动作标签

jsp三大指令 一个jsp页面中可以有0-N个指令 1.page--->最复杂:<%@page language="" ...%> *pageEncoding和contentType pageEncoding:指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.java时需要使用pageEncoding contentType:它表示添加一个响应头:Content-Type ,相当于response.setContentType() *imp

JSP三大指令,九大内置对象,JSP动作标签,EL表达式与函数库

JSP三大指令 ---------------------------------------------- 一个jsp页面中,可以有0~N个指令的定义! 1. page --> 最复杂:格式:<%@page language="java" info="xxx"...%> * pageEncoding和contentType: > pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.jav

jsp三大指令,九大内置对象,JSP动作标签,EL表达式及函数库

JSP三大指令 一个jsp页面中,可以有0~N个指令的定义! page –> 最复杂:格式:<%@page language="java" info="xxx"-%> pageEncoding和contentType: pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.java时需要使用pageEncoding! contentType:它表示添加一个响应头:Content-Type!等同于r

Java进阶学习第十二天——JSP JavaBean EL

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.05.04 lutianfei none session(拓展) session的追踪(了解) session的创建和销毁 创建session : 第一次访问资源,调用request.getSession() session销毁的三种方法: 非正常关闭服务器 session的过期,默认是30分钟.(tomcat/conf/web.xml) <session-config> <session-timeout>

jsp JavaBean el表达式

JSP三大指令 一个jsp页面中,可以有0~N个指令的定义! 1. page --> 最复杂:<%@page language="java" info="xxx"...%> * pageEncoding和contentType: > pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.java时需要使用pageEncoding! > contentType:它表示添加一个响应头:Co

JavaBean用JSP调用和使用JSP动作标签的区别

javabean的类可以用jsp动作标签实例化并使用. 1 <!-- 下面这句是对Javabean类person的引用,引用的实例是p2 --> 2 <jsp:useBean id="p2" class="com.kaly.bean.person"></jsp:useBean> 3 <!-- 下面这一行是对p1各个成员赋值,这里使用"*"表示将请求表单的值全部赋给person引用p2,前提是form中的所