《尚学堂科技马士兵_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