<jsp:javabean>動作標簽實例
阿新 • • 發佈:2019-01-05
== vat class har Coding 通過 ati 其他 chm
<jsp:javabean>動作標簽實例
之後補齊基礎知識
- scope屬性
該屬性指定了所創建Bean實例的存取範圍,省略該屬性時的值為page.<jsp:useBean>標識被執行時,首先會在scope屬性指定的範圍來查找指定的Bean實例,如果該實例已經存在,則引用這個Bean,否則重新創建,並將其存儲在scope屬性指定的範圍內。
scope屬性可選值如下- page:(當前頁面範圍)
制定了所創建的Bean實例只能夠在當前的JSP文件中使用,包括在通過include指令靜態包含(實際上是一個頁面)的頁面中有效 - request: (請求範圍[^1] )
指定了所創建的Bean實例可以在請求範圍內進行存取。在請求被轉發至的目標頁面中可通過request對象的getAttribute("id屬性值") - 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實例
- page:(當前頁面範圍)
先放上本次實例
本次實例主要解決了 :
如果在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]:客戶端和服務器的一次通信就是一次請求(發送請求或得到相應)
<jsp:javabean>動作標簽實例