範例一
JSP檔案(javabeandemo.jsp)
<jsp:useBean id="gcd" class="beantools.math.FindGCD" />
<jsp:setProperty name="gcd" property="*" />
<%= request.getParameter("m") %> 與 <%= request.getParameter("n") %>
最大公因數:<jsp:getProperty name="gcd" property="GCD" />

在property設定"*",表示將自動尋找request中符合JavaBean中setter名稱的參數值,
即如果request的參數名稱若符合setXXX()中XXX名稱,
則將request中對應的值設定給setXXX()。

JAVA檔案(FindGCD.java)
package beantools.math;
public class FindGCD 
{    
   private int m, n;    
   public void setM(int m) 
   {        
      this.m = m;    
   }    
   public void setN(int n) 
   {        
      this.n = n;    
   }    
   public int getGCD() 
   {        
      int r = 0;        
      while(n != 0) 
      {            
         r = m % n;            
         m = n;            
         n = r;        
      }        
      return m;    
   }
}


執行網址:http://localhost:8080/myjsp/javabeandemo.jsp?m=100&n=14
執行結果:100 與 14 最大公因數:2

範例二
// 檔名:UserInfoBean.java
// 編譯:javac -d ..\classes UserInfoBean.java
package com.huanlin;

public class UserInfoBean {
  private String userName;

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

  public String getUserName() {
    return this.userName;
  }
}

// 檔案:HelloServlet2.java
// 編譯:參考 Make.bat
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.huanlin.UserInfoBean;

public class HelloServlet2 extends HttpServlet {
    public void service(HttpServletRequest request,
            HttpServletResponse response)
            throws ServletException, IOException {

        // 下面兩行讓中文字能正確顯示
        response.setContentType("text/html; charset=big5");
        request.setCharacterEncoding("big5");

        // 建立 userInfo 物件,並指定一個 session 的 attribute 與之繫結
        UserInfoBean userInfo = new UserInfoBean();
        userInfo.setUserName("令狐沖");
        HttpSession session = request.getSession();
        session.setAttribute("userInfo", userInfo);

        // 前往指定的網頁
        RequestDispatcher rd;
        rd = getServletContext().getRequestDispatcher("/HelloFromServlet2.jsp");
        rd.forward(request, response);
    }
}

HelloFromServlet2.jsp
<%@ page contentType="text/html;charset=big5" %>
<jsp:useBean id="userInfo" scope="session"/>

<html>
<body>
<p>從 servlet 傳入的 UserInfoBean.userName 是:
<b>
  <jsp:getProperty name="userInfo" property="userName"/>
</b>
</body>
</html>

有個地方要特別注意,如果在 servlet 儲存參數時是呼叫 session.setAttribute() 方法,也就是將參數存入 session 中,
那麼在 JSP 裡面的 <jsp:useBean> 標籤的 scope 就必須指明為 "session",否則會發生取不到參數的情形。
由於使用者登入之後,其帳號等相關資訊必須一直存在,直到這名使用者登出或將瀏覽器關閉之後才清除,
因此我們把 UserInfoBean 物件存放在 session 中。一般來說,為了節省記憶體資源,非必要時不要將變數存在 session 中,如果 bean 傳送到 JSP 中用完即丟,可以將它存放在 request 裡面。

執行範例:http://127.0.0.1:8080/myapp/HelloServlet2









Will(小威) 發表在 痞客邦 PIXNET 留言(0) 人氣()