三层架构

 1.什么是三层?

     是指  表示层、业务逻辑层、数据访问层

     各层之间相互依赖:表示层依赖于业务逻辑层,业务逻辑层依赖于数据访问层

2.分层的实现

   首先创建于用户信息对应的用户类

 
  
  1. //创建user实体类  
  2. public class User{  
  3.         private int id;  
  4.         private String username;  
  5.         private String password;  
  6.         public int getId() {  
  7.             return id;  
  8.         }  
  9.         public void setId(int id) {  
  10.             this.id = id;  
  11.         }  
  12.         public String getUsername() {  
  13.             return username;  
  14.         }  
  15.         public void setUsername(String username) {  
  16.             this.username = username;  
  17.         }  
  18.         public String getPassword() {  
  19.             return password;  
  20.         }  
  21.         public void setPassword(String password) {  
  22.             this.password = password;  
  23.         }  
  24.           
  25.     } 

      创建好user类后,面将把与数据库访问相关的业务提取出来,创建一个用户访问数据库的接口UserDao,在接口中声明查找用户的方法.

 
  
  1. public interface UserDao{  
  2.         //根据用户进行查找,返回用户列表  
  3.         public boolean findUser(User user);  
  4.     } 

     创建好UserDao接口后,需要编写具体的UserDaoJdbcImpl类来实现UserDao接口

 
  
  1. public class UserDaoJdbcImpl implements UserDao{  
  2.  
  3.         public boolean findUser(User user) {  
  4.             Connection conn=null;  
  5.             PreparedStatement pstm=null;  
  6.             ResultSet rs=null;  
  7.             boolean valid=false;  
  8.             try {  
  9.                 /**调用创建数据库连接的方法获得连接**/ 
  10.                 conn=BaseDao.getConn();  
  11.                 String sql="select * from user where uname=?";  
  12.                 pstm=conn.prepareStatement(sql);  
  13.                 pstm.setString(1, user.getUsernname());  
  14.                 rs=pstm.executeQuery();  
  15.                 if(rs.next()&&rs.getString("upwd").equals(user.getPassword())){  
  16.                     valid=true;  
  17.                     return valid;  
  18.                 }  
  19.             } catch (Exception e) {  
  20.                 e.printStackTrace();  
  21.             }finally{  
  22.                 //此处省略关闭连接的代码  
  23.             }  
  24.             return valid;  
  25.         }  

    编写业务逻辑层控制接口UserBiz

 
  
  1. public interface UserBiz{  
  2.     public boolean login(User user);  
  3.    } 

      编写实现UserBiz接口的具体实现类UserBizImpl

 
  
  1. public class UserBizImpl implements UserBiz{  
  2.           public List login(User user){  
  3.                 UserDao ud=new UserDaoJdbcImpl();  
  4.                 boolean flag=ud.findUser(user);  
  5.                 return flag;  
  6.           }  

       最后在JSP中调用业务逻辑来实现

    

 
  
  1. <%  
  2.     String uname=request.getParameter("user");  
  3.     String pwd=request.getParameter("pwd");  
  4.     User user=new User();  
  5.     user.setUsername(uname);  
  6.     user.setPassword(pwd);  
  7.     UserBiz ub=new UserBizImpl();  
  8.     boolean flag=ub.login(user);  
  9.     if(flag){  
  10.         response.sendRedirect("welcome.jsp");  
  11.     }else{  
  12.         response.sendRedirect("login.jsp");  
  13.     }  
  14. %> 

       由此我们实现了将程序代码按照其各自所发挥的功能进行划分,页面展示、业务处理、数据库访问功能分工明确,在业务实现时只需关注本模块的实现即可!

 

              三层开发遵循的原则

        1.  上层依赖其下层,依赖关系不跨层

        2.  下一层不能调用上一层

        3.   下一层不依赖上一层

        4.   在上一层中不能出现下一层的概念