스프링 프로젝트에 MariaDB 와 Mybatis를 연동 후 테스트 까지 해보겠습니다.

테스트 진행은 Maria DB의 테이블 및 테스트 칼럼이 샘플이 존재해야 합니다.

* 저는 testdb 테이블에 age 란 int형 칼럼이 존재 합니다.


첫 번째로, pom.xml 에 아래 dependency를 복사 및 붙여넣기 하세요.


*Mysql 과 Maria DB의 차이 ↓

http://gabrielyj.tistory.com/119?category=732269


		
		
			org.mariadb.jdbc
			mariadb-java-client
			1.1.7
		

		
		
			org.mybatis
			mybatis
			3.3.1
		

		
		
			org.mybatis
			mybatis-spring
			1.2.4
		

		
		
			org.springframework
			spring-jdbc
			${org.springframework-version}
		



그 다음 WEB-INF폴더 -> spring폴더 -> root-context.xml 파일을 열어준뒤,

Namespace 메뉴를 클릭합니다.

(아래를 참고하고 aop, context, jdbc, mybatis-spring을 추가해주세요)






Namespaces에서 추가가 완료되면,

아래 내용을 root-context.xml 에 추가 해주세요.

url 의 jdbc:mysql:// 이후로는 사용하시는 IP와 포트 번호를 입력 해주시고,

username 과 password 는 각각 ID와 PW를 입력 해주시면 됩니다.

