프로젝트 생성
1. Spring Legacy Project > Spring MVC Project 선택하여 생성
2. 프로젝트 버전 설정
프로젝트 선택 + 우클릭
properties
+java compiler -> Build Path -> 11로
+Project Facets -> Java version 11로
3. 프로젝트/pom.xml 아래와 같이 변경.
<properties>
<java-version>1.6</java-version>
<org.springframework-version>3.1.1.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
부분 찾아서 아래처럼 수정
>>>>>>>>>>
<properties>
<java-version>11</java-version> <<<<<<<<< 11
<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
<<<<<< 5.0.7
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
4. 프로젝트/pom.xml 아래와 같이 변경.
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
부분 찾아서 아래처럼 수정
>>>>>>>>>>
<!-- Servlet 111p-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId> <<<<< javax.servlet-api
<version>3.1.0</version> <<<<<<< 3.1.0
<scope>provided</scope>
</dependency>
5. 프로젝트/pom.xml 아래와 같이 변경.--------------------
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
부분 찾아서 아래처럼 수정
>>>>>>>>>>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>11</source> <<<<<<<< 11
<target>11</target> <<<<<<<< 11
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
6. 그 외 모듈
https://mvnrepository.com/ 에서 각종 모듈 추가
<!-- Add My Module ====================== -->
아래
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
<scope>test</scope>
</dependency>
...
이렇게 추가
spring-test
lombok
mybatis
spring-ibatis
ojdbc8
spring-jdbc
dbcp
HikariCP
등 검색해서 추가.
이렇게 수정하고 저장하면 자동 빌드
7. 프로젝트 선택 > Maven > Upadate Project 누르면
변경된 버전들 플러그인을 다운로드 받는다.
/Users/inyongkim/.m2
경로는 이곳이다.
//////////////// 서버 생성 //////////////////
8. new-server
Apache Tomcat v9.0
선택
경로 톰캣 경로 선택
JRE 사용중인 11g 선택
Window/Perspective/Open Perspective
Other/Server 추가
9.WEB-INF/web.xml 설정 살펴보기
<context-param>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
이파일이 Bean들을 등록하는 곳이다. ------> 아래 신규 경로로 변경될 것이다.
<servlet>
<init-param>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
이파일이 MVC에서 Command.properties 비슷한것이다. FrontController 역할이다.
10.
src/main/java/com.my.multiweb/HomeController.java에서
view페이지를 view 이름을 /test처럼 맵핑 할 수 있다.
->DispatcherServlet이 접수해서
Web.xml에서 servlet-context.xml으로 보낸다
이후
prefix, suffix를 붙여서 WEF-INF/views/ 와 ~.jsp를 붙여서 반환
WEB-INF/views/에 jsp 뷰페이지를 만들면
그럼 맵핑된 multiweb/test에서 해당 jsp페이지를 볼 수 있다.
/////// 컨트롤러 생성 방법 ////////
1.src/main/java에 com.memo.controller 패키지 안에 컨트롤러 생성
2.MemoController 클래스 생성후
위에 @Controller 어노테이션추가
3.클래스폼에 @RequestMapping(value="/memo", method=RequestMethod.GET)
로 url맵핑,
4.jsp 뷰페이지는 반환값 return "memo/input";
5. WEB-INF/views/memo 폴더만들고
input.jsp 뷰페이지 생성
6. 이래도 패키지 스캔대상 등록을 하지 않아서 페이지를 못찾는데
WEB-INF/spring/appServlet/ servlet-context.xml에서 추가한 contoller 패키지를 추가해줘야 한다.
<context:component-scan base-package="com.memo.controller" />
////////////// 서버 설정 //////////////
1. VO에서 Setter Getter 등은 lombok.jar를 설치해서
https://projectlombok.org/download
어노테이션 @Setter @Getter @ToString(includeFieldNames = true) 등으로 자동 생성 된다 --->outline에서 확인 가능
2. DAO는 인터페이스로 생성 -> DAOMyBatis로 상속받아 세부 구현할것이다. MyBatis를 사용하지 않는 경우 수정이 용이하도록..
3. web.xml에서 Config관련 파일들을 몰아두려 한다
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
<!-- /WEB-INF/spring/root-context.xml -->
classpath:config/spring/*-context.xml <<<<<<<------ 이경로로
</param-value>
</context-param>
4. resource/config폴더에 모든것들을 몰아둔다.
+/mybatis/
+/props/
+/spring/
+/SQL/
각 폴더를 생성한다. 해당 폴더마다 각 기능들 설정 파일들이 들어가게 된다.
5. ~/props/database.properties 파일에
JDBC 드라이버, 계정 정보가 들어간다. MySQL은 주석으로 참고..
Global.DbType=oracle
Global.DriverClassName=oracle.jdbc.driver.OracleDriver
Global.Url=jdbc:oracle:thin:@localhost:49161:XE
Global.Username=multi
Global.Password=tiger
#Global.DbType=mysql
#Global.DriverClassName=com.mysql.jdbc.Driver
#Global.Url=jdbc:mysql://localhost:1433/tis_SHOP
#Global.Username=tis_shop
#Global.Password=tiger
6. 위와 같이 DB정보를 데이터 소스에 읽을 수 있도록 해야 한다.
~/spring/datasource-context.xml 을 spring config 파일로 생성할때
위 파일 경로 네임 스페이스는 beans,context,mybatis-spring 을 선택해서 생성한다.
7. datasource-context.xml에서
[1] context, mybatis-spring 네임 스페이스 추가
[2] DataSource alias 별칭 주기. ---[1],[2]는 필수는 아니지만 [3],[4] 값을 직접입력해야됨
[3] DataSource 빈 등록 (DBCP, HikariCP)
[4] SqlSessionFactoryBean 빈 등록
[5] SqlSessionTemplate 빈 등록
8. resources/config/mybatis/mybatis-config.xml 생성, Doctype선언문 복붙해야함.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
9. <!-- typeAlias 타입 별칭 설정 -->
<!-- mapper 정의 -->
10. resources/config/mybatis/mapper/MemoMapper.xml 생성, Doctype선언문 복붙해야함.
<mapper namespace="com.memo.model.MemoMapper">
<select id="getTotalCount" resultType="int">
select count(idx) from scott.memo
</select>
</mapper>
서버 실행해서 작동하는지 확인.
///////// DAOMybatis에서 ///////
1. 영속성 계층 DAO는 @Repository를 붙인다
- //id가 sqlSessionTemplate인 객체[datasource-context.xml]을 찾아서 주입한다.
주입을 통해서 session.selectOne(NS+".getTotalCount") 이런 마이바티스 기능을 쓰게 된다.
2. @Repository를 쓰려면 WEB-INF/spring/appServlet/servlet-context.xml 에 해당 패키지
com.memo.model 를 스캔하도록 <context:component-scan base-package="com.memo.model" />
가 추가되어야 한다.
///////// ///////// ///////// 기능 추가 할때 순서. ///////// ///////// /////////
[1] Controller로 들어간다
[2] @RequestMapping(value="/memoEdit", method=RequestMethod.POST)
어떤 페이지에서 시작하는지, POST인지 GET인지 지정
[3] public String memoDelete(Model model, @RequestParam(defaultValue = "0") int idx) {
어떤 기능인지, ( 모델은 기본으로 부른다, 받아야 되는것이 1개면 @RequestParam, 다수이면 @ModelAttribute("memo") MemoVO memo 자체를 받는다.
[3-1] 리다이렉트가 필요한 경우
if(idx==0) {
return "redirect:memoList"; //redirect 시키는
}
[4] 메시지 출력과 이동 경로 지정,
int n = memoDao.updateMemo(memo);
String str = (n > 0) ? "수정 성공" : "수정 실패";
String loc = (n > 0) ? "memoList" : "javascript:history.back()";
model.addAttribute("message", str);
model.addAttribute("loc", loc);
[5] 해당 메서드의 최종 경로는 이곳이고
return "msg";
loc에 지정되는 것에 따라 msg.jsp에서 경로를 재설정하는 방식이다.
****************************************************************
전체 흐름도 해석
1. web.xml에서
classpath.config/spring/*-context.xml 위치를 지정
이렇게 지정한 파일들은 실행 할 때 메모리에 우선적으로 올린다.
그아래 리스너가 위 경로를 우선적으로 실행하도록 명령한다.
그아래 DispatcherServlet이 모든 요청을 받아낸다.
한글 인코딩 처리도 이곳에서 지정한다.
2. servlet-context.xml 에서
ViewResolver로 뷰페이지 방식 설정 - 이것이 접두어 경로,접미어.jsp로 url을 지정한다
메모리에 올릴 패키지를 등록
2. spring/datasource-context.xml 에서
db유형, 계정명 등 경로 지정 props
Datasource 빈등록이 DBUtil.con()같이 연결 얻어오고 마지막에 close()메서드 하는 역할.
---오라클세팅
MyBatis 세팅에서
SqlSessionFactory를 등록
SqlSessionTemplate를 통해서 SqlSession을 얻어 올 수 있다.
****************************************************************
/*아이디 중복체크 ajax처리 -- 별도로 관리해야되는데 적어서 일단 여기서 작성.
* 스프링에서 JSON데이터를 생성해야 하는 경우.
* [1] pom.xml에 Jackson Databind 등이 임포트되야 한다.
* <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
*
* [2] @ResponseBody 를 붙여주고 반환 자료 유형을 Map또는 VO유형으로 하면 위 라이브러리 들이 json형태로 변환된다.
*
* [3] 매핑된 idcheck .jsp를 찾아가는게 아니라 응답 유형이 json이라면
* @GetMapping에 produces="application/json" 기술하자. */
셋팅 이후 기능 추가 순서 문서봐야 할 순서
뷰페이지 시작지점
컨트롤러(뷰맵핑)
[Impl]서비스임플(이동방식,경로지정)
[Impl]DAOMyBatis(세션)
맵퍼(SQL문)
뷰페이지 임포트