원문 : coding-factory.tistory.com/71

 

[Jsp] MVC 패턴 게시판

저번 포스팅 MVC2 패턴으로 만드는 회원가입 및 로그인에 이어서 이번에는 MVC2 패턴으로 만드는 게시판을 공부해보겠습니다. 회원가입 , 로그인 기능과 마찬가지로 게시판도 어느 웹사이트에서

coding-factory.tistory.com

위 원문을 보고 Mysql로 한번 작성해보았고 나름대로 MVC 패턴을 정리하고자 함

 

ㅁ 테이블 생성

--테이블 생성
CREATE TABLE work.BOARD
(
BOARD_NUM		int(10)	 NOT NULL
,BOARD_NAME		varchar(20)	 NULL
,BOARD_PASS		varchar(15)	 NULL
,BOARD_SUBJECT		varchar(50)	 NOT NULL
,BOARD_CONTENT		text(65535)	 NULL
,BOARD_FILE		varchar(50)	 NULL
,BOARD_RE_REF		int(10)	 NULL
,BOARD_RE_LEV		int(10)	 NULL
,BOARD_RE_SEQ		int(10)	 NULL
,BOARD_READCOUNT		int(10)	 NULL
,BOARD_DATE		date	 NOT NULL
);

--PK설정
alter table work.BOARD add primary key(BOARD_NUM);

--테이블 설명
ALTER TABLE work.BOARD COMMENT = 'MVC게시판'; 

--컬럼 comment
ALTER TABLE work.BOARD MODIFY BOARD_NUM	 int(10)	 COMMENT '일련번호' 	 NOT NULL;
ALTER TABLE work.BOARD MODIFY BOARD_NAME	 varchar(20)	 COMMENT '작성자' 	 NULL;
ALTER TABLE work.BOARD MODIFY BOARD_PASS	 varchar(15)	 COMMENT '패스워드' 	 NULL;
ALTER TABLE work.BOARD MODIFY BOARD_SUBJECT	 varchar(50)	 COMMENT '제목' 	 NOT NULL;
ALTER TABLE work.BOARD MODIFY BOARD_CONTENT	 text(65535)	 COMMENT '내용' 	 NULL;
ALTER TABLE work.BOARD MODIFY BOARD_FILE	 varchar(50)	 COMMENT '파일명' 	 NULL;
ALTER TABLE work.BOARD MODIFY BOARD_RE_REF	 int(10)	 COMMENT '원문일련번호' 	 NULL;
ALTER TABLE work.BOARD MODIFY BOARD_RE_LEV	 int(10)	 COMMENT '레벨' 	 NULL;
ALTER TABLE work.BOARD MODIFY BOARD_RE_SEQ	 int(10)	 COMMENT '순서' 	 NULL;
ALTER TABLE work.BOARD MODIFY BOARD_READCOUNT	 int(10)	 COMMENT '조회건수' 	 NULL;
ALTER TABLE work.BOARD MODIFY BOARD_DATE	 date	 COMMENT '작성일자' 	 NOT NULL;

 

ㅁ DB연동하기 -JNDI,DBCP(커넥션풀) 이용 

더보기

▶ JNDI(Java Naming and Diectory Interface)  

    디렉토릭 서비스에서 제공하는 데이터 및 객체를 발견하고 참고(lookup)하기 위한 자바 API

DBCP(DataBase Connection Pool, 커넥션 풀)

    데이터베이스와 연결된 커넥션을 미리 만들어 저장하고 필요할때 저장된 공간에서 가져다 쓰는 기법

 ※ 사전작업

    WebContent\WEB-INF\lib에  해당 드라이버 mysql-connector-java-5.1.28-bin.jar 넣음

    tomcat-dbcp.jar 

 

 1) context.xml과 web.xml을 이용한 연결

  1-1) DBCP 정보설정

          context.xml 파일에 Context 태그 아래 Resource를 추가

 <Context> 
   <Resource 
	maxWait="-1" 
	maxIdle="10" 
	maxActive="20" 
	username="[아이디]" 
	password="[패스워드]" 
	url="jdbc:mysql://[ip]:3307/work" 
	type="javax.sql.DataSource" 
	driverClassName="com.mysql.jdbc.Driver" 
	auth="Container" 
	name="jdbc/MyBoard1"/> 
