JSP 게시판 프로젝트 전체구조

jungnoeun·2022년 7월 14일
0

jsp

목록 보기
4/14

프로젝트에 database 연결하기

1) META-INF 폴터에 context.xml 파일 생성

  • <context></context> 에 database 연결코드 넣기 위해 context.xml 파일을 오버라이딩한다.

2) WEB-INF 폴더에 web.xml 파일 생성

  • web.xml 에서 database 설정을 하기 위해 web.xml 을 오버라이딩한다.

* Connection pooling 기술을 사용

https://tomcat.apache.org/tomcat-8.5-doc/jndi-datasource-examples-howto.html#MySQL_DBCP_2_Example
위 페이지에 가서 , context configure 코드와 web.xml configure 코드내용을 각각 1)과 2)에서 만든 파일에 넣는다.





3) 데이터베이스 연결 파일 생성

  • config 패키지에 DB.java 파일 생성
  • DB.java 파일에는 code example 에 있는 코드(오라클 예제)를 넣는다.

의문1:
DB.java 파일의 getConnection()함수를 이용해 database를 연결하려는데, 왜 이 함수는 static이어야 할까?

의문2: context.xml의 역할




4) 프로젝트에 mysql 드라이버 추가

  • mvnrepository 사이트에 가서 mysql connector라는 mysql 드라이버(.jar파일)를 다운 받아서 프로젝트의 WEB-INF/lib 파일에 넣는다.

jar파일 다운&빌드패스 설정보다 좋은 maven 또는 gradle
jar파일을 다운받아서 파일에 추가하는 방식보다 maven 또는 gradle 처럼 문서에 xml방식으로 적어놓고 프로젝트 내부에서 다운받고, 빌드까지 해주는 방식으로 하는 것이 더 좋다. 의존성 관리하기에도 좋다.



5) dbtest.jsp 파일을 생성해서 테스트

dbtest.jsp 파일의 위치: web.xml 파일을 읽어야 하므로 web.xml 파일의 상위 혹은 같은 계층에서 파일을 생성해야 한다.
<% DB.getConnection(); %> 의 코드를 통해 DB연결이 성공했는지 test해본다.






코드

WEB-INF/web.xml

<?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>




META-INF/context.xml

<?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>




config/DB.java

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;
	}
}




webapp/test/dbtest.jsp

<%@page import="com.cos.blog.config.DB"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	DB.getConnection();
%>
profile
개발자

0개의 댓글