[Servlet 5-1] WAS를 이용한 객체 만들기(권장)

임승현·2022년 12월 2일
0

Servlet

목록 보기
12/14

🐧Project/src/main/webapp/META-INF 폴더에 xml 파일 만들기

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>

🐧JndiServlet 만들기

📌 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();
		}
	}
}

0개의 댓글