JSP 網站瀏覽數統計實作:Tomcat & JSP 連線 MySQL 教學、隱含物件 Session 解說、程式詳解

2019/06/02 2,733 0 網站技術 , 伺服器 , 資料庫 , 學業筆記 , JSP , SQL

本篇文章要用最簡短的篇幅將「 JSP 網站瀏覽數統計」實作出來並解說,在這之前要先了解如何將 JSP 連線至 MySQL,這部分要安裝 JDBC 驅動程式,就可以讓 JSP 連線到 MySQL 囉!接著就可以撰寫 JSP 程式來做出網站瀏覽數統計,這些數值將使用 MySQL 資料庫儲存,並且使用 Session 來判斷是否 +1,這是避免短時間內的重複計算,不過這要視您的需求來客製化程式。本文就分成幾個章節逐步實作!本文使用 XAMPP 下的 Tomcat 做為示範環境。

Tomcat 伺服器為 JSP 的運作環境,XAMPP 能幫助您快速安裝,教學:XAMPP & Tomcat:建立 JSP 運行環境 & 讓 JSP 連接 SQL 資料庫

🗂 本文章節

1️⃣ 讓 Tomcat 伺服器能連線至 MySQL
2️⃣ JSP 隱含物件 Session 解說
3️⃣ 瀏覽數統計 JSP 程式詳解

▶ 使用 🔗 錨點導覽,請直接點擊標題可移至該章節。

1️⃣ 讓 Tomcat 伺服器能連線至 MySQL ⏏


▲ 先到「MySQL Connector/J」下載檔案,解壓縮後把裡面的將「mysql-connector-java-(版本).jar」放入「C:\xampp\tomcat\lib」,這樣 Tomcat 就可以連接 MySQL 資料庫了!也代表 JSP 程式可以連 MySQL 資料庫了!

2️⃣ JSP 隱含物件 Session 解說 ⏏

以瀏覽數統計來說,如果有新的 Session 才將統計數字 +1,並存回資料庫,一個 Session 什麼時候結束呢?當使用者關閉瀏覽器、伺服器關閉、使用者對伺服器未提出請求超過預設時間(Tomcat 預設為 30 分鐘)或程式關閉 Session,所以要測試統計數字是否正常 +1,就要換個瀏覽器跑跑看,就知道有沒有成功了!

▲ Session 運作示意圖。

3️⃣ 瀏覽數統計 JSP 程式詳解 ⏏

至於 JSP 程式到底如何撰寫才能連接 MySQL 資料庫?這個就直接用程式碼解說了!

▲ 程式碼預覽、執行結果和 MySQL 資料庫存放的統計數值(使用 phpMyAdmin 查看,使用教學:XAMPP:phpMyAdmin 連接內部或外部 MySQL 伺服器完整教學)。

先來看看專案目錄:

🗂 專案目錄
📄 index.jsp (首頁)
📄 counter.jsp (瀏覽數統計)

基本上瀏覽數統計會寫在單獨的 JSP 檔案中,最後再把需要統計與顯示統計數字的網頁(例如:index.jsp)中加上:

<%@include file="counter.jsp"%>

這樣就可以啦!那接下來直接看「counter.jsp」原始碼註解囉!

<%@ page import = "java.sql.*, java.util.*"%>
<!-- 引入資源 -->
<%@page contentType="text/html" pageEncoding="utf-8"%>
<html>
<head>
<title>網站總瀏覽數統計</title>
<meta charset="utf-8">
</head>
<body>
<%
try { // 例外處理
Class.forName("com.mysql.jdbc.Driver"); // 啟動 JDBC 驅動程式
try { // 例外處理
String url="jdbc:mysql://localhost/?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC"; // url 是連接 MySQL 的位址(IP 或網域)
String sql=""; // 建立字串變數 sql
Connection con=DriverManager.getConnection(url,"root","1234"); // 連接 MySQL 資料庫(帳號:root;密碼:1234)
if(con.isClosed()) // con.isClosed() 回傳 ture 代表連線關閉
out.println("警告:連線建立失敗!"); // 連線關閉代表連線沒有被建立
else { // 連線成功建立就可以開始取得與更新資料庫的資料
sql="use cych"; // SQL 語法:使用 cych 資料庫
con.createStatement().execute(sql); // 執行上一行的 SQL
sql="select * from counter"; // SQL 語法:取得 counter 資料表中的所有資料
ResultSet rs=con.createStatement().executeQuery(sql); // ResultSet 用來儲存查詢結果 (*註解1),將上一行 SQL 執行後並儲存結果
while(rs.next()) // 一筆一筆讀取資料,回傳 false 表示讀取結束
{
String c_S= rs.getString(1); // 取得資料表第一個欄位的資料到 c_S 這個字串中
int c=Integer.parseInt(c_S); // 將 c_S 這個字串轉成 int 整數並存至 c 變數
if (session.isNew()) { // 如果使用者是使用新的 Session 連入
c++; // c 變數 +1
out.print(c); // 印出 c 變數
}
else // 如果使用者不是使用新的 Session 連入
{
out.print(c); // 直接印出 c 變數
}
sql="update counter set count=\'" + c + "\'"; // SQL 語法:將 c 的數字更新到 counter 資料表中的 count 欄位
}
con.createStatement().execute(sql); // 執行剛剛的 SQL 語法
con.close(); // 關閉 MySQL 連線
}
}
catch (SQLException sExec) {
out.println("警告:MySQL 錯誤!"+sExec.toString()); // MySQL 錯誤警告
}
}
catch (ClassNotFoundException err) {
out.println("警告:class 錯誤!"+err.toString()); // JDBC 錯誤警告
}
%>
</body>
</html>

📋 註解:

▶ 註解1:ResultSet 用來儲存查詢結果,有幾個重要的函數:
(1) Next():取得下一筆資料,若無資料則回傳 false。
(2) getString(int  i):取得資料表中的第 i 個欄位資料,由 1 開始。
(3) getString(String  name):name 為欄位名稱(不區分大小寫)。

贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