jndi方式与在web.xml中添加context-param方式的区别?

请问在配置数据源的时候,为了保持代码松耦合,常常要将url,用户名,密码等参数以特殊方式部署。

这是web.xml中的配置,然后在servlet中读取,继而连接数据库。

<context-param>
    <param-name>Uri</param-name>
    <param-value>jdbc:mysql://localhost:3306/regUser</param-value>
  </context-param>
  <context-param>
    <param-name>Name</param-name>
    <param-value>root</param-value>
  </context-param>
  <context-param>
    <param-name>Password</param-name>
    <param-value>chong</param-value>
  </context-param>
  <context-param>
    <param-name>DriverClass</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
  </context-param>

 

还有一种就是通过jndi方式了,我想清楚这两种方式有什么区别,哪种更好,更规范?还有就是这种<context-param>还能做些什么东西?

 

jndi比较灵活, 数据库部分都交给J2EE容器配置和管理.
如果更换db, web配置中也不需要做更改