• 使用分层实现业务处理


    JNDI

     

    如何实现在 Tomcat 中发布一条信息供所有的 Web 应用程序使用?
    使用 JNDI 针对部署到服务器上的项目都可以使用
    1) 、发布信息:修改 Tomcat\conf\context.xml 文件或者是把此配置文件 copy 到项目的 META-INF 目录下。
    < Context >
    < Environment name = "tjndi" value = " zhaojian hello JNDI" type = "
    java.lang.Strin
    g" />
    Context >
    name :环境条目名称,相对于 java:comp/env 的名称
    value :通过 JNDI context 请求时,返回给应用的参数值,该值必须转换成 type 属性定义的 Java 类型
    type :环境条目的 Java 类名的全称

     

    由于我们现在使用的开发工具是 idea ,创建的普通的 web 项目中是没有 META-INF 目录的,解决方
    案:
    点击 File——ProjectStructure——Facets

     

     这时idea就会在web文件夹下自动创建一个META-INF文件夹以及context.xml文件

    2) 、获取资源:使用 lookup() 进行查找,在 jsp 页面当中写下面的 java 代码
    // javax.naming.Context 提供了查找 JNDI Rescouce 的接口
    // 定义 Context
    Context context= new InitialContext();
    // 使用 lookup() 查找资源信息 注意前缀:
    java:comp/env
    String result=(String)context.lookup( "java:comp/env/tjndi" );
    out.print(result);
    其中 Context InitialContext 分别导入的包是 javax.naming.Context
    javax.naming.InitialContext
    application JNDI 的区别:
    application 对象只能在一个 web 应用程序中使用,而使用 JNDI 发布的信息是对服务器上所有的 web 应用
    程序都可见的。 JNDI 不只完成这种简单的需求,它还提供了对其他资源的引用。

     数据库连接池

    数据库连接池负责分配、管理和释放数据库连接

     

    连接池是如何管理连接的?
    对于连接的管理可使用 空闲池 ,即把已经创建但未分配出去的连接存放到一个空闲池中;每当用户请求 一个连接时,系统首先检查空闲池内有没有空闲连接。如果有就分配一个连接给用户;如果没有则检查 当前连接池是否达到连接池所允许的最大连接数。如果没有达到,就新建一个连接。如果已经达到,就 等待一定的时间。如果等待的时间内有连接被释放出来,就可以把这个连接分配给等待的用户。如果等 待的时间超过了预定时间,则返回空值(null) 。系统对已经分配出去正在使用的连接只做计数,当使用完 后再返回给空闲池。
    连接池中的连接对象是由谁创建的呢?这就用到了数据源DataSource

    数据源DataSource与连接池

     

    在传统的模式下,数据库连接使用完毕后,需要将其关闭,释放资源。而在连接池中,使用数据源获得 数据库连接对象,在调用close() 方法时并不会真正的关闭连接,而仅仅是实现了断开应用程序与连接池 之间的联系,即将连接的使用权归还给连接池。

    访问数据源

     

    1 、配置 context.xml 文件
    xml version ="1.0" encoding ="UTF-8" ?>
    < Context path ="/" >
    < Resource name ="jdbc/stu" auth ="Container" type ="javax.sql.DataSource"
    maxActive ="100" maxIdle ="30" maxWait ="10000" username ="root"
    password ="123456" driverClassName ="com.mysql.cj.jdbc.Driver"
    url ="jdbc:mysql://localhost:3306/user_student?serverTimezone=UTC" />
    Context >

     

     

    username :指定数据库的用户名
    password :指定数据库的口令 ( 密码 )
    driverClassName :指定连接数据库的 JDBC 驱动程序
    url :指定连接数据库的 URL
    不同的 web 服务器设置数据源的方法是不一样的,要根据服务器提供的帮助文档进行配置
    2 、配置 web.xml 文件
    < resource-ref >
    < res-ref-name > jdbc/stu res-ref-name >
    < res-type > javax.sql.DataSource res-type >
    < res-auth > Container res-auth >
    resource-ref >

     3、添加数据库驱动文件,把数据库驱动的jar包,加入到tomcatlib

    4 、进行代码编写,查找并获取数据源
    1. import javax.naming.Context;
    2. import javax.naming.InitialContext;
    3. import javax.naming.NamingException;
    4. import javax.sql.DataSource;
    5. public class BaseDao {
    6. public Connection getConnection () {
    7. Connection conn = null;
    8. try { //获取与逻辑名相关联的数据源对象
    9. Context ctx = new InitialContext();
    10. DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/news");
    11. conn = ds.getConnection();
    12. } catch (SQLException exception) {
    13. exception.printStackTrace();
    14. } catch (NamingException namingException)
    15. namingException.printStackTrace();
    16. }
    17. return conn;
    18. }
    另一种方式:使用连接池实现数据库的连接
    我们可以把 context.xml 文件引入到项目的 WETA_INF 文件夹下,这个时候配置文件 web.xml 可以不用写 的配置了

    软件设计分层模式

    分层开发的优势?
    1. 职责划分清晰
    2. 无损替换
    3. 复用代码
    4. 降低了系统内部的依赖程度
    三层架构一词中的三层是指表示层、业务逻辑层、数据访问层
    表示层:用于用户展示与交互 (前端页面)
    业务逻辑层:主要功能是提供对业务逻辑处理的封装 service 层 一些判断条件、事物)
    数据访问层:主要实现对数据的保存和读取操作 dao 层)

     

  • 相关阅读:
    公众号留言功能怎么恢复?评论功能如何开启?
    14.收藏模块——peewee创建多对多关系表模型、tornado增加接口、tornado删除接口
    SwiftUI 组件大全之使用 SceneKit 和 SwiftUI 构建交互式 3D 饼图(教程含源码)
    果断收藏!考完PMP还能学什么?一文解答你的疑惑
    基于vue项目的代码优化
    面向对象编程的六大原则
    flask vue跨域问题
    [创业之路-77] - IT创业公司/企业选择云数据存储还是本地数据存储?
    AD快捷键
    Python之读写文件
  • 原文地址:https://blog.csdn.net/weixin_47541976/article/details/126405516