* 로컬 DB를 사용하시는분은 (jdbc:mysql://localhost:8080/DB이름) 을 입력 하시면 됩니다. 

* 혹시 localhost 인데 포트번호가 8080 아니면 해당되는 포트번호를 꼭 입력 하셔야 합니다.



   
   
      
      
      
      
      
   

   
   
  



그 다음 Java Resources 폴더-> src/main/resources 폴더 내부에

mappers 패키지 생성 후 그 안에 testMapper.xml 을 생성하고,

그 외부에 mybatis-config.xml 파일을 추가로 생성합니다.






testMapper.xml (DB 쿼리문을 작성하는 부분입니다.)








	


mybatis-config.xml (이 부분은 테스트 하는 동안 수정할 필요 없습니다.입력만 잘해주세요.)










그 다음 추가로 Java Resources 폴더-> src/main/resources 폴더 내부에

mybatisUtil 이란 패키지를 생성하고,

인터페이스 TService 와 클래스 TServiceImpl를 생성해줍니다.

이 부분은 컨트롤러와 mapper 사이를 연결해주는 부분입니다.


SqlSession을 Inject 해주고,

namespace 에는 *Mapper.xml 내에서 사용하는 이름과 똑같아야 합니다.




인터페이스 TService (in mybatisUtil package)

package mybatisUtil;
public interface TService {
	public int test();
}


클래스 TServiceImpl (in mybatisUtil package)

package mybatisUtil; import javax.inject.Inject; import org.apache.ibatis.session.SqlSession; import org.springframework.stereotype.Service; @Service public class TServiceImpl implements TService { @Inject private SqlSession sqlSession; private static final String namespace = "my.mappers.testMapper"; @Override public int test() { return sqlSession.selectOne(namespace + ".selectTest"); } }




이제 다시 root-context.xml 로 돌아가서 아까 입력 안한 2, 3번째 부분을 완성니다.

주의할 점은, mapperLocations 부분 부터

Mapper, Service, ServiceImpl 이 일치하지 않으면, 404에러 발생합니다.

404에러가 발생하면 꼭 *Mapper.xml 부터 절차적으로 확인 해보세요!




   
   
      
      
      
   

   
   

      
   

   




이렇게 DB연동 작업은 끝났습니다.

마지막으로 controller 에서 실행을 하면 됩니다.


Service 부분을 @Autowired 어노태이션을 입력 하여 TService 를 등록 해주시고,

ModelAndView형 메소드를 만들어 그 안에 test() 메소드를 실행 해줍니다.

*저는 바로 int 형으로 반환을 받고 뿌려주기 위해 int 형으로 선언 하였습니다.

그리고 addObject 메소드를 이용하여 mav 객체에 담아주고,

setViewName 메소드를 이용해 호출되는 페이지명도 담아줍니다.

* test.jsp 를 불러올것이기 때문에 test를 담았습니다.




package controller;

import javax.servlet.ServletException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import mybatisUtil.TService;

@Controller
public class TestController {
	
	@Autowired
	private TService tDAO;
	
	@RequestMapping(value = "/test.do")
	public ModelAndView portList(ModelAndView mav) throws ServletException {
		
		int test = tDAO.test();
		
		mav.addObject("test", test);
		mav.setViewName("test");
		return mav;
	}
}



마지막으로 아래를 참고하여 test.jsp 를 생성해줍니다.

그 다음 EL문을 이용하여 ${test}를 입력 합니다

* 위에서 addObject 할 때 이름을 'test'로 했기 때문에 ${test}


그리고 !!!


http://localhost:8080/프로젝트명/test.do   <- 접속하세요

이 부분이 말끔히 실행되려면, servlet-context.xml 부분의

preffix="/" suffix=".jsp" 입니다.

그래서 위에 setViewName 으로 넘어온 test가 /test.jsp 가 됩니다.


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>




Insert title here


	${test}






최종 결과 : 저는 DB에 입력된 age 값이 '10' 이였습니다.

 






처음 스프링을 공부 했을때, 왜 home.jsp가 실행되지 않는지 이해를 못 했습니다.

근데 사실 아주 간단하지 않은 간단한 구조를 갖고 있었습니다.


home.jsp 에서 바로 실행을 하게 되면 아래와 같이 404 에러가 발생 합니다.

왜냐하면, WEB-INF는 보안의 이유때문에 직접 접근이 불가능 합니다.

해당 폴더에는 프로젝트의 환경 설정을 해주는 중요한 파일들이 존재하게 됩니다.


예를들어, DB 를 사용한다면 WEB-INF폴더에  저장된 DB의 ID, PW가

적나라게 드러나기 때문입니다.






그렇다면 어떻게 접근 해야 할까요?

스프링 프로젝트의 기본 home.jsp 작동 원리를 이해 하시려면,

밑의 프로젝트 구조를 알아야 합니다.







webapp 의 WEB-INF 폴더 안에는 web.xml 이란 파일이 존재합니다.

*web.xml 은 프로젝트의 환경 설정을 해주는 파일

프로젝트가 실행되면 web.xml 이 가장 먼저 실행되고, 그 다음 

DispatcherServlet이 해당 프로젝트로 들어오는 요청들을 낚아채고 핸들링 해줍니다.

그 낚아챈 요청들은 servlet-context.xml로 보내주게 됩니다.






그렇게 요청을 받은 servlet-context.xml 은

① : <annotation-driven /> 란 태그를 사용하여 @(어노태이션)을 사용할 수 있고,

그 어노태이션의 사용 위치는(패키지명:Home_Test)

② : <context:component-scan base-package="aaa.bbb.(패키지명)" />

해당 패키지명 내부의 클래스들입니다.(클래스명:HomeController.java)









@RequestMapping의 value가 "/" 인데 이것의 의미는 프로젝트명 이후에

아무런 주소없이 실행을 시키면 해당 메소드를 실행 시키라는 뜻입니다.

addAttribute는 model객체에 "serverTime"이란 이름으로 현재 시간을 담은것이고,

return "home"은 위의 servlet-context.xml에서 설정한

preffix와 suffix를 앞 뒤에 붙여준다는 뜻입니다.



즉!!! http://localhost:8080/Home_Test/ 이렇게 주소창에 실행을 시키면


1. web.xml 실행 후 servelt-context 가 요청 낚아챔


2. servlet-context에서 어노태이션의 사용 여부 및 위치를 확인 후 값 전달

* /Home_Test/ 라서 "/"요놈만 넘어가는 중입니다,

  ex) Home_Test/home.jsp 라면 home.jsp 가 넘어갑니다.


3. Homecontroller의 @Controller가 확인되며, mapping 값인 "/"인 home 메소드가 실행

* return 값 "home"은 다시 servlet-context.xml 로 넘어갑니다.


4. servlet-context.xml 이 return 값 'home'에 preffix와 suffix를 붙여 줌

* preffix(/WEB-INF/views) + home + suffix(.jsp) = /WEB-INF/views/home.jsp


5. home.jsp 가 실행됨

* 실제론 (http://localhost:8080/Home_Test/WEB-INF/views/home.jsp) 가 실행 됩니다.





Can not find the tag library descriptor for "http://  java.sun.com/jsp/jstl/core"


이런 에러가 발생한다면, 우선 pom.xml 로 가서 'javax.servlet' 부분을 확인 하세요


<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jstl</artifactId>

<version>1.2</version>

</dependency>


하지만 해당 부분이 별 문제가 없다면, Project를 clean 해보세요

* 상단 메뉴 -> Project -> Clean -> All projects or 해당 프로젝트 선택 후 'OK'


그래도 안 되신다면, 

Maven 저장 경로에서 pom.xml에 등록된 jstl의 jar파일이 있는지 확인 해주세요.

만약 없으면 Maven 업데이트를 해주면 자동으로 다시 설치 됩니다.

* 프로젝트 폴더 -> 우클릭 -> Maven -> Update Project


보통 pom.xml을 잘 못 만지거나, 아무런 이유 없이 발생 하더군요...

아무런 이유가 없다면 첫 번째 방법을 써보시고,

아니라면 두 번째 방법을 써보세요 :-)


