<context></context>
에 database 연결코드 넣기 위해 context.xml
파일을 오버라이딩한다.web.xml
에서 database 설정을 하기 위해 web.xml
을 오버라이딩한다.https://tomcat.apache.org/tomcat-8.5-doc/jndi-datasource-examples-howto.html#MySQL_DBCP_2_Example
위 페이지에 가서 , context configure 코드와 web.xml configure 코드내용을 각각 1)과 2)에서 만든 파일에 넣는다.
의문1:
DB.java 파일의 getConnection()함수를 이용해 database를 연결하려는데, 왜 이 함수는 static이어야 할까?
의문2: context.xml의 역할
jar파일 다운&빌드패스 설정보다 좋은 maven 또는 gradle
jar파일을 다운받아서 파일에 추가하는 방식보다 maven 또는 gradle 처럼 문서에 xml방식으로 적어놓고 프로젝트 내부에서 다운받고, 빌드까지 해주는 방식으로 하는 것이 더 좋다. 의존성 관리하기에도 좋다.
dbtest.jsp 파일의 위치: web.xml 파일을 읽어야 하므로 web.xml 파일의 상위 혹은 같은 계층에서 파일을 생성해야 한다.
<% DB.getConnection(); %>
의 코드를 통해 DB연결이 성공했는지 test해본다.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
//추가한 내용
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000"
username="bloguser" password="bitc5600" driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/blog?serverTimezone=Asia/Seoul"/>
</Context>
package com.cos.blog.config;
import java.sql.Connection;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class DB {
public static Connection getConnection() {
try {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/TestDB");
Connection conn = ds.getConnection(); // pulling 기술이라서 conn이라는 connection은 데이터베이스를 100개 가지고 있다.(근거: context.xml의 maxTotal="100")
//그래서 필요한거마다 connection 객체를 가져와서 그걸로 데이터를 주거나 받으면 된다.
return conn;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
<%@page import="com.cos.blog.config.DB"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
DB.getConnection();
%>