javaweb——JNDI与tomcat连接池

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);
   %>

javaweb——JNDI与tomcat连接池_第1张图片

3、连接池

A、首先依然在tomcat的context.xml中配置连接池基本属性

	
	
    <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" />

javaweb——JNDI与tomcat连接池_第2张图片

B、然后在项目的web.xml中配置对应的属性

	
	<resource-ref>
        <res-ref-name>DatabaseConnectionres-ref-name>
        <res-type>javax.sql.DataSourceres-type>
        <res-auth>Containerres-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类
并获取到查询结果,打印出来
javaweb——JNDI与tomcat连接池_第3张图片

你可能感兴趣的:(javaweb,java,数据库,mysql,jdbc)