java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException

에러는 pom.xml 이나 web.xml 잘 못 건드렸을떄, 또는 아무런 이유없이... 발생 됩니다.

(세개 모두 직접 겪어 봤습니다ㅠㅠ)


이 에러를 해결하기 위해서 이 방법들을 사용했습니다.

이 순서로 한 번 진행 해보세요




1. 프로젝트를 clean 해줍니다.

   * 상단 메뉴 -> 'Project' -> 'Clean' -> All projects or 해당 프로젝트 선택


2. Tomcat server를 Clean

   * Server 의 동작을 원하는 서버를 선택 후 우클릭 하시면 clean 메뉴가 있습니다.


3. 현재 사용중이 Tomcat 폴더의 servlet-api.jar을 사용중인 jdk lib에 붙여넣습니다.

   * 


4. Maven Repository의 javax servlet를 삭제 후 업데이트 합니다.


5. Maven Repository의 모든 폴더 삭제 후 업데이트 합니다. 

   * 프로젝트 -> 우클릭 -> Maven -> Update Project


6. javax.servlet-api 버젼을 3.1.0 으로 설정

   * pom.xml 에서 해당 dependency  에서 설정 해주면 됩니다.


7. 톰캣 폴더를 통째로 삭제 후 재설치




저는 이 방법을 사용 했을때 다행이도 해결이 되었습니다.

다른 분들도 꼭 해결 하시길... 바랍니다 :-)







첫 번째 파일 : web.xml (WEB-INF폴더)

--  WEB-INF 폴더에 'config'란 폴더 생성 후 'presentation-layerbiz.xml' 파일 생성

--  서버 시작될 때, 해당 위치에 있는 context파일을 모조리 읽어들이는 것을 뜻합니다.

     이 경로 안에 파일이 오류나면 서버 실행시 404 에러가 발생합니다.

--  중간의 characterEncoding 은 한글 인코딩을 위해 사용합니다.

--  servlet-name. class, url-pattern 에 오타 없는지 꼭 확인 해야 합니다.

     이 부분은 컨트롤러를 위해 사용 됩니다.




	
 	
		ex(main.do or index.jsp)
		



	
		contextConfigLocation
		/WEB-INF/spring/root-context.xml
	
	
	
		org.springframework.web.context.ContextLoaderListener
	

	
	
		characterEncoding
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
	
	
		characterEncoding
		*.do
	


	
	
		action
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			
			/WEB-INF/config/presentation-layerbiz.xml
		
	
		
	
		action
		*.do
	






두 번째 파일 : root-context.xml(WEB-INF -> spring 폴더)

--  DB를 연동 할 때 사용함. 중간중간 DB 및 서버 정보는 사용자에 맞게 입력해야합니다.

--  3 번째 단락의 component-scan은 Service 와 Implement 가 저장된 패키지명으로 해야됩니다.




	
   
   
      
      
      
      
      
   

   
   
      
      
      
   

   
   

      
   

   

   





세 번째 파일 : presentation-layerbix.xml

--  component-scan 의 base-package 부분은 controller 를 저장한 패키지 이름으로 해야합니다.



xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan r />xmlns:context="http://www.springframework.org/schema/context" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		"http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
  
    
   
   
      
         
   




04번에 이어 Mybatis 까지 설정하고, 테스트 해보는 부분입니다.

<MariaDB 7가지의 테이블과 필드가 존재한다는 가정하에 진행합니다>


우선 pom.xml 에 부분에 해당 dependency 를 추가 해줍니다.

그러면 자동으로 라이브러리를 추가 해줍니다.

 

                 
		
			org.mybatis
			mybatis
			3.3.1
		

		
		
			org.mybatis
			mybatis-spring
			1.2.4
		

		
		
			org.springframework
			spring-jdbc
			${org.springframework-version}
		

		
			org.springframework
			spring-test
			${org.springframework-version}
		

 

 그리고 Mybatis 의 Dependency 도 추가 해줍니다.



 

   

** 환영합니다 !!! _ MVC_Member Test **

[ memberList ]



	

** memberList [MVC_model2] **

id pw name email phoneNumber joinDate userLevel
${member.id} ${member.pw} ${member.name} ${member.email} ${member.phoneNumber} ${member.joinDate} ${member.userLevel}








