BCSP-玄子Java开发之Java Web编程CH05_使用三层架构实现业务处理

BCSP-玄子Java开发之Java Web编程CH05_使用三层架构实现业务处理

JNDI

JNDI是什么

  • Java Naming and Directory Interface:Java命名与目录接口
  • 目录服务的Java API

JNDI能做什么

  • 通过将名称与资源或服务进行关联,为查找和访问各种命名和目录服务提供通用、统一的接口

JNDI的作用与优点

  • 简化应用对于资源的配置及维护工作可以在更大范围、不同应用之间共享资源

JNDI API

配置资源

  • 修改Tomcat的context.xml文件,配置Environment环境变量
<Context>
    <!-- 省略其他代码 -->
    <Environment name="tjndi" value="hello!" type="java.lang.String"/>
</Context>
  • name:环境变量的名称
  • type:环境变量的Java类型全类名
  • value:环境变量的值

在JSP页面编写代码,通过JNDI访问发布的信息

  • 通过Context的lookup()方法查找资源
<%@ page language="java" pageEncoding="UTF-8" %>
<%@ page import="javax.naming.*" %>
<%
    //javax.naming.Context接口提供了查找JNDI Resource的接口
    Context ctx = new InitialContext();	
    //java:comp/env/为前缀
    String resource = (String) ctx.lookup("java:comp/env/tjndi");
    out.print("test jndi:" + resource);
%>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PNip3Qnu-1687705823101)(./assets/image-20230625105704105.png)]

连接池

数据库连接技术回顾

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PISo4rUS-1687705823101)(./assets/image-20230625105826292.png)]

存在问题

  • 重复创建、销毁数据库连接
  • 并发访问数量较大时,执行速度受到极大影响
  • 系统的安全性和稳定性较差

连接池技术

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Toqxwurq-1687705823102)(./assets/image-20230625105913124.png)]

使用连接池管理数据库连接

  • 每次请求从连接池中获取数据库连接
  • 处理结束后,将数据库连接归还到连接池

配置数据源

配置Tomcat安装目录/conf/context.xml文件

<Context><!--省略其它配置-->
    <Resource name="jdbc/microblog" auth="Container" type="javax.sql.DataSource"
          maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="root"
          password="123456" driverClassName="com.mysql.jdbc.Driver"
	   url="jdbc:mysql://127.0.0.1:3306/microblog?useUnicode=true…"/>
</Context>
目录 说明
name 指定资源的JNDI名字
auth 指定管理资源的Manager
type 指定资源所属的Java类型
maxTotal 最大连接数,默认值为8,负数表示不受限制
maxIdle 最大空闲连接数,默认值为8,设置为负数表示不受限制
minIdle 最小连空闲接数,默认值为0
maxWaitMillis 最大等待数
username 指定连接数据库的用户名
password 指定连接数据库的密码
driverClassName 指定连接数据库的JDBC驱动程序
url 指定连接数据库的URL

不同的Web服务器设置数据源的方法也是不一样的

配置/WEB-INF/web.xml文件

<resource-ref>
    <description>Microblog DataSource</description >
    <res-ref-name>jdbc/microblog</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
目录 说明
description 引用资源说明
res-ref-name 引用资源的JNDI名字,与元素中的name属性对应
res-type 引用资源的Java类型,与元素中的type属性对应
res-auth 指定管理引用资源的Manager,与元素中的auth属性对应

在Tomcat的lib目录中添加数据库驱动jar文件

编写代码,查找并获取数据源

  • 通过lookup()方法查找数据源
public Connection getConnection() {
	Context ctx;
        try {
            ctx = new InitialContext();
	     DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/microblog");
            conn=ds.getConnection();
        } catch (NamingException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
}
  • 编写代码,测试从连接池中获取数据源
<%
      BaseDao baseDao = new BaseDao();
      Connection conn = baseDao.getConnection();
      if(conn==null)
          out.print("获取数据库连接失败");
      else {
          out.print("获取数据库连接成功");
          baseDao.closeAll(conn, null, null);
      }
%>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tkKnom1k-1687705823102)(./assets/image-20230625110355894.png)]

JNDI配置数据源常见错误-1

错误类型:无法加载驱动类

报错信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LxGoDmWA-1687705823102)(./assets/image-20230625110413322.png)]

错误原因:

  • 缺少jar文件
  • 驱动类名拼写错误

解决方案:

  • 将JDBC驱动程序的jar文件添加到Tomcat的lib目录中
  • 检查驱动类名拼写是否正确

JNDI配置数据源常见错误-2

错误类型:无法创建JDBC驱动

报错信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FhkMztBR-1687705823103)(./assets/image-20230625110630905.png)]

错误原因:

  • 数据库驱动配置错误

解决方案:

  • 检查context.xml文件中数据源的配置信息,确保配置信息完全正确

JNDI配置数据源常见错误-3

错误类型:属性名绑定错误

报错信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SebEm45n-1687705823103)(./assets/image-20230625110712722.png)]

错误原因:

  • 获取配置信息值的key错误,须使用前缀(java:comp/env/)+数据源名称

解决方案:

  • 检查代码,使用使用前缀(java:comp/env/)+数据源名称作为lookup()方法的参数

三层架构

两层架构

表示层

  • 数据展示、收集
  • 业务处

理数据访问层

  • 业务处理
  • 连接数据库
  • 数据处理

存在问题

  • 数据展示与业务处理混合、或者业务处理与数据处理混合
  • 编码职责不清,修改时互相影响,难以扩展和重用

三层架构

表示层

  • 数据展示
  • 数据收集
  • 用户交互

业务逻辑层

  • 封装业务处理逻辑
  • 事务管理

数据访问层

  • 连接数据库
  • 数据处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q7qd6Tnd-1687705823103)(./assets/image-20230625110858523.png)]

各层之间的关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NuazJhyE-1687705823103)(./assets/image-20230625110937432.png)]

分层的目和原则

分层目的

  • 高内聚:每一层的组件具有内聚性
  • 低耦合:有依赖关系的各层之间保持低耦合

分层原则文章来源地址https://uudwc.com/A/xWMkq

  • 上一层依赖其下一层、依赖关系不跨层
    • 表示层不能直接访问数据访问层
    • 上层调用下层的结果,取决于下层的实现
  • 下一层不能调用上一层
  • 下一层不依赖上一层
    • 上层的改变不会影响下一层
    • 下层的改变会影响上一层得到的结果
  • 在上一层中不能出现下一层的内容
    • 分工明确,各司其职

三层架构的优势

  • 职责划分清晰
  • 无损替换
  • 代码复用率高
  • 系统内部的依赖程度低

原文地址:https://blog.csdn.net/qq_62283694/article/details/131387754

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年06月26日 06:08
下一篇 2023年06月26日 06:10