前面的文章《Eclipse创建带Servlet的JSP程序》中在留言簿程序中加入了Servlet,并将之前放在JSP文件中的代码逻辑转移到了Servlet和JavaBean中。程序可以正常运转,但是所有的数据都是存储在了服务器内存中,Tomcat一重启,这些数据就全丢了。
为了持久化这些数据,一般是将它们放在本地文件或者数据库中。本文主要介绍在数据库中存取数据的操作示例。由于之前在《Eclipse中使用Data Source Explorer进行数据库连接测试》中介绍过下载MySQL和SQLServer的数据库连接文件,这里就直接拿来用了。本文中主要是测试MySQL数据库。
首先创建两张表user和messages,用于保存用户信息及留言簿消息。在user中默认增加一条用户记录。
然后是改造程序代码,首先是登录验证服务,将UserBuffer类改名为OperateJDBC,然后将ValidateUser函数修改为数据库查询方式验证,代码如下:
public Boolean ValidateUser(User user)
{
Boolean result=false;
try
{
con=getConnection();
stmt=con.createStatement();
String queryString="select 1 from user where Account='"+user.getName()+"' and password= '"+user.getPassword()+"'";
rs=stmt.executeQuery(queryString);
result=rs.next();
rs.close();
stmt.close();
con.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
return result;
}
在注册Servlet中,将判断用户名是否注册以及增加新用户函数修改如下:
public Boolean IsUserRegisiterd(String userName)
{
Boolean result=false;
try
{
con=getConnection();
stmt=con.createStatement();
String queryString="select 1 from user where Account='"+userName+"'";
rs=stmt.executeQuery(queryString);
result=rs.next();
rs.close();
stmt.close();
con.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
return result;
}
public void AddUser(User user)
{
try
{
con=getConnection();
stmt=con.createStatement();
String insertString="INSERT INTO user VALUES ('"+user.getName()+"','"+user.getPassword()+"','"+user.getEmail()+"')";
stmt.executeUpdate(insertString);
rs.close();
stmt.close();
con.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
最后是消息Servlet,将添加消息和获取所有消息的函数都修改为与数据库交互:
public void AddMessage(String userName,String msg)
{
try
{
con=getConnection();
stmt=con.createStatement();
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String curDate = sf.format(date);
String insertString="INSERT INTO messages (`UserAccount`,`ReleaseTime`,`Message`) VALUES ('"+userName+"','"+curDate+"','"+msg+"')";
stmt.executeUpdate(insertString);
rs.close();
stmt.close();
con.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
public String GetAllMessages()
{
StringBuilder allMsgs=new StringBuilder();
try
{
con=getConnection();
stmt=con.createStatement();
String queryString="SELECT `UserAccount`,`ReleaseTime`,`Message` FROM `messageboard`.`messages` order by MsgIndex desc";
rs=stmt.executeQuery(queryString);
rs.beforeFirst();
while(rs.next())
{
allMsgs.append("["+rs.getString("ReleaseTime")+"]"+rs.getString("UserAccount")+":"+rs.getString("Message")+"<br>");
}
rs.close();
stmt.close();
con.close();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
return allMsgs.toString();
}
其它文件变化不大,就不列出来了。JDBC这部分代码写的一般,只是能用而已。代码放在了GitHub上面,地址为:https://github.com/guochao2299/SimpleMessageBoard/tree/20200521
参考文献:
[1]Java Web设计实用教程
[2]Java Web从入门到精通
[3]JSP程序设计与案例教程
[4]Head First Servlets and JSP
[5]https://blog.csdn.net/m0_37961948/article/details/76725435
[6]https://blog.csdn.net/Hurricane_m/article/details/94408235
[7]https://blog.csdn.net/lykio_881210/article/details/78898874