2019년 3월에 새롭게 스프링 프로젝트 생성, 초기설정을 포스팅 하였습니다.

훨씬 더 자세하게 설명 되어 있습니다. 아래 링크를 참고 해주세요 :)

https://gabrielyj.tistory.com/166?category=735500













프로젝트 우클릭 → Properties → Project Facets →  Java 버젼 설정 및 Runtime 서버 등록.







pom.xml 에서 원하는 내용 및 등록 해줌

프로젝트 생성 직후에는 자바 버젼 및 스프링 프레임 워크 버젼만 설정해줘도 괜찮아요


	
		1.8
		4.2.4.RELEASE
		1.6.10
		1.6.6
	



막 프로젝트가 완성 되었다면 이정도 설정으로 충분하고,

다음 Mybatis 떄부터 복잡하고 중요해집니다ㅜㅜ






	
 	
		index.jsp
		


 	
	
		contextConfigLocation
		/WEB-INF/spring/root-context.xml
	
	
	
		org.springframework.web.context.ContextLoaderListener
	

	
	
		characterEncoding
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
	
	
		characterEncoding
		*.do
	


	
	
		action
		org.springframework.web.servlet.DispatcherServlet
		
			contextConfigLocation
			
			/WEB-INF/config/presentation-layerbiz.xml
		
	
		
	
		action
		*.do
	








src/main/java

자바 클래스(Controller, DAO, VO 등)


src/main/resources

자바 클래스들이 사용될 각종 맵퍼(config.xml, mapper 등) 와 설정 파일


src/test/java, src/test/resources

테스트 영역






Maven Dependencies

Pom.xml 에 등록된 Dependency 라이브러리들이 다운로드가 완료되면 표시됨






src/main/webapp/resources: js, css, images 등을 정리해 놓는 곳


src/main/webapp/WEB-INF/spring/root-context.xml

src/main/webapp/WEB-INF/spring/appServllet/servlet-context.xml : 

스프링 프로젝트 설정 파일(공통빈을 설정하는 영역)


src/main/webapp/WEB-INF/view : view말 그대로 jsp,html 영역

(하지만 views 폴더 삭제 후 webapp 에서 웹 페이지 파일을 사용하는 경우도 많음)


src/main/webapp/WEB-INF/web.xml 

배포서술자(Deployment Descriptor) 라고 하며, 해당 파일내에 정의된 설정 내용을 구성해줌


pom.xml

Dependency 를 설정 해줌으로써 의존성관리와 배포를 가능한게 해줌





2019년 3월에 새롭게 스프링 프로젝트 생성, 초기설정을 포스팅 하였습니다.

훨씬 더 자세하게 설명 되어 있습니다. 아래 링크를 참고 해주세요 :)

https://gabrielyj.tistory.com/166?category=735500
















1. 프로젝트를 생성 합니다.

메뉴바 →File → New → Other(Spring Legacy Project)









2. 프로젝트 이름을 설정한다음 (저는 Test001)

Spring MVC Project를 선택 해줍니다.

MVC2 모델을 만들어 주기 위한 기본적인 프로젝트 구조 입니다.







3. 패키지 이름을 정해주는 부분인데, 유의할 부분이 있습니다.

일단 테스트 형식으로 aaa.bbb.Test001을 하였는데,

왜 bbb다음 ccc가 아닌지 궁금하신 분들도 계실것 같습니다.


저 ccc는 서버의 경로를 지정해주는 부분입니다.

만약 ccc로 해주면 프로젝트 이름은Test001 인데 ccc를 참고하기 때문에

서버 실행시 404 에러가 뜨게 됩니다.

그래서 해당 부분을 프로젝트 이름과 같이 해주는것이 좋습니다.


처음 만들때는 잘 몰라서 그냥 aaa.bbb.프로젝트 이름으로 만들었습니다.

하지만 이 부분은 자신이 맘에는 패키지 구조에 맞게 가져가면 될것 같습니다.


지금 보니 왜 이렇게 네이밍을 했는지 모르겠지만... 민망하네요... 울트라 병아리시절 ㅜㅜ

현재 저는  com.frontend.controller 같이 네이밍을 하고 있습니다.





↓↓ 톰캣의 server.xml을 보면 확인이 가능합니다. ↓↓






상단 메뉴바에서 Help → Eclipse Marketplace  → 검색창에 'STS' 검색.


Spring Tools(aka Spting IDE and Spring Tool Suite) 3.9.2 RELEASE를 

설치하시면 됩니다. 버전은 항상 업데이트 되니 너무 신경쓰지 마세요!


저는 이미 다운이 완료 되어있으므로 'Installed'입니다.




+ Recent posts