[SPRING] :: MVC 패턴 (약식)

[SPRING] :: MVC 패턴 (약식)

[예시] :: MVC 패턴 (약식) # 1 SRC/MAIN/RESOURCE 에 CONFIG.SPRING.CONTEXT 패키지 생성 :: ROOT-CONTEXT.XML 의 기능 관리

# 2 SRC/MAIN/WEBAPP/WEB-INF/SPRING 경로에 있는 ROOT-CONTEXT.XML 복사한뒤 # 1의 위치에 저장 :: 복사한 ROOT-CONTEXT.XML를 해당 위치에 3번 저장한 뒤 사진의 각각의 명칭으로 변경 # 3 WEB.XML 에 FILTER 태그의 인코딩 타입 지정 :: FILTER 태그로 인코딩 타입 지정 # 4 WEB.XML의 CONTEXT 감지 경로 변경

:: 약식에서는 ROOT-CONTEXT를 분리하여 크게 DATASOURCE / MYBATIS / DAO 로 구분하여 사용한다. :: 각각의 CONTEXT가 1부터 순차적으로 동작하도록 CONTEXT-PARAM 태그 변경

# 5 SRC/MAIN/RESOURCE 경로에 CONFIG.SPRING.MVC 패키지 생성 :: SERVLET-CONTEXT의 기능 관리 :: SRC/MAIN/WEBAPP/WEB-INF/SPRING/APPSERVLET 경로의 SERVLET-CONTEXT.XML 복사하여 # 5 의 위치에 붙여넣기

​​# 6 WEB.XML에서 SERVLET-CONTEXT의 동작 경로 지정 :: PARAM-VALUE 태그의 CLASSPATH 변경

[참고] :: WEB.XML이 동작하며 CONTEXT-숫자가 순차적으로 동작하며 SERVLET-CONTEXT.XML이 동작한다. # WEB.XML encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding utf-8 encodingFilter *.do contextConfigLocation classpath*:config/spring/context/context-*.xml org.springframework.web.context.ContextLoaderListener appServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:config/spring/mvc/servlet-context.xml 1 appServlet / # 7 OJDBC6.JAR 저장 :: OJDBC6.JAR를 TOMCAT > LIB 폴더에 저장

​ # 8 SRC/MAIN/RESOURCE 의 경로에 CONFIG 패키지 및 하위 생성 CONFIG.MYBATIS :: DB.PROPERTIES 는 DB의 환경설정의 정보를 담는다. :: MYBATIS-CONFIG는 맵퍼의 관리 정보를 담는다.

[참고] :: 최종적으로는 아래 사진처럼 관리한다.

# 9 DB.PROPERTIES 작성​ :: DB에 접근하기위한 기본 세팅이 저장된 참조파일 :: ORACLE 서버 계정과 비밀번호를 입력한다.

​# 10 MAVEN LIBRARY 다운로드 :: HTTP://MVNREPOSITORY.COM :: MAVEN 기반의 프로젝트의 라이브러리를 온라인 다운로드가 가능한 사이트 :: COMMONS DBCP 검색 후 원하는 버젼 선택하여 사진의 영역 복사

# 11 POM .XML 에 저장 :: 라이브러리를 저장하는 설정 파일 :: 저장 순간부터 인터넷으로 다운로드하므로 인터넷이 안되는 경우 다운로드가 안된다.

​# 12 CONTEXT-1-DATASOURCE에서 DB.PROPERTIES 참조 :: CONTEXT:PROPERTY-PLACEHOLDER의 LOACTION속성으로 DB.PROPERTIES를 지정 :: DBCP의 클래스 객체 생성을 통하여 빈객체 생성

# 13 MYBATIS 라이브러리 MAVEN 사이트에서 복사 후 POM.XML에 추가 :: MYBATIS, MYBATIS-SPRING, SPRING-JDBC

[참고] :: 너무 최신은 호환이 되지않은 경우가 있으므로 약간 낮은 버젼이 안정성이 더 좋다.

​# 14 CONTEXT-2-MYBATIS에서 DATASOURCE 객체와 MYBATIS-CONFIG의 MAPPER정보 참조 MYBATIS-CONFIG.XML :: 어떠한 맵퍼를 사용할 것이며, 어떠한 명칭으로 사용할 것인지를 지정하는 설정 참조파일

CONTEXT-2-MYBATIS.XML :: DB 연결정보를 가지고있는 DS객체(CONTEXT-1-DATASOURCE)를 참조한다.

[참고] :: 다른 프로젝트를 진행하더라도 DB와 MYBATIS는 (CONTEXT1,2) 따로 큰 수정이 필요없다.

# 13 TABLE 준비 TYPE DEPT TABLE CREATE TABLE DEPT(

DEPTNO NUMBER(3) PRIMARY KEY,

DNAME VARCHAR2(10),

LOC VARCHAR2(10)

);

# 15 DEPTVO.JAVA 생성 :: DB컬럼의 명칭과 VO객체의 변수명칭은 같아야한다.

