Java_Web之分层架构

当我们把业务处理的代码与JSP代码混在一起,不易于阅读,不易于代码维护,这就需要分层。
分层模式
1、分层模式是最常见的一种架构模式
2、分层模式是很多架构模式的基础
分层
将解决方案的组件分隔到不同的层中
1、在同一个层中组件之间保持内聚性
2、层与层之间保持松耦合
三层模式的划分
1、表示层
2、业务逻辑层
3、数据库访问层
Java_Web之分层架构
 
 
层与层之间的关系

表示层依赖于业务逻辑层,业务逻辑层依赖于数据访问层

三层开发遵循的原则
(1)上层依赖其下层,依赖关系不跨层
1、表示层不能直接访问数据访问层
2、上层调用下层的结果,取决于下层的实现
(2)下一层不能调用上一层
(3)下一层不依赖上一层
1、上层的改变不会影响下一层
2、下层的改变会影响上一层得到的结果
(4)在上一层中不能出现下一层的概念
1、分工明确,各司其职
 
分层开发的特点
(1)下层不知道上层的存在
1、仅完成自身的功能
2、不关心结果如何使用
 
(2)每一层仅知道其下层的存在,忽略其他层的存在
1、只关心结果的取得
2、不关心结果的实现过程
3、JSTL通常会与EL表达式合作实现JSP页面的编码
 
分层开发的优势
1、职责划分清晰
2、无损替换
3、复用代码
4、降低了系统内部的依赖程度
 
分层开发的案例:
package DB;



import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;



/**

 * 数据库连接帮助类

 * @author Administrator

 *

 */

public class BaseDao {

    //=======数据库连接信息========

    static String url = "jdbc:oracle:thin:@localhost:1521:orcl";

    static String username = "news";

    static String password = "news";

    static String driverClassName = "oracle.jdbc.driver.OracleDriver";

    

    //获取数据库连接

    public static Connection getConnection(){

        

        Connection connection = null;

        

        try {

            //加载驱动

            Class.forName(driverClassName);

            

            //获取连接

            connection = DriverManager.getConnection(url,username,password);

            

        } catch (ClassNotFoundException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        

        return connection;

    }

    

    /*

     * 释放连接

     * */

    public void close_con(Connection connection,Statement st,ResultSet rs){

        

        try {

            if(connection!= null){

                connection.close();

            }

            if(st!= null){

                st.close();

            }

            if(rs!= null){

                rs.close();

            }

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        

    }

}

 

package entity;



/**

 * 用户实体

 * @author Administrator

 *

 */

public class User {

    

    private String username;

    private String password;

    

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

    

}

 

package Dao;

import java.util.List;



import entity.User;



/**

 * 用户数据访问层接口

 * @author Administrator

 *

 */

public interface UserDao {

    

    /**

     * 查询用户是否存在

     * @param user

     * @return

     */

    public boolean findUser(User user);

    

    /**

     * 查询用户列表

     */

    public List<User> findUserList();



}
package Dao.Impl;



import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;



import DB.BaseDao;

import Dao.UserDao;

import entity.User;



/**

 * 用户数据访问层实现类

 * @author Administrator

 * 继承数据库连接类

 */

public class UserDaoImpl extends BaseDao implements UserDao {

    

    //数据库连接对象

    Connection conn = null;

    PreparedStatement stm = null;

    ResultSet rs = null;

    

    /**

     * 实现查询用户功能

     */

    public boolean findUser(User user) {

        //获得连接

        conn = this.getConnection();

        //编写sql

        String sql = "select * from news_users where uname = ? and upwd = ?";

        try {

            

            //得到预编译对象

            stm = conn.prepareStatement(sql);

            stm.setString(1, user.getUsername());

            stm.setString(2, user.getPassword());

            

            //执行sql得到结果集

            rs = stm.executeQuery();



            return rs.next();

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }finally{

            //释放连接

            this.close_con(conn, stm, rs);

        }

        

        return false;

    }

    

    /**

     * 查询用户列表

     */

    public List<User> findUserList() {

        //获得连接

        conn = this.getConnection();

        //编写sql

        String sql = "select * from news_users";

        

        //创建泛型集合

        List<User> userlist = new ArrayList<User>();

        try {

            

            //得到预编译对象

            stm = conn.prepareStatement(sql);

            

            //执行sql得到结果集

            rs = stm.executeQuery();

            while(rs.next()){

                User user = new User();

                user.setUsername(rs.getString(2));

                user.setPassword(rs.getString(3));

                

                userlist.add(user);

            }

            

        } catch (SQLException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

            return null;

        }finally{

            //释放连接

            this.close_con(conn, stm, rs);

        }

        

        return userlist;

    }



}
package Biz;



import java.util.List;



import entity.User;



/**

 * 用户业务逻辑层接口

 * @author Administrator

 *

 */

public interface UserBiz {

    

    /**

     * 用户登录

     * @param user

     * @return

     */

    public boolean login(User user);

    

    /**

     * 查询用户列表

     */

    public List<User> finduserList();



}
import Dao.UserDao;

import Dao.Impl.UserDaoImpl;

import entity.User;

/**

 * 用户业务逻辑实现类

 * @author Administrator

 *

 */

public class UserBizImpl implements UserBiz {

    

    //创建数据访问层对象

    UserDao userdao = new UserDaoImpl();

    

    /**

     * 实现登录

     */

    public boolean login(User user) {

        //调用数据访问层查询用户

        return userdao.findUser(user);

    }

    

    /**

     * 查询用户列表

     */

    public List<User> finduserList() {

        // TODO Auto-generated method stub

        return userdao.findUserList();

    }



}


JSP页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    

    <title>My JSP 'index.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">    

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="This is my page">

    <!--

    <link rel="stylesheet" type="text/css" href="styles.css">

    -->

  </head>

  

  <body>

    <form action="dologin.jsp" method="post">

        <p>用户名:<input type="text" name="username" /></p>

        <p>密    码:<input type="password" name="password" /></p>

        <input type="submit" />

    </form>

  </body>

</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@page import="Biz.UserBiz"%>

<%@page import="Biz.Impl.UserBizImpl"%>

<%@page import="entity.User"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    

    //调用业务逻辑层

    UserBiz userbiz = new UserBizImpl();

    

    //获取表单项

    request.setCharacterEncoding("utf-8");

    

    String username = request.getParameter("username");

    String password = request.getParameter("password");

    

    //创建用户实体

    User user = new User();

    user.setUsername(username);

    user.setPassword(password);

    

    //实现登录

    boolean f = userbiz.login(user);

    

    if(f){

        request.getRequestDispatcher("success.jsp").forward(request,response);

    }else{

        %>

            <script type="text/javascript">

                alert("用户名或密码错误!");

                location.href="index.jsp";

            </script>

        <%

    }

    

%>

 

 

 

你可能感兴趣的:(java)