1、复习一下
pageContext作用范围:当前页面有效
request作用范围:请求时有效
session作用范围:一次会话有效
application作用范围:一个应用内有效
作用范围最大的就是application
那么如果想要在不同应用之间共享一个变量呢?文件?数据库?
还有个方式:JNDI
2、JNDI
配置方式
打开tomcat根目录,找到context.xml文件
. /Tomcat 8.5/conf/context.xml
举个栗子
// 把这个变量配置到context.xml中
String userName = "黄黑红";
/* 分析:
类型(全类名):java.lang.String
变量名:userName
值:黄黑红
*/
变量分析完毕,接下来就该把它放到context中了
<Context>
...............原来的内容
<!-- 按照上面分析的,分别填入 -->
<Environment name="userName" value="黄黑红" type="java.lang.String" />
</Context>
配置好以后,以后任何一个项目都可以从这个tomcat中访问该资源
那么,如何访问呢?
以jsp为例
<%
Context context = new InitialContext();
// lookup(java:comp/env/name),返回结果为object
// java:comp/env/ + 你配置的变量名
String userName = (String) context.lookup("java:comp/env/userName");
out.print(userName);
%>
3、连接池
A、首先依然在tomcat的context.xml中配置连接池基本属性
<!--context.xml-->
<!--
配置mysql数据库的连接池,
需要做的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下
name JNDI名字
maxIdle 连接池中最多可空闲maxIdle个连接
maxWait 连接池中连接用完时,新的请求等待时间,毫秒
username 数据库用户名
password 数据库密码
-->
<Resource name="DatabaseConnection" auth="Container" type="javax.sql.DataSource" username="root"
password="root" maxIdle="30" maxWait="10000" maxActive="100" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/webtest2" />
B、然后在项目的web.xml中配置对应的属性
<!--web.xml-->
<resource-ref>
<res-ref-name>DatabaseConnection</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
C、基本配置已经完成,下面跑个代码试一下吧
// TomcatConnectionPool.java
package org.zjy.dao;
import org.zjy.entity.UserInfo;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class TomcatConnectionPool {
Connection connection = null;
PreparedStatement pstmt = null;
ResultSet resultSet = null;
public ArrayList<UserInfo> getUserInfo(){
ArrayList<UserInfo> userList = new ArrayList<UserInfo>();
try {
Context initCon = new InitialContext();
Context context = (Context)initCon.lookup("java:comp/env"); // 固定格式
DataSource ds = (DataSource)context.lookup("DatabaseConnection");
connection = ds.getConnection();
String sql = "select * from userinfo";
pstmt = connection.prepareStatement(sql);
resultSet = pstmt.executeQuery();
while(resultSet.next()){
UserInfo user = new UserInfo();
user.setUserName(resultSet.getString("uname"));
user.setUserInfo(resultSet.getString("uinfo"));
userList.add(user);
}
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
} finally {
try {
if(resultSet != null){
resultSet.close();
}
if (pstmt != null){
pstmt.close();
}
if(connection != null){
connection.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return userList;
}
}
然后在servlet中new一个TomcatConnectionPool类
并获取到查询结果,打印出来