<!--
    auth : 컨테이너를 자원 관리자로 기술
    name : JDBC이름, 변경 가능
    driverClassName : JDBC 드라이버
    type : 웹에서 이 리소스를 사용할 때 DataSource로 리턴됨
    username : 접속계정
    password : 접속할 계정 비밀번호
    
    loginTimeout : 연결 끊어지는 시간
    maxActive : 최대 연결 가능한 Connection수 (기본 20개)
    maxIdle : Connection pool 유지를 위해 최대 대기 connection 숫자
    maxWait : 사용 가능한 커넥션이 없을 때 커넥션 회수를 기다리는 시간 (1000 = 1초)
    testOnBorrow : db에 test를 해볼 것인지
-->
    
 </Context>

    1-2) JNDI 리소스 사용설정

          WebContent\WEB-INF\에 web.xml 추가

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 	
	
	<servlet>
		<servlet-name>BoardController</servlet-name>
		<servlet-class>
		com.board.dicws.action.BoardController</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>BoardController</servlet-name>
		<url-pattern>*.bo</url-pattern>
	</servlet-mapping>

	<display-name>
	MyBoard1</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	
	<resource-ref>
		<description>Connection</description>
		<res-ref-name>jdbc/MyBoard1</res-ref-name>
		<res-type>javax.sql.DataSource</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>
</web-app>

   ▶ JSP 연결테스트

   WebContent\test.jsp 만들고 실행 

<%@ page import="javax.naming.*, javax.sql.*, java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
		Connection con = null;
		PreparedStatement stmt = null;

		Context initCtx = new InitialContext();
		Context envCtx = (Context) initCtx.lookup("java:comp/env");
		//resource명과 res-ref-name과 일치하는 이름
		DataSource ds = (DataSource) envCtx.lookup("jdbc/MyBoard1");
		con = ds.getConnection();

		String msg = "disconnection";

		if (con != null) {

			msg = "connection";

		}
%>		
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>
	Results =
	<%=msg%></h2>

</body>
</html>

   ▶ 자바사용

package com.board.dicws.lib;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class DBConnection {
	
	public static Connection getConnection() throws SQLException, NamingException, ClassNotFoundException {
		Context initCtx = new InitialContext();

		// initCtx의 lookup메서드를 이용해서 "java:comp/env" 에 해당하는 객체를 찾아서 evnCtx에 삽입
		Context envCtx = (Context) initCtx.lookup("java:comp/env");

		// envCtx의 lookup메서드를 이용해서 "jdbc/MyBoard1"에 해당하는 객체를 찾아서 ds에 삽입
		DataSource ds = (DataSource) envCtx.lookup("jdbc/MyBoard1");

		// getConnection메서드를 이용해서 커넥션 풀로 부터 커넥션 객체를 얻어내어 conn변수에 저장
		Connection conn = ds.getConnection();
		return conn;

		/*
		 * 위의 코드를 아래와 같이 줄여서 작성 가능하다. Context context = new InitialContext(); DataSource
		 * dataSource = (DataSource) context.lookup("java:comp/env/jdbc/oracle");
		 * Connection con = dataSource.getConnection();
		 * 
		 */
	}
}

 2) server.xml과 context.xml을 이용한 연결

    1-1) DBCP 정보설정

          server.xml 편집 : GlobalNamingResources 테그에 Resource 추가

  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
   <Resource 
	maxWait="-1" 
	maxIdle="10" 
	maxActive="20" 
	username="[아이디]" 
	password="[패스워드]" 
	url="jdbc:mysql://[ip]:3307/work" 
	type="javax.sql.DataSource" 
	driverClassName="com.mysql.jdbc.Driver" 
	auth="Container" 
	name="jdbc/MyBoard1"/> 
<!--
    auth : 컨테이너를 자원 관리자로 기술
    name : JDBC이름, 변경 가능
    driverClassName : JDBC 드라이버
    type : 웹에서 이 리소스를 사용할 때 DataSource로 리턴됨
    username : 접속계정
    password : 접속할 계정 비밀번호
    
    loginTimeout : 연결 끊어지는 시간
    maxActive : 최대 연결 가능한 Connection수 (기본 20개)
    maxIdle : Connection pool 유지를 위해 최대 대기 connection 숫자
    maxWait : 사용 가능한 커넥션이 없을 때 커넥션 회수를 기다리는 시간 (1000 = 1초)
    testOnBorrow : db에 test를 해볼 것인지
-->

  </GlobalNamingResources>

   context.xml 편집 

 

 <Context> 
    <ResourceLink global="jdbc/MyBoard1" name="jdbc/MyBoard1" type="javax.sql.DataSource"/>
 </Context>

 

'IT > 기타 프로그램' 카테고리의 다른 글

[Tomcat] 구조 및 개념정리  (0) 2020.12.13
[Tomcat] 설치 및 환경설정  (0) 2020.12.13

+ Recent posts