package vo; public class DeptVO { // DB컬럼이름과 VO의 변수 이름은 무조건 일치해야한다. private int deptno; private String dname, loc; public int getDeptno() { return deptno; } public void setDeptno(int deptno) { this.deptno = deptno; } public String getDname() { return dname; } public void setDname(String dname) { this.dname = dname; } public String getLoc() { return loc; } public void setLoc(String loc) { this.loc = loc; } }

# 16 DEPTDAO.JAVA 생성 :: DAO는 맵퍼를 호출하는 역할 :: DAO에서 SQLSESSION 객체를 받아주도록 셋터 인젝션 생성 SQLSESSION.DML메소드("XML의 NAMESPACE명칭.XML의 쿼리문 ID", 파라미터); :: SQLSSEION은 위의 형태로 쿼리 ID와 파라미터를 명시한다. :: 파라미터는 SELECT문에서는 사용하지 않는다. package dao; import java.util.List; import org.apache.ibatis.session.SqlSession; import vo.DeptVO; public class DeptDAO { // DB정보와 MYBATIS정보가 담겨있는 SQLSESSION을 받아줄 수 있는 객체 생성 // (이 상태에서는 받아주는 셋터나 생성자가 없으므로 NULL이다.) SqlSession sqlSession; // SQLSESSION에 객체에 파라미터를 보내줘서 SQLSESSION객체에 주소를 받아 줄 수 있도록 셋터 추가 // (셋터, 생성자로 받게되는 순간 NULL이 아니게 된다.) public void setSqlSession(SqlSession sqlSession) { this.sqlSession = sqlSession; } // CONTEXT-3-DAO에서 연결되면 이 DAO는 컨트롤러에서 가져다 사용하는 것이 가능하다. // 부서 목록 가져오기 // SELECTLIST는 컨트롤러에서 요청하는 SELECTLIST와 같아야한다. public List selectList(){ // SQLSESSION.DML메소드("XML의 NAMESPACE명칭.쿼리ID명",파라미터) // 파라미터는 단 한가지의 값만 저장할 수 있으므로 여러 값인 경우 HASHMAP등을 사용한다. // SQLSESSION은 FACTORY의 정보까지 다 잡은 상태로 맵퍼를 바로 호출하는 것이 가능하다. List list = sqlSession.selectList("dept.dept_list"); // JSP와 달리 자동으로 SQLSESSION을 닫으므로 따로 CLOSE가 필요없다. return list; } }

​# 17 CONTEXT-3-DAO 작성 :: DAO의 객체를 생성하는 빈 객체 생성 CONTEXT-3-DAO.XML

# 18 컨트롤러 생성 DEPTCONTROLLER.JAVA :: DEPT_DAO를 사용할 수 있도록 DEPT_DAO를 받아주는 DEPT_DAO 객체 생성과 셋터 인젝션 생성

package controller; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import dao.DeptDAO; import vo.DeptVO; @Controller public class DeptController { // public static final String VIEW_PATH = "/WEB-INF/views/dept/"; // 컨트롤러에서 DAO를 가져다 사용할 수 있도록 DAO객체를 받아줄 DEPT_DAO 객체 생성 DeptDAO dept_dao; // 생성자 인젝션 // 생성자 인젝션을 통해서 파리미터로 DEPT_DAO를 받아서 DAO객체의 SQLSESSION객체의 정보를 통해서 CRUD를 진행 // (SERVLET-CONTEXT에서 객체 생성으로 받아주기전까지는 NULL상태) public DeptController(DeptDAO dept_dao) { this.dept_dao = dept_dao; } // 부서 목록 조회 // VALUE는 맵핑 주소가 뒤에 아무것도 없는 "/"이거나 "LIST.DO"의 주소일 경우 동작하게 만든다. // MAIN페이지등을 할 때 VALUE값으로 /을 추가한다. @RequestMapping(value={"/","list.do"}) public String list(Model model) { // 컨트롤러에게 LIST.DO를 요청한 경우 DB에 접근한 뒤 RETURN JSP으로 보내줘야한다. // DEPT_DAO는 컨트롤러에서 이미 생성자로 받아 싱글톤으로 실행했기에 따로 GETINSTANCE할 필요가 없다. // DEPT_DAO의 SELECTLIST를 작성한 뒤, DAO에서 해당 메소드를 실행하는 SELECTLIST를 작성해줘야한다. List list = dept_dao.selectList(); model.addAttribute("list",list); return VIEW_PATH + "dept_list.jsp"; } }

​# 19 SERVLET-CONTEXT에서 CONTROLLER 빈 객체 생성 SERVLET-CONTEXT.XML

# DEPT.XML 쿼리문 작성 :: RESULTTYPE은 SQL문장 동작시 결과의 자료형을 뜻한다. :: PARAMETERTYPE은 SQL문장 동작시 파라미터의 값의 자료형을 뜻한다. select * from dept # 21 DEPT_lIST.JSP 작성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> Insert title here ::부서 목록:: 부서번호 부서명 부서위치 ${ vo.deptno } ${ vo.dname } ${ vo.loc }

from http://hikr90.tistory.com/151 by ccl(A) rewrite - 2022-01-01 02:28:01