以登录为例吧。。。。。
三个页面:login.java和welcome.java和loginDL.java
当然,在配置文件中把这三个servlet先写好。。。其中,login.java中是用于显示出登录的界面,action=loginDL
然后,在loginDL中对用户名和密码进行验证,如果正确,则跳转到welcome.....在welcome中,对数据库数据进行分页显示
对于分页,最快的方法是select * from tableName where id between ? and ?
但是,如果在结果集中有记录被删除时,那么就会有的显示页不能显示出我们想要的条目数
因此我们的解决方法是:
select top pageSize 字段名列表 from 表名 where id not in
(select top pageSize*(pageNow-1) id from 表名 )
当然,这个方法只对mysql数据库有效,对于Oracle,想都不用想,就是三层的select的语句了。。。。
“select a2.*,rownum rn from (select a1.*,rownum rn from (select * from shunping2) a1 where rownum<=" + end + ") a2 where rn>=" + start;
pw.print("<a href=login/welcome.jsp?pageNow=" + (pageNow-1) +">" + "(上一页)" + "</a>");
把界面和业务逻辑放在一起(Model1模式),[只有login,loginDL,welcome页面],有许多不合理的地方
如:
1.在loginCL.java和welcome.java中都操作了数据库,逻辑相似,有重复代码
2.整个框架没有清晰的层次,显得很乱
3.可读性差,维护性差
进行改进 :
1.进行分层,mv模式 model+view
2.将常用代码进行封装到类中
首先,从数据库中得到连接(封装类):
ConnDB.java中:
package com.steptwo.hsp;
import java.sql.*;
public class ConnDB {
private Connection conn = null;
public Connection getConn(){
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:ORCL","seven","angus");
}catch(Exception e){
e.printStackTrace();
}
return conn;
}
}
建立Model层,它对应数据库中的一条记录:
UserBean.java
package com.steptwo.hsp;
public class UserBean {
private int userId;
private String userName;
private String mail;
private int age;
<