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&amp;characterEncoding=utf-8&amp;useSSL=false&amp;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;

去訪問瀏覽器
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章