Java web实训总结

三层结构

  1. 用户界面层 --显示输入数据
  2. 业务逻辑层 --计算处理数据
  3. 数据访问层 --持久化数据

  • 解耦:接口分离原则
    1. 业务逻辑:接口-实现类
    2. 数据访问:接口-实现类

  • servlet:用户界面层
  • service:业务逻辑层
  • dao: 数据访问层
  • entity: 实体类
  • core: 辅助类

模板方法设计模式

  • BaseDao类 定义最基本公共操作
  • XXXDao接口 继承BaseDao接口
  • DaseDaoImpl 实现类 实现BaseDao接口
  • XXXDaoImpl实体类 继承BaseDaoImpl
graph LR
B(XXXDao)-->A(BaseDao)
c(BaseDaoImpl)-->A
d(XXXDaoImpl)-->B
d-->c

单元测试

  1. 新建源代码文件夹:test (标记好属性)
  2. 在test中添加测试类:Test+目标类类名
  3. 断言结果

异常分类

  • 相应的异常类去继承Exception
  • 类别:
    1. 可以再一次进行操作的异常 --RetryException
    2. 只能显示错误信息的异常 --BusinessException
    3. 必须处理的异常 --MustDealException

处理事务以及事务封装

事务 持久化数据时更安全干净
JDBC完成事务处理

1> Connection  
2> 开启事务: 
  con.setAutoCommit(boolean)  
     默认为true:自动提交事务  
     false:人工处理事务  
3> 多次创建执行Statement对象  
4> 没有异常,提交事务  
    con.commit()  
5> 有异常,回滚事务  
    con.rollback();  
6> 关闭资源  

保证同一个进程中 只有一个Connection连接对象
使用ThreadLocal类容器

//封装开启事务,提交事务和回滚事务的方法
    public static void beginTrans() throws Exception{
        getConnection().setAutoCommit(false);
    }

    public static void commitTrans() throws Exception{
        getConnection().commit();
    }

    public static void rollbackTrans() throws Exception{
        getConnection().rollback();
    }
    
     try {
			con = JDBCUtils.getConnection();
            System.out.println(con);
			
			//开启事务处理
			con.setAutoCommit(false);
			
			String s1= "insert into records(account,optype,amount) values('"+no+"',1,"+amount+");";
			pst = con.prepareStatement(s1);
			pst.executeUpdate();
			
			//int x = 10/0;
			
			String s2 = "update accounts set balance=balance+"+amount+" where account='"+no+"'";
			p2= con.prepareStatement(s2);
			p2.executeUpdate();

			//没有异常发送  提交事务
			con.commit();
		} catch (Exception e) {
			//发生了异常 回滚事务
			con.rollback();
		}

过滤器

一个servlet对应一个地址

  1. 过滤器适用场景
    1. 多个servlet都需要的功能,提到过滤器 设置编码 处理异常公共 10天内免登陆等
    2. servlet和一个地址对应,有的功能不适于和一个地址对应
  2. 过滤器作用:客户端发来的地址请求到达服务器 地址首先被过滤器(链)拦截处理 再转到相应的servlet
  3. 编写过滤器:
    1. 编写一个类,实现javax.servlet.Filter过滤器接口。
    2. 生命周期方法:
      init:初始化
      doFilter:过滤每个请求,具体过滤操作
      destroy:销毁
    3. 为要使用过滤器的servlet在web.xml文件中配置 或者使用注解在servlet中配置

版权声明:本文为zy_com原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。