원문 : 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 |