《尚学堂科技_马士兵_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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章