1. META-INF 오른쪽 클릭 → New → Other
2. XML → XML File 선택
3. File name : context.xml 입력
📌 context.xml : WAS 프로그램에 객체 생성 관련 정보를 제공하기 위한 파일
→ WAS 프로그램 실행시 자동으로 파일을 읽어 필요한 정보를 저장
📌 Context : context.xml 파일의 최상위 엘리먼트<Context>
📍 Resource : 객체 생성 관련 정보를 속성과 속성값으로 제공하는 엘리먼트
※ 태그내용이 없어서 마지막에 / 붙여서 시작,종료태그 같이 쓸수있음
📍 name : Resource 엘리먼트를 구분하기 위한 식별자를 속성값으로 설정
→ 객체 생성에 필요한 정보를 WAS 프로그램으로부터 제공하기 위한 이름
📍 auth : 객체를 생성을 위한 정보를 제공한 사용자를 속성값으로 설정
📍 type : 객체를 생성하여 반환받기 위한 자료형(클래스 또는 인터페이스)을 속성값으로 설정
📍 factory : 객체를 생성하기 위한 Factory 클래스를 속성값으로 설정
→ Factory 클래스에 필요한 값을 속성명(필드명)과 속성값(필드값)을 사용하여 제공<Resource name="jdbc/oracle" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:xe" username="scott" password="tiger" initialSize="10" maxIdle="10" maxTotal="15"/> </Context>
📌 JNDI(Java Naming Directory Interface) : WAS 프로그램에 객체 생성에 필요한 정보를 저장하여 이름(식별자)으로 구분하여 저장하고 필요한 경우 객체 생성 정보를 제공받아 객체를 생성하여 사용하는 기능
→ 객체 생성에 필요한 정보를 제공하는 파일 필요 - src/main/webapp/META-INF/context.xml
📌 WAS 프로그램에 등록된 자원(Resource)을 이용하여 DataSource 객체를 생성하고 DataSource 객체에 저장된 다수의 Connection 객체중 하나를 제공받아 클라이언트에게 접속장보를 전달하는 서블릿📃JndiServlet.java
package xyz.itwill.servlet; // import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; // import javax.naming.InitialContext; 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 javax.sql.DataSource; // //JNDI(Java Naming Directory Interface) : WAS 프로그램에 객체 생성에 필요한 정보를 저장하여 이름(식별자)으로 //구분하여 저장하고 필요한 경우 객체 생성 정보를 제공받아 객체를 생성하여 사용하는 기능 //→ 객체 생성에 필요한 정보를 제공하는 파일 필요 - src/main/webapp/META-INF/context.xml // //WAS 프로그램에 등록된 자원(Resource)을 이용하여 DataSource 객체를 생성하고 DataSource 객체에 저장된 //다수의 Connection 객체중 하나를 제공받아 클라이언트에게 접속장보를 전달하는 서블릿 @WebServlet("/jndi.itwill") public class JndiServlet extends HttpServlet { private static final long serialVersionUID = 1L; // protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out=response.getWriter(); // try { //InitialContext 객체 생성 //→ WAS 프로그램에 등록된 자원을 이용하여 객체를 생성하여 제공하기 위한 객체 //→ NamingException(이름에 대한 자원 정보가 없는 경우 발생되는 예외) 발생 - 예외처리 InitialContext ic=new InitialContext(); // //InitialContext.lookup(String name) : 매개변수로 전달받은 이름의 자원을 WAS 프로그램에게 제공받아 객체를 생성하여 반환하는 메소드 //→ Object 타입의 객체를 반환하므로 반드시 명시적 객체 형변환하여 사용 DataSource dataSource=(DataSource)ic.lookup("java:comp/env/jdbc/oracle"); // Connection con=dataSource.getConnection(); // out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<meta charset='UTF-8'>"); out.println("<title>Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>DBCP(JNDI)</h1>"); out.println("<hr>"); out.println("<p>con = "+con+"</p>"); out.println("</body>"); out.println("</html>"); } catch (Exception e) { e.printStackTrace(); } } }