jndi
什麼是jndi(Java Naming and Directory Interface)
實現在web應用中訪問Tomcat中發佈的信息,通過名字可以訪問運行在服務器上的所有的資源
使用jndi查找數據源
操作
熟練應用jndi查找數據源
掌握數據庫連池原理
如何在Tomcat中發佈一條信息供所有的web應用程序使用
以前用過的配置文件
web.xml
servlet.xml
context.xml
修改配置文件
在Tomcat的文件夾裏找到context.xml配置文件
添加一條環境變量
<Environment name="jy17" type="java.lang.String" value="使用jdni訪問瀏覽器資源!" />
如何訪問資源
使用context對象,調用lookup()方法
1、新建一個Web項目jndiTest
2、新建一個servlet
package jndi;
import java.io.IOException;
import java.io.PrintWriter;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.xml.internal.bind.CycleRecoverable.Context;
@WebServlet("/index")
public class Testjndi extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//編碼,儘量加上,避免出錯
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
try {
//初始化context對象
InitialContext ctx= new InitialContext();
//調用lookup方法,"java:comp/env/環境變量裏配置的name"
String jy=(String) ctx.lookup("java:comp/env/jy17");
//輸出
out.print("<h1>"+jy+"<h1>");
} catch (NamingException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
訪問
如果代碼無誤,但是還是現實找不到頁面
可以去看看配置文件是否丟失
會發現剛纔寫的環境變量沒有,此時重新寫上,並且重啓服務器即可訪問
使用連接池訪問資源
爲什麼使用連接池
一般連接
連接池
不斷開連接,而是把對象換到連接池
連接池可以新建連接,也可以把多餘的釋放掉
連接池中的連接由容器(如Tomcat)來創建
如何使用連接池
DataSource
、
步驟
1、配置資源
name是名字,可以通過名字來訪問連接池
auth表示由誰來管理,contain是容器管理,application是應用程序來管理
其餘的都是參數
driver是驅動,對應driverClassName
需要注意URL裏面的&,這是一個轉義字符,xml文件裏面的&不可用,所以要在後面加上amp;
<Environment name="jy17" type="java.lang.String" value="使用jdni訪問瀏覽器資源!" />
<Resource name="news“ type=“javax.sql.DataSource" auth="Container"
maxAction="100"
maxIdle="30"
maxWait="10000"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/newsmanagersystem?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai"
username="root"
password="111111"
/>
數據源的資源配置好了
把連接數據庫的jar包放到Tomcat的lib文件夾裏
鏈接關鍵代碼
Context ctx=(Context) new InitialContext();
DataSource ds=(DataSource) ctx.lookup("java:comp/env/news");
con=ds.getConnection();
注意不要導錯包,Context是這個包
import javax.naming.Context;
去訪問瀏覽器