JavaBean-request的問題?
請問題目中, 會調用訪問人次:顯示為2, 但不知為捨麼 我沒顯示出2呢?
sample3.java
package sh1;
import java.io.*;
public class sample3{
public sample3(){
}
private int num = 0;
public void setNum(int num) {
this.num = num;
}
public int getNum(){
num++;
return num;
}
}
Index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<jsp:useBean id="splBean" class="sh1.sample3" scope="request"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>request的範圍JavaBean</title>
</head>
<body>
<% splBean.getNum();%>
-<center><p><font size="5">訪問人次:<strong><jsp:include page="sample4.jsp" flush="true"/></strong></font></p></center>
<p>請你分別做如下操作,看訪問人次的變化情況:</p>
<p>1、按F5鍵或者單擊【查看】/【刷新】命令來刷新頁面。</p>
<p>2、單擊【文件】/【新建】/【窗口】命令打開一個相魂的新窗口。</p>
<p>3、再打開一個瀏覽器並訪問此JSP網頁。</p>
<p>4、在網絡中的另一台計算機上訪問此JSP網頁。</p>
</body>
</html>
Sample4.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<jsp:getProperty name="splBean" property="num"/>
2 個解答
- SamuelLv 51 0 年前最佳解答
1. 我只針對您的問題回答, 至於您程式目的是什就不討論了. 我假設您至少有一定程度了解 java.
2. 您無法得出結果的原因在於要了解 jsp:include 的運作方式. 用 jsp:include 包含進來的 jsp 程式是一個獨立執行單元(translation units), 所以在呼叫端程式所寫的宣告(and/or 初始)並無法在另一個 jsp(其實是 java啦)程式"看到".
3. 用 jsp:useBean 使用 javabeans 時, Servlet container(伺服器)會產生一段程式為您做2件事, 首先 在您 jsp:useBean的 scope(預設值是 page) 中找尋是否有叫做這個名字(id)的 Attribute(一個物件) 存在, 如果有就將此物件轉型(cast)為jsp:useBean的class物件並指定給id所包含名字的變數. 其次如果不存在就 new 一個物件給變數, 並將此物件加入 scope 的 Attribute.
4. 所以依據您的 index.jsp, 一個sample3物件是以splBean的名字存入 request scope 的 Attribute. 在 sample4.jsp 執行 jsp:getProperty 時, 伺服器根據scope預設值是 page 去尋找叫做splBean的物件, 並叫用此物件的 getNum(), 此時當然找不到, 因為 index.jsp 是將其存入 request scope.
5. 解法, 在 sample4.jsp 加一行 jsp:useBean 跟 index.jsp 一樣, 如此伺服器就找的到此物件. 您擔心是否會多初始了一個不一樣的物件, 如果您看懂第3項, 您就知道不會, 除非 scope 不同. 所以全部只需加一行, 程式就OK了, 每次都顯示 "訪問人次 : 2". 順帶提醒您(以免您不知)您的 charset 都設成 utf-8 所以如果您程式的中文是存成 big5(大部分視窗的選擇), 那網頁的中文會是一堆亂碼. sample4.jsp 程式如下:
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<jsp:useBean id="splBean" class="sh1.sample3" scope="request"/>
<jsp:getProperty name="splBean" property="num" />
2008-10-02 10:54:34 補充:
sample4.jsp 另一個寫法, 不是好的方法, 失去了用 tag 的最終目的:不須寫Java!!!
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%= ((sh1.sample3)request.getAttribute("splBean")).getNum() %>
- 吉他Lv 51 0 年前
一開始是1吧,之後你依序測試他說的才會變2,如下
請你分別做如下操作,看訪問人次的變化情況:
1、按F5鍵或者單擊【查看】/【刷新】命令來刷新頁面。
2、單擊【文件】/【新建】/【窗口】命令打開一個相魂的新窗口。
3、再打開一個瀏覽器並訪問此JSP網頁。
4、在網絡中的另一台計算機上訪問此JSP網頁。
你看到的是他書裡的圖片是2吧