아직 개념이 잡히지 않았기 때문에 틀린 부분이 많음 . . .
WAS가 올라갈 때(실행) 참고 하는 파일
//////////////////////////////////////////////////////////////////////////////
/////// 호스트 파일 등록
//////////////////////////////////////////////////////////////////////////////
★ C:\Windows\System32\drivers\etc
● hosts
127.0.0.1 hiboard.icia.co.kr 매핑 시킴
- daun.net의 도메인은 어디 있나? 내 PC에 없는 도메인은 밖으로 나가서 찾는다.
- 127.0.0.1을 입력하면 인터넷이 끊겨도 내 PC에 있는 주소인 걸 알아서 뜬다.
- 기본적으로 포트 번호는 80번 우리는 웹서버와 WAS를 같이 사용한다.
Oracle와 포트 충돌로 인해 8088 포트 번호로 바꿔주었다.
☆도메인이 정해지면 이 파일에 추가만 하면 됨☆
//////////////////////////////////////////////////////////////////////////////
/////// TomCat 환경설정
//////////////////////////////////////////////////////////////////////////////
★ C:\project\tomcat-9.0.55\conf ★ 환경설정 폴더
- 톰캣의 환경설정 파일에 있다는 말은 WAS가 실행 될 때
이곳에 있는 파일들을 모두 읽어서 WAS 메모리에 올려둔다.
★ C:\project\tomcat-9.0.55\conf\server.xml
● server.xml
- 69번 : 8088 톰캣의 포트 번호 설정
- 172번 : name="호스트에서 지정한 도메인명", appBase =""
- appBase의 경로가 비어있는 경우 톰캣에서 Catalina 폴더로 이동하도록 설정되어 있다.
때문에 지정하는 순간 폴더 안에 \Catalina\도메인명 폴더를 만들고,
그리고 그 안에 있는 ROOT 파일을 만든다.
이 파일을 톰캣이 읽도록 되어 있다.
★ C:\project\tomcat-9.0.55\conf\Catalina\hiboard.icia.co.kr\ROOT.xml
● ROOT.xml
docBase="C:\project\webapps\hiboard\src\main\webapp"
docBase = "기본경로"
http://hiboard.icia.co.kr:8088/를 하게 되면 이쪽으로 이동을 한다.
~이렇게 해서~
WAS가 실행될 때 cof 폴더에 있는 server.xml
Catalina 폴더에 있는 것도 다 가지고 가서 읽고 처리하니까
hiboard.co.kr:8088 들어오면 ==> docBase = "\src\main\webapp"
자동으로 처리해준다.
//////////////////////////////////////////////////////////////////////////////
/////// WAS에서의 기본 파일 설정
//////////////////////////////////////////////////////////////////////////////
★ C:\project\tomcat-9.0.55\conf\web.xml
● web.xml
- 도메인에 hiboard.icia.co.kr:8088 검색 했을 때
conf 폴더를 모조리 메모리에 올려둔다.
그 때 같이 올라가는 파일
- 최하단 웰컴 파일 설정
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
- docBase = "C:\project\webapps\hiboard\src\main\webapp"
- docBase에 의해 폴더 바로 밑에 있는 웰컴 파일을 이것 때문에 읽는 거임!!
WAS가 올라갈 때(start) 참고 하는 파일 2개
1. tomcat/conf/server.xml - 포트 번호/호스트 등록
conf/Catalina/hiboard.co.kr/ROOT.xml - docBase 기본 폴더 경로
(이건 server.xml이 참조함)
2. 같은 폴더에 있는 web.xml 참고
//////////////////////////////////////////////////////////////////////////////
/////// Spring 기본 파일 경로
//////////////////////////////////////////////////////////////////////////////
★ /src/main/webapp/WEB-INF/web.xml
● web.xml
- 전체적인 Spring 환경 설정 web.xml
- hiboard.icia.co.kr:8088을 쳤을 때 가리키는 파일은
webapp가 기본이지만 클래스 파일은 WEB-INF가 기본 폴더이다.
- 그래서 기본 경로 설정 파일(web)이 WEB-INF 밑에 있음
contextConfigLocation 이름으로 로드중이다.
경로 : /WEB-INF/config/spring/root-context.xml
- 제일 먼저 올림
- 역할은? env.xml 환경변수 값을 읽어서
오라클 접속(히카리)해서 커넥션 맺음
- WAS가 올라갈 때 Spring 환경설정도 같이 해줘야 함
웹 브라우저에서 주소 엔터칠 때 실행되는 게 아니라
WAS가 스타트 하면서 실행되는 파일이다.
root-context.xml 이동
<!-- 환경변수 시작 -->
<util:properties id="env" location="/WEB-INF/config/env.xml" />
<!-- 환경변수 종료 -->
시작하자마자 다른 파일을 불렀다.
env.xml 이동 (DB 접속정보)
<!-- ########## 사이트 타이틀 시작 ########## -->
<entry key="site.title">ICIA-계층형 게시판</entry>
<!-- ########## 사이트 타이틀 종료 ########## -->
<!-- ########## 히카리데이터베이스 연결 설정 시작 ########## -->
<entry key="db.pool.name">icia-hikariCP</entry>
<entry key="db.driver.class.name">oracle.jdbc.OracleDriver</entry>
<entry key="db.jdbc.url">jdbc:oracle:thin:@localhost:1521:xe</entry>
<entry key="db.username">c##iciauser</entry>
<entry key="db.password">1234</entry>
<entry key="db.maximum.pool.size">3</entry>
<entry key="db.minimum.idle">3</entry>
<entry key="db.connection.test.query">SELECT 1 FROM DUAL</entry>
<entry key="db.connection.timeout">3000</entry>
<entry key="db.idle.timeout">600000</entry>
<!-- ########## 데이터베이스 연결 설정 종료 ########## -->
- key="변수명" 태그 가운데 값이 변수의 값임
- site.title실제 타이틀 찍을 때 써먹음
- 테스트 쿼리만 날려서 결과를 갖고 오는 게 아니라 성공/실패 여부만 갖고옴
- db.pool.name : icia-hikariCP
다시 root-context.xml 이동
<!-- 환경변수 시작 -->
<util:properties id="env" location="/WEB-INF/config/env.xml" />
<!-- 환경변수 종료 -->
<!-- HikariCP configuration 시작 -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="poolName" value="#{env['db.pool.name']}" />
<property name="driverClassName" value="#{env['db.driver.class.name']}" />
<property name="jdbcUrl" value="#{env['db.jdbc.url']}" />
<property name="username" value="#{env['db.username']}" />
<property name="password" value="#{env['db.password']}" />
<property name="maximumPoolSize" value="#{env['db.maximum.pool.size']}" />
<property name="minimumIdle" value="#{env['db.minimum.idle']}" />
<property name="connectionTestQuery" value="#{env['db.connection.test.query']}" />
<property name="connectionTimeout" value="#{env['db.connection.timeout']}" />
<property name="idleTimeout" value="#{env['db.idle.timeout']}" />
</bean>
<!-- HikariCP configuration 종료 -->
- HikariConfig
- 이미 정해져 있는 name을 갖고 옴
- 값을 어떻게 세팅했는지만 봄
- value="#{env['db.pool.name']}" -- env는 윗쪽의 id값 -- 작은따옴표 안쪽은 변수명
- db.pool.name : icia-hikariCP -- 위에서 갖고 온 풀네임
- 이런식으로 root-context에서 env에 접속을 다 하고
<!-- HikariCP configuration 종료 -->
root-context.xml
<!-- dataSource 생성 시작 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>
<!-- dataSource 생성 종료 -->
실제 환경변수를 다 하고 root-context를 통해서 DB select로 날려 보는 것임
- 매핑 시켜줘야한다.
- name="mapperLocations" 위치가 어디?
- value="classpath*:com/icia/web/mapper/**/*.xml"
- 폴더가 와도 되고 파일이 와도 됨 어떤이름.xml
그거랑 Dao 인터페이스에 있는 id 값이랑 매핑!!
- 위아래 서로 짝꿍 어떻게 알까? id값과 value값이 같으니까!
실제로도 무조건 똑같이 맞춰줘야 됨!!!
- 42 id, 51 name, 58 value
UserDao.java / UserDao.xml 이름이 같아야 하는 이유도 여기서 설정을 한 거임!!
* root-context는 WAS가 시작할 때 적용하는 거임
그런데 여기에 쿼리가 추가(Dao 메소드 추가)가 된다면?
무조건 WAS를 내렸다가 다시 올려야 됨
- 무조건 톰캣부터 읽고 스프링 환경을 읽어 줌
57 : value = "com.icia.web.dao/UserDao.java"
- 인터페이스 : 메소드가 모두 추상메소드이다.
45 : value="classpath*:com/icia/web/mapper/**/*.xml"
- 57&45 서로 짝꿍이어야 됨
위아래 서로 이어 주는 건 49라인이기도 함... 어렵네 .....
DB접속하고 Dao와 xml을 연결 시켜서 템플릿을 만들어 놓은 건 root-context.xml에서 함
여기서 맞춰준 거임
<context:component-scan base-package="com.icia.web.service" />
오라클 서비스 폴더에 있는 거 다 스캔해주는 거임
@autoWired
root-centext에서 해주는 거
Controller -> Service -> Dao & xml
로그인창 index.jsp 호출할 때 어떻게 호출?
Controller에서 서비스 호출, Service에서 Dao 호출, 다우&xml (프로그램 기준)
그런데 root-context에서는 어디까지 연결 작업을 한다?
root-context.xml이 DB연결은 해놓고, 다우&xml랑 연결해서 템블릿 만들어 놓음
서비스까지 메모리에 올려 놓음 서비스에서 다우 짝꿍 안 맺음 (서비스만)
스프링 환경 세팅
일단 webapp/WEB-INF/web.xml 메모리에 올려
- root-context.xml -
env.xml - 환경 변수값
환경 변수값을 읽어서 오라클에 접속 후 커넥션 맺음
접속은 히카리시피 이용해서 커넥션 풀을 맺음
쿼리도 날려 보고 접속 ok 로그에 찍어 줌
실행과 환경세팅은 거꾸로
xml&다우 연결 시켜서 템플릿을 만듦
서비스 패키지에 있는 애들도 메모리에 올려뒀음
(여기까지가 root-context.xml)
root-context.xml이 끝났다면 다시 web.xml로 돌아간다.
★ /src/main/webapp/WEB-INF/web.xml
● web.xml
19 스프링 시작할 때 기본적으로 실행
23 캐릭터 인코딩 필터 : UTF-8 정의임
39 /* 루트 밑에 전부 정의 해둔 거임
디스패쳐 서블릿을 WAS가 실행될 때 정의한다.
전체적인 환경 설정은 /webapp/WEB-INF/web.xml 이지만
DispatcherSevlet의 환경 설정은 servlet-context.xml에 정의!!
/webapp/WEB-INF/config/spring/servlet-context.xml
<!-- 어노테이션 service, controller 스캔 시작 -->
<context:component-scan base-package="com.icia.web.controller" />
<!-- 어노테이션 service, controller 스캔 종료 -->
- 디스패쳐서블릿에 등록할 컨트롤러를 매핑 시켜둠(올려둠)
- 패키지 경로 com.icia.web.controller
<!-- url 매핑 시작 (이미지, 자바스트립트, 스타일시트 디렉토리)-->
<mvc:resources mapping="/resources/**" location="/WEB-INF/views/resources/" />
<!-- url 매핑 종료 -->
- 디렉토리는 리소스 안에 어디든
- /WEB-INF/views/resources/ 경로를 바라볼거야
<!-- View Resolver 시작 -->
<!-- 컨트롤러에서 리턴하는 뷰 이름에 접두사, 접미사를 붙여서 JSP페이지의 경로를 찾는다. -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <!-- JSTL 사용 -->
<property name="prefix" value="/WEB-INF/views" /> <!-- 접두사 -->
<property name="suffix" value=".jsp" /> <!-- 접미사 -->
<property name="order" value="1" /> <!-- 순서 -->
</bean>
<!-- View Resolver 종료 -->
/인덱스
- Controller 안에 있는 Request를 매칭에서 올라가면서 실행되는 것들
등록되는 것들 스트링 타입이 /인덱스야
그러면 경로를 가지고 조합해서 스트링에 값을 넣어 놓는다.
실행하는 시점에 넣는 게 아니라 WAS에 다 올라가서 스프링 환경 세팅 하면서 이 파일을 읽으며 다 조합한다.
- 그래서 어노테이션이 필요함
- @Request 매핑정보 어노테이션을 통해서 리턴 타입이 정해짐
- 이곳에서 읽어서 스트링이면 매핑 메소드에 정보를 갖고 있음
'개발일지 > Java + Spring' 카테고리의 다른 글
[Spring] 회원정보 수정 중 비밀번호 변경체크(문제) (0) | 2021.12.09 |
---|---|
[Spring] 흐름 읽기_1208필기 (0) | 2021.12.08 |
211029 Java - 인터페이스(Interface) 정리 및 예제 (0) | 2021.10.29 |
211028(3) Java - 추상클래스 (0) | 2021.10.28 |
211028(1) Java - 접근제한자와 캡슐화 (4) | 2021.10.28 |