《尚學堂科技_馬士兵_JAVA_系列視頻教程_BBS_2007》學習

《尚學堂科技馬士兵_JAVA系列視頻教程_BBS_2007》學習

前言

視頻雖然是 2007 年馬士兵老師錄製的,不過,由於喜歡這個老師,再加上,覺得有些東西是基礎,當做練手,所以拿來看看,經過時間沉澱下來的東西,畢竟還是比較珍貴的。主要的內容也並不過時,用 JSP 來實現一個小項目 —— 論壇。

在這之中學習到了一些東西,雖然基礎,不過仍然做下筆記,方便日後查看亦或者留念。

筆記

以下看視頻時所做的一些筆記:

  • MySQL 設置手動提交
boolean autoCommit = conn.getAutoCommit(); // 保存默認值
conn.setAutoCommit(false); // 關閉自動提交
...
conn.commit(); // 手動提交
conn.setAutoCommit(autoCommit); // 設置爲默認值
  • 數據庫中文亂碼問題
可能是以下原因:
1. 數據庫並未設置爲支持中文的編碼,例如可以設置爲 UTF-8
2. 在網頁中設置接收到的數據編碼爲 UTF-8,代碼如:request.setCharacterEncoding("UTF-8");
3. 連接數據庫時,並沒有指定編碼,解決方案如: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
  • 分頁

思路:
獲取數據的條目數,然後得出總頁碼(例如 (總數量+每頁顯示的數量-1 / 每頁顯示的數量)。傳入頁碼 id,獲取後便跳轉到對應的網頁。例如:

// 設置每頁顯示的數目
final int PAGE_SIZE = 2;
int pageNo = 1;
String strPageNo = request.getParameter("pageNo");

// 獲取的頁碼不爲空的時候獲取值,爲空則設置爲 1
if(strPageNo != null && !strPageNo.trim().equals("")) {
    try {
        pageNo = Integer.parseInt(strPageNo);
    // System.out.println(pageNo);
    } catch (NumberFormatException e) {
        pageNo = 1;
    }
}

int totalPages = 0;

List<Article> articles = new ArrayList<Article>();
Connection conn = DB.getConn();
Statement stmtCount = DB.createStmt(conn);
ResultSet rsCount = DB.executeQuery(stmtCount, "select count(*) from article where pid = 0");
rsCount.next();
int totalRecords = rsCount.getInt(1); // 獲取總數目

// 計算總頁數
totalPages = (totalRecords + PAGE_SIZE - 1) / PAGE_SIZE;

// 當獲取的頁碼大於總頁碼,則設置爲最後一頁
if(pageNo > totalPages) {
    pageNo = totalPages;
}

// 如果獲取的頁碼小於或者等於1,設置爲1,打開第一頁
if(pageNo <= 0 ) {
    pageNo = 1;
}

// 通過 limit,從數據庫中獲取某一頁要顯示的全部內容
Statement stmt = DB.createStmt(conn);
int startPos = (pageNo - 1) * PAGE_SIZE;
String sql = "select * from article where pid = 0 order by pdate desc limit " + startPos + "," + PAGE_SIZE;
ResultSet rs = stmt.executeQuery(sql);
...
  • 頁面驗證
// 通過 setAttribute() 方法將數據保存到 session 裏面,通過 getAttribute() 方法,從 session 中獲取數據,以此來對頁面進行驗證
session.setAttribute(arg0, arg1);
session.getAttribute(name);
  • 在線編輯器
在視頻中所使用的在線編輯器是 FCKeditor,通過這個工具,讓論壇的回覆功能更加人性化,可以對輸入的文字進行編輯。當然,如今這款經典的編輯器改名爲 CKeditor。使用起來相當的簡單,以例子來學習。

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>回覆</title>
    <!-- 導入相關的 JS 文件 -->
    <script type="text/JavaScript" src="ckeditor/ckeditor.js"></script>
    </head>
<body>

<form action="#" method="post">
    標題:<input type="text" name="title"><br />
    內容:<textarea id="cont" name="cont" cols="20" rows="2" class="ckeditor"></textarea>
    <input type="submit" value="submit"></button>
</form>

</body>
</html>
  • 其它
// 部分操作需要登錄系統才能進行,沒登錄則自動跳轉到登錄界面,例如以下代碼:
String adminLogined = (String)session.getAttribute("adminLogined");
if(adminLogined == null || !adminLogined.trim().equals("true")) {
    response.sendRedirect("login.jsp");
    return;
}
// 跳轉後加一句 return 的原因如下:response.sendRedirect() 是通過瀏覽器來做轉向的,所以只有在頁面處理完成後,纔會有實際的動作。而跳轉語句後面的操作可能出錯之類的,同時要進行頁面的跳轉,頁面後面的內容並沒有什麼意義。


搜索功能。在這個 BBS 中,加入了搜索的功能,實現的方式則是通過模糊查詢,獲取某個要查詢的字段,然後通過 SQL 語句:"select * from article where title like '%" + keyword + "%' or cont like '%" + keyword + "%'"
即可查到相關的內容,需要注意的是中文的問題
可以在獲取關鍵字時,先加上以下代碼(以下以 UTF-8 爲例):
request.setCharacterEncoding("UTF-8");


客戶端的驗證是爲了用戶體驗,
服務端的驗證纔是最重要的。

心得

從最開始的,將一個網頁下載下來,用 Dreamweaver 進行修改,將他人的網頁留下自己所需要的。簡單來說,也就是系統的原型設計。一旦對設計好了後,再將那些靜態界面轉化成爲動態界面,便逐步將 BBS 的一些功能做了出來。

在一次練習之中,不斷的積累新的知識。這一次主要是通過 JSP 來寫這個 BBS,大量數據庫的操作都寫在 JSP 界面之中,這樣子不利於後期的維護與更新。再之後, 就要開始學習一些框架的東西了。原本按照馬士兵老師的講課應該是聽商城那個項目的,不過要先抓主要的。在當前的工作之中,需要用到 SpringMVC,和 MyBatis,故先學習這兩個,回頭再補相關的知識。

後記

本文基於個人的學習
分享出來純當給大家參考一下,也當作自己的筆記

編輯:HochenChong
時間:2017-07-05
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章