2015年12月20日 星期日

JAVA SL-314_12/06

Date: 12/06

/========================================================/
session物件

session的用處就是完成使用者的login logout
等常見功能,每一個session都表示不同的存取
使用者,其為javax.servlet.http.HttpSesion介面
所產生的實體物件

HttpSession介面中存在以下4種屬性操作方法:
1. 設定屬性 public void patValue(String name, Object value)
2. 取得屬性 public Object getValue(String name)
3. 刪除屬性 public void removeValue(String name)
4. 取得全部性屬性名稱 public String[ ] getValueNames()
/========================================================/
※ 作業系統伺服器+web伺服器(mysql+tomcat)
web伺服器是用來解譯web程式語言

※ JSP是一個很嚴謹的程式語言,因此相對的比較不容易被駭客入侵。
/========================================================/
取得session Id

當一個使用者連到web伺服器,伺服器就會
分配一個不重複的session id ,利用此id來
區別使用者,可利用HttpSession 下的 getId()
來取得id
<body>
<%
String id=session.getId();
%>
<h3>ID是:<%=id%></h3>
<h3>ID長度是:<%=id.length()%></h3>
</body>
/========================================================/
判斷是否為新增使用者
在session 物件中可以利用isNew()來判斷是否為新的使用者
<body>
<%
if(session.isNew()){
%>
<h3>Welcome ! ! New friend ~ </h3>
<%
}else{
%>
<h3>You are Old user ~~</h3>
<%
        }
%>
/=====================================================/
取得使用者的操作時間

透過getCreationTime()取得一個session時間,也可以透過getLastAccessedTime()
取得session最後的操作時間
<body>
<%
long start=session.getCreationTime();
long end=session.getLastAccessedTime();
long time=(end-start)/1000;
%>
<h3>你已經停留了.....<%=time%>秒</h3>

/========================================================/
application物件

javax.servlet.ServletContext介面的物件
常用的方法
public String getRealPath(String path)   虛擬目錄對應的絕對路徑
public Enumeration getAttribateNames()   取得所有屬性名稱
public String getContextPath()  取得虛擬路徑的名稱

/========================================================/
application取得

<%
String path=application.getRealPath(“/”);
%>
<h3>真實路徑: <%=path%>
//也可以利用getServletContext()方法代替
<%
String path1=this.getServletContext().getRealPath(“/”);
%>
<h3>真實路徑:<%=path1%></h3>

/========================================================/
JavaBean

其用意是當JSP需要呼叫使用時,就可以直接使用,不需要再重複撰寫規則

1. 所有的類別都必須放在一個package中
2. 所有的類別都需要宣告public class,這樣才能讓外部進行存取
3. 類別中所有的屬性都必須封裝,所以都是private
4. 在屬性進行存取時,皆須利用getter(),setter()等方法
/========================================================/
語法:
<jsp: useBean指令>

<jsp: useBean id=”實體物件name” scope=”儲存範圍” class=”類別 package名稱”;>
/========================================================/
//session.jsp
<%@ page language="java" import="java.util.*" pageEncoding="BIG5"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  

  </head>
  
  <body>
<%
 String id=session.getId();
%>
 <h3>ID是:<%=id%></h3>
 <h3>ID長度是:<%=id.length()%></h3>
  </body>
</html>

//session_01.jsp
<%@ page language="java" import="java.util.*" pageEncoding="BIG5"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

  </head>
  <body>
<%
 if(session.isNew()){
%>
  <h3>Welcome ! ! New friend ~ </h3>
<%
 }else{
%>
 <h3>You are Old user ~~</h3>
<% 
 }
%>
    
  </body>
</html>

//session_time.jsp
<%@ page language="java" import="java.util.*" pageEncoding="BIG5"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 

  </head>
  
  <body>
<%
 long start=session.getCreationTime();
 long end=session.getLastAccessedTime();
 long time=(end-start)/1000;
%>
 <h3>你已經停留了.....<%=time%>秒</h3>
   
  </body>
</html>

//session_application_get.jsp
<%@ page language="java" import="java.util.*" pageEncoding="BIG5"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

  </head>
  
  <body>
<%
 String path=application.getRealPath("/");
%>
<h3>真實路徑: <%=path%>
<!--也可以利用getServletContext()方法代替-->
<%
 String path1=this.getServletContext().getRealPath("/");
%>
<h3>真實路徑:<%=path1%></h3>    
  </body>
</html>
/========================================================/
執行先前裝好的MySQL

如果沒有mldn資料庫,請執行以下指令:
mysql> create Database mldn;
再來執行:
mysql> use mldn;
mysql> CREATE TABLE emp{
    -> empno  int<4>  PRIMARY  KEY,
    -> ename  VARCHAR<10>,
    -> job    VARCHAR<10>,
    -> hire   DATE,
    -> sal    FLOAT<7>};
結果如下圖
也可以開請瀏覽器執行 localhost/phpMyAdmin/index.php 從中建立表單
接著將以下指令貼到SQL裡面並執行
INSERT INTO emp (empno,ename,job,hire,sal) VALUES (6060,'李興華','經理','2001-09-16',2000.30) ;
INSERT INTO emp (empno,ename,job,hire,sal) VALUES (7369,'董鳴楠','銷售','2003-10-09',1500.90) ;
INSERT INTO emp (empno,ename,job,hire,sal) VALUES (8964,'李祺','分析員','2003-10-01',3000) ;
INSERT INTO emp (empno,ename,job,hire,sal) VALUES (7698,'張惠','銷售','2005-03-12',800) ;
INSERT INTO emp (empno,ename,job,hire,sal) VALUES (7782,'楊軍','分析員','2005-01-12',2500) ;
INSERT INTO emp (empno,ename,job,hire,sal) VALUES (7762,'劉明','銷售','2005-03-09',1000) ;
INSERT INTO emp (empno,ename,job,hire,sal) VALUES (7839,'王月','經理','2006-09-01',2500) ;
如下圖所示
驗證是否有將資料匯入資料庫 --> 瀏覽
command line 驗證如下圖,會有亂碼是因為資料庫字型的關係

Driver JARs: https://drive.google.com/file/d/0B8Dfp4n5Q35COTNVOUpiZHZvbnM/view?usp=sharing

//MyJsp01.jsp
<%@ page language="java" import="java.util.*" import="java.sql.*" pageEncoding="BIG5"%>



  

  
  
  
<%! 
 public static final String DBDRIVER="com.mysql.jdbc.Driver"; 
 public static final String DBURL="jdbc:mysql://localhost:3306/mldn"; 
 public static final String DBUSER="root"; 
 public static final String DBPASS="abc123"; 
%>
<%
 Connection conn=null;
 PreparedStatement ps=null;
 ResultSet rs=null;
%>
<%
 try{
  Class.forName(DBDRIVER);
  conn=DriverManager.getConnection(DBURL, DBUSER, DBPASS);
  String sql="SELECT empno,ename,job,hire,sal FROM emp";//表格名稱
  ps=conn.prepareStatement(sql);
  rs=ps.executeQuery(); 
%> 
r <% while(rs.next()){ int empno=rs.getInt(1); String ename=rs.getString(2); String job=rs.getString(3); java.util.Date date=rs.getDate(4); Float sal=rs.getFloat(5); %> <% } %>
員工編號 員工姓名 職務 雇用日期 薪資
<%=empno%> <%=ename%> <%=job%> <%=date%> <%=sal%>
<% }catch(Exception e){ e.printStackTrace(); }finally{ rs.close(); ps.close(); conn.close(); } %>
在瀏覽器執行後結果如下圖,他會去抓取資料庫的表單資料並匯出: