南昌大学软件学院 java web大作业 实验报告
Model2具有组件化的优点从而更易于实现对大规模系统的开发和管理,但是开发MVC系统比简单的JSP开发要复杂许多,它需要更多的时间学习和掌握。同时新东西的引入会带来新的问题(这让我想起来关于\自动计算\的一篇文章,中间提到为了降低系统的复杂度,却导致更高的复杂度)。必须基于MVC组件的方式重新思考和设计应用结构。原来通过建立一个简单的JSP页面就能实现的应用现在变成了多个步骤的设计和实现过程。 所有的页面和组件必须在MVC框架中实现,所以必须进行附加地开发工作。 MVC本身就是一个非常复杂的系统,所以采用MVC实现Web应用时,最好选一个现成的MVC框架,在此之下进行开发,从而取得事半功倍的效果。现在有很多可供使用的MVC框架,由于Struts有完整的文档并且相对来讲比较简单,所以用它开发MVC系统还是比较方便地。
3.2 关键程序流程
本实验的总体流程如下:
本系统应用3层架构模型,现分别对其进行阐述:
第一层架构为数据库层,也是程序的最底层(主要由DataBase.java实现),它的功能实现sql2012数据库的连接,函数里封装了几个操作。 public boolean query(String s) (用于查询数据表操作);
public ResultSet getlist(String s) (用于获取数据的可以滚动结果集) ; public int update(String s)(用于简单的数据更新操作)
public boolean executebatch(String a[])(批处理,用于处理多条sql);
第二层为JavaBean层和DAO层,主要实现对数据表的信息及对其进行操作的信息进行封装(主要由文件Books.java、Fine.java、borrowbook.java、Users.java、BookService.java 、borrowbookSevice.java、FineService.java和 UserService.java来实现的)。在相应的JavaBean层封装了所有数据表的信息,在上述的实体类中(Books.java、Fine.java、borrowbook.java、Users.java)仅包含对属性的set和get方法,在相应的DAO层主要包含对数据表的相关操作,如获得该数据表的全部信息或部分信息,增加、删除、修改、查询相应的数据表;
第三层为业务逻辑层,主要由Struts和其的action来实现,实现页面的控制和跳转到相应的jsp页面,其中action主要包括BooksAction.java、LoginAction.java、ResetfineAction.java、UserAction.java。
6 / 27
南昌大学软件学院 java web大作业 实验报告
相应的程序架构如图所示:
3.3 关键代码分析
? 数据库的连接和相关一些操作函数 (在文件DataBase.java中实现的):
package com.wk.util;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;
public class DataBase {
7 / 27
private Connection conn = null; private Statement stmt; ResultSet rs = null; //数据库的url
南昌大学软件学院 java web大作业 实验报告
8 / 27
private String url = \//数据库的用户名密码 String user = \String pass = \
//用于验证查询操作
public boolean query(String s) throws SQLException{
try{
//加载驱动
Class.forName(\
}catch(ClassNotFoundException e){ } try{
//创建链接
conn = DriverManager.getConnection(url, user, pass); stmt = conn.createStatement(); rs = stmt.executeQuery(s);
System.out.println(\加载驱动器类时异常\
}catch(SQLException e){ }
return(rs.next());
System.out.println(\连接数据库的过程中出现SQL异常
\
}
//用于结果集可滚动的操作
public ResultSet getlist(String s) throws SQLException{
try{
南昌大学软件学院 java web大作业 实验报告
\
9 / 27
//加载驱动
Class.forName(\
}catch(ClassNotFoundException e){ System.out.println(\加载驱动器类时异常\
} try{ //建立连接
conn = DriverManager.getConnection(url, user, pass); //得到statement对象 stmt = conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
//得到一个可滚动但不可以更新的结果集rs
rs = stmt.executeQuery(s);
}catch(SQLException e){
System.out.println(\更新操作连接数据库的过程中出现SQL异常
} return rs;
}
//用于对数据库的更新
public int update(String s) throws SQLException{ int msg=0; try{ //加载驱动
Class.forName(\
}catch(ClassNotFoundException e){
System.out.println(\加载驱动器类时异常\
南昌大学软件学院 java web大作业 实验报告
}
//批处理,用于处理多条sql
public boolean executebatch(String a[]){
try {
//创建链接
conn = DriverManager.getConnection(url, user, pass); conn.setAutoCommit(false);//关闭自动提交,进行事物处理 stmt = conn.createStatement(); for(int i=0;i
int [] number = stmt.executeBatch();//开始批处理,返回被执行的sql
stmt.addBatch(a[i]);
} try{
//创建链接
conn = DriverManager.getConnection(url, user, pass); stmt = conn.createStatement();
msg = stmt.executeUpdate(s); }catch(SQLException e){ }
return(msg);
System.out.println(\连接数据库的过程中出现SQL异常
\
语句的序号
10 / 27
conn.commit();
System.out.println(\共有\条sql语句被执行\stmt.clearBatch();//清空batch conn.close(); return true;