时间过的快么?人的感觉而已,时间还是那样地流过,但人们却有不同的感受,收获的越多,感觉时间过的越慢,认知的越少,时间也就过的越快。有三个月没写点什么东西了,为了让时间记住这三个月都发生了什么,趁现在还没有忘记还是记录下来罢,今天心情不好所以废话也就多点。
按时间顺序一个一个来吧。
一:关于《
J2EE
设计模式》
新手入门,不敢班门弄大刀,在开始之前得首先感谢几个月前到学校摆地摊的书商,当时还啥都不懂,在书摊上乱翻结果看到
O’reilly
的《
J2EE
设计模式》和《
SQL
技术手册》一看价钱一共
80
多两银子,仗这
O’reilly
的旗号二话不说就跟老板砍价结果
50
成交,当时买回去看也看不懂就让它放在那里,当是还在学习
JAVA
基础,学校数据库的课才刚上没几天,还勉强晓得
SQL
是个什么东西,就这样昏头昏脑的放到今天结果还发挥了大作用呢
~~
呵呵。真是慧眼识真金啊。
费话又多了(今天心情不太好
~~
见谅)。还是说说这本书,这样说吧,是本菜鸟看的懂老鸟看得进的书(俗),该书的作者的确大家风范,把“高深”
(
对菜鸟而言
)
的理论讲的浅显易懂,并配合经典的事例代码,真正让你理论联系实际,并且觉没有掉书袋的坏习惯,国类很多作者写的书或者文章,喜欢到处使用各种各样的所谓的术语或简写(在
J2EE
纷繁复杂的技术中,这样的简写简直就是噩梦)以显示其学术造诣的高深莫测。叹
~~~~
。
看完这本书的前三章,其实只用了不到
10
小时的时间,但其中的一个简单的设计模式却已经指导了我完成了一个信息发布系统很多模块的设计和实现。可见其含金量是非常之高的,做为一个
WEB
应用“开发”
(
注:之所以打引号,是由于某些高手认为像我这样的学生如果说开发的话简直是对这两个字的玷污和对他们这些真正的开发人员的不尊重
)
新手确实感到一股信心和鼓励。
现在就谈谈着个简单但是非常可爱的设计模式吧:
MVC
至于
MVC
是谁最先提出来,我并不知道,
MVC
是什么最开始我也不知道,但是我很久以前就使用过它了,记得以前做数据结构的练习,写了一个棋类小游戏的程序,我将这个游戏的棋子,棋盘,游戏规则,下棋的人的用户接口,简单的分成了三个部分来实现,现在看来这不就是
MVC
么?!,棋子和棋盘是
model ,
游戏规则是
controller ,
用户接口是
view
所以在我看来
MVC
模式是但凡写过程序的人都在潜意识里存在的东西,是谁最先将它说出来也不是那么重要,也不必要认为是什么高深莫测的东西。不过现在的
MVC
在每一个层次上更为细分更有很多优秀的设计模式,这是我们应该学习的。
使用jsp , servlet ,javaBean 实现MVC.这确实是一个非常好的方案,做为MVC的练习,应该多写写这样的例子好好理解它的实现过程,体会它的优点,还有不足,以及有待改进的地方。在不断的改进中学习各种各样的设计模式,我觉得这是一个很好的方法。
实现过程:jsp页面作为视图,其中的不包含任何业务逻辑处理和数据库访问操作,仅包含页面逻辑。Servlet作为控制器,负责业务逻辑和页面转发,javaBean负责数据封装以提供给JSP页面访问。还有一类bean负责管理对数据库的访问操作和其他一些业务方法的实现。我以一个简单的用户登陆功能代码以解释实现的过程:
JSP视图:负责收集用户提交的数据。并将数据发送给指定的servlet,比如:
登陆页面
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>登录</title>
</head>
<body>
<form action="./LoginController" method="post">
<table align="center" border="1">
<tr> <td>帐号</td> <td><input type="text" size="10" name=id> </td> <td><a href="./user/regist/regist.jsp"><input type="button" value="注册"></a></td></tr>
<tr> <td>密码</td> <td><input type="password" size="10" name=pswd> </td><td><input type="reset" value="重填"></td></tr>
<tr> <td>我是管理员</td><td><input type="checkbox" name="admin" value="1"></td><td><input type="submit" value="登录"></td></tr>
</table>
</form>
</body>
</html>
javaBean
模型:用户模型。
用户模型
public class UserModel {
private String id;
private String password;
private String admin;
public UserModel() {}
public void setId(String id){
this.id=id;
}
public void setPassword(String password){
this.password=password;
}
public String getId(){
return this.id;
}
public String getPassword(){
return this.password;
}
public void setAdmin(String admin){
this.admin=admin;
}
public String getAdmin(){
return this.admin;
}
}
Servlet
控制器;
LoginController
负责业务逻辑,页面转发。
控制器
public class LoginController extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {
private static final long serialVersionUID = 1L;
private static final String indexPage="/login.jsp";//登录的页面
private static final String userPage="/user/user_main.jsp";//用户首页
private static final String adminPage="/admin/admin_main.jsp";//管理员首页
// 登录验证
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
String id = request.getParameter("id");
String pswd = request.getParameter("pswd");
//判断是否选择了登录管理员
String isadmin ="0";
if(request.getParameter("admin")!=null){
isadmin = request.getParameter("admin");
}
//获得一个新用户对象
UserModel user = new UserModel();
user.setId(id);
user.setPassword(pswd);
user.setAdmin(isadmin);
// 获得一个数据库连接并检测是否存在这样一个对象
DataBaseModel db = new DataBaseModel();
String nextPage;
// 判断用户名是否正确,并确定页面跳转;
//判断是否是管理员登录
if (user.getAdmin().equals("1")){
if(db.checkUser(user) == true){
nextPage = adminPage;
request.setAttribute("user_atrr", user);
}else{nextPage=indexPage;}
}
//普通用户登录
else{
if(db.checkUser(user) == true) {
nextPage = userPage;
request.setAttribute("user_atrr", user);
}else {
nextPage = indexPage;
}
}
// 转发请求
RequestDispatcher dispacher = getServletContext().getRequestDispatcher(
nextPage);
dispacher.forward(request, response);
}
连接数据库的
bean :
功能bean
public
class
DataBaseModel
{
private
Connection con
=
null
;
//
注册驱动
public
DataBaseModel()
{
try
{
Class.forName(
"
com.mysql.jdbc.Driver
"
);
}
catch
(ClassNotFoundException ex)
{
System.out.println(
"
注册数据库失败
"
);
ex.printStackTrace();
}
}
//
返回一个连接
public
Connection getConnection()
{
try
{
con
=
DriverManager.getConnection(
"
jdbc:mysql://localhost:3306/universe
"
,
"
corsair
"
,
"
110
"
);
}
catch
(SQLException ex)
{
System.out.println(
"
连接失败
"
);
ex.printStackTrace();
}
return
con;
}
//
断开一个连接
public
void
releaseConnection()
{
if
(con
!=
null
)
{
try
{
con.close();
}
catch
(SQLException ex)
{
System.out.println(
"
断开数据库连接失败
"
);
ex.printStackTrace();
}
}
}
//
返回Statement对象
public
Statement getStatement()
{
Statement statement
=
null
;
if
(con
==
null
)
{
con
=
getConnection();
}
try
{
statement
=
con.createStatement();
}
catch
(SQLException ex)
{
System.out.println(
"
返回Statement对象失败
"
);
ex.printStackTrace();
}
return
statement;
}
public
Statement getScrollStatement()
{
Statement statement
=
null
;
if
(con
==
null
)
{
con
=
getConnection();
}
try
{
statement
=
con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
}
catch
(SQLException ex)
{
System.out.println(
"
返回ScrollStatement对象失败
"
);
ex.printStackTrace();
}
return
statement;
}
//
执行用户相关操作================================
//
用户验证
public
boolean
checkUser(UserModel user)
{
String id,password,admin;
id
=
user.getId();
password
=
user.getPassword();
admin
=
user.getAdmin();
boolean
result
=
false
;
ResultSet rs
=
null
;
Statement stmt
=
getStatement();
String sql
=
""
;
if
(admin.equals(
"
1
"
))
{
sql
=
"
select * from user where admin='1' and id='
"
+
id
+
"
'and pswd='
"
+
password
+
"
'
"
;
}
else
if
(admin.equals(
"
0
"
))
{
sql
=
"
select * from user where id='
"
+
id
+
"
'and pswd='
"
+
password
+
"
'
"
;
}
try
{
rs
=
stmt.executeQuery(sql);
if
(rs.next())
{result
=
true
;}
//
验证成功
else
{result
=
false
;}
//
验证失败
stmt.close();
}
catch
(SQLException ex)
{
System.out.println(
"
sql执行验证失败
"
);
ex.printStackTrace();
}
return
result;
}
}