/========================================================/
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 <% }catch(Exception e){ e.printStackTrace(); }finally{ rs.close(); ps.close(); conn.close(); } %>
<% 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%>