1.JavaEE的开发模式

完成一件事情或者一个功能的一种常规的“套路”。

下面我们来介绍JSP的开发模式:

1.第一代

JSP页面:HTML+数据库交互的代码+逻辑判断的代码

2.第二代

利用javaweb-08的javabean模式
 JSP页面:HTML+逻辑代码
 javabean:数据库交互的代码进行了DAO封装,DAO(直接新DB数据库中进行操作)
 Connection conn = DBHelper.getConn();
 2.1 servlet
 2.2 JavaWEN经典模式:MVC架构


 

3.三层架构模式

简单的说就是将一个程序中的代码分了三个层,每个层做着独立的事情,但是在某种情况下,三层之间又有联系。

web显示层
     职责:显示数据
     jsp(html+css+js+jQuery+bootstrap+easyui等等)
         负责显示内容
     doXXX.jsp  处理页面----将来学习servlet  
     
 业务逻辑层
     职责:从数据访问层拿到数据后进行判断限制
     service    IUsersServerDao  UsersServerImpl
     biz           IUsersBiz       UsersBizImpl
     
     S阶段编写业务逻辑层:不考虑任何条件
         直接从数据访问层中拿到数据进行操作即可。
     
     负责:
         1.删除数据:先获取有没有,然后再进行删除
         2.考虑数据库事务处理机制
             事务:在一个模块中,出现多个条件时,利用事务机制来达到一个要么一起成功,要么一起失败的现象。
             事务三个操作:commit提交  savepoint还原点 rollback 回滚(撤销)
             银行转账问题。
             刘凯丰----->转账----->谢凯进    1000万
             update tb_users set money = money-1000 where name = '刘凯丰'
             System.out.println(10/0);//运行时异常
             update tb_users set money = money+1000 where name = '谢凯进';
             
     
 数据访问层
     职责:专门从DB数据库中拿数据。
     数据库帮助类DBHelper
     实体DAO:   IUsersDao  UsersDaoImpl

许多代码新手可能不太了解,那么下面我们举个例子:

例子:
饭馆吃饭问题
刘凯丰  顾客
    服务员(负责显示餐馆中所有的菜品)---web显示层
    厨师(根据小厨提供的材料进行有效的组装和加工)--业务逻辑层
    小厨(切菜,洗菜,买菜,其它事情)--数据访问层

目的:    数据删除、登录。

5.分层的实现

S1阶段:实体包,工具包,dao包,ui包;
S2阶段:数据访问层(DAO)、业务逻辑层(BIZ|SERVICES)、表示层(jsp)、实体包。

1. 表示层 jsp+html; 

2. 业务逻辑层 biz/service; 

3. 数据库访问层 dao(访问数据库、文本文件、XML文件)。 

注意:Entity实体类不属于某层,三层都可以调用,主要用于封装数据。

分层实现的优势

职责划分清晰

无损替换

复用代码

降低了系统内部的依赖程度

4.三层架构:表示层、业务逻辑层、数据访问层
    ①表示层:位于最外层 ( 最上层 ),使用户能够直接访问,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作界面。在 Web 应用程      序中,表示层一般以 JSP 文件、HTML文件为主;

    ②业务逻辑层:其主要功能是提供对业务逻辑处理的封装,在业务逻辑层中,通常会定义些接口,表示层通过调用业务逻辑层的接口实现各种操作,      如数据有效性的检验. 业务辑描述等相关功能,业务逻辑层经常放在 service 包或 biz 包下,btz 是英文 buslness 的缩写,意思是 '业务逻 辑";

    ③数据访问层:该层实现对数据的保存和读取操作。数据访问,可以访问关系数椐库、文件或 XML 文档等。数据访问层通常放在 dao 包下,DAO 是英文 Data Access Object 的缩写,意思是 "数据访问对象 ";

下面是课堂案例登录实现验证:

/**
 * 用户管理接口实现类
 * 
 * @author Administrator
 *
 */
public class UsersDaoImpl extends BaseDao implements IUsersdao {
	// 编写dao 写一个复制5个

	@Override
	public Users usersLogin(Users users) {
		// 1.定义各种对象及变量
		Users u = null;// 实体对象
		String sql = "select * from tb_t281_news_users where username = ? and password = ?";
		ResultSet rs = this.executeQuery(sql, new Object[] { users.getUsername(), users.getPassword() });
		try {
			if (rs.next()) {
				u = new Users(rs.getInt("userid"), rs.getString("username"), rs.getString("password"),
						rs.getString("usex"), rs.getString("uaddress"), rs.getString("utelphone"), rs.getInt("urole"),
						rs.getString("udate"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHelper.myClose(conn, ps, rs);
		}
		return u;
	}

  登录验证加载

<title>do登录验证</title>
</head>
<body>
	<%
		//设置编码
		request.setCharacterEncoding("utf-8");

		//获取用户名,密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");

		//实体封装(将username,password加入实体对象)
		Users user = new Users(username, password);

		//调用业务逻辑层
		IusersBiz iud = new UserBizImpl();
		//实现用户登录功能
		Users u = iud.usersLogin(new Users(username, password));

		if (u != null) {//登录成功
			//转发到主界面
			response.sendRedirect("zhujiemian.jsp");
		} else {//登录失败
				//返回当前登录页面登录
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}
	%>

接口类:

/*
*接口类
*/
public interface IusersBiz {
     
     public Users usersLogin(Users users);}

 接口实现类:

public class UserBizImpl implements IusersBiz {
     // 实例化数据访问层 (全局变量)
     private IUsersdao kk = new UsersDaoImpl();    @Override
     public Users usersLogin(Users users) {
         // 调用登录方法
         return kk.usersLogin(users);
     }}