728x90
tiles
- 웹 페이지의 상단, 하단 메뉴와 같이 반복적으로 사용되는 부분들에 대한 코드를 분리해서 한 곳에서 관리를 가능하게 해주는 프레임워크
ex) 보통 header를 resources-layout 폴더에 넣고 index.jsp에서 <%@include file ...> 넣는데 추천X,
페이지명이 바뀌면 많은 파일을 전부 수정해줘야 하기 때문에 그것을 방지
라이브러리 추가
<!-- 타일즈 (jstl이 반드시 필요합니다)-->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-extras</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.8</version>
</dependency>
- pom.xml에 tiles 라이브러리 ▲ 넣기
- tiles는 반드시 jstl이 필요함 ▼
<!-- Servlet -->
<!-- 서블릿 버전 최소 3.1이상으로 변경 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
tiles 선언
- tiles를 사용하는 뷰리졸버(view 경로를 합성, 컨트롤러에서 받은 view 정보를 이름만으로 맵핑)를 재정의함
1. tiles 설정 파일의 위치 선언
WEB-INF/config/servlet-context.xml
- Spring에서 서비스 단에서 처리된 데이터를 뷰단인 jsp 로 보내기 위해서 View Resolver 를 사용
<beans:bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<beans:property name="definitions">
<beans:list>
<beans:value>/WEB-INF/tiles/tiles.xml</beans:value> <!-- 타일즈 xml 파일의 경로 -->
</beans:list>
</beans:property>
</beans:bean>
- property ▶ list 빈 = setter주입 ▶ list로 들어감
- <beans:value>/WEB-INF/tiles/tiles.xml</beans:value> 에는 tiles.xml 파일의 경로가 들어가는데
여기서는 tiles 폴더 - tiles.xml 파일
2. 기존에 있던 리졸버 뷰의 순서 2번째로 변경
<!-- 기존에 가지고 있던 뷰 입니당 -->
<!-- 뷰가 2개니까 order로 순서 적용시켜서 충돌 방지, 주석 해 놓으면 되긴하지만 참고 -->
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<beans:property name="order" value="2" />
</beans:bean>
- 기존에 있던 뷰를 order속성으로 2번째로 밀어줌
<beans:property name="order" value="2" /> 추가
3. 다중 뷰 리졸버 선언 ▶ 해당 뷰 리졸버의 순서 1번째로 선언
- 다중 뷰 리졸버가 선언되려면 UrlBasedViewResolver 이용
UrlBasedViewResolver: 커스터마이징 할 때 사용하는 클래스, 이것 말고도 많은 클래스가 있음 - 해당 뷰 리졸버의 설정으로 TilesView를 넣고 order를 1번째로 설정
<!-- 0207 뷰 리졸버의 상위 클래스 UrlBasedViewResolver클래스의 뷰로 사용할 tilesView클래스를 주입 -->
<!-- 사용하는 뷰 클래스의 재정의 -->
<beans:bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
<beans:property name="order" value="1" />
</beans:bean>
- setter로 name="viewClass" 뷰클래스 주입
value="tiles3.tilesView" tiles에서 제공하는 것 들어감 - setter로 order 속성 이용해서 순서를 1번째로 만들어줌
뷰리졸버가 많을 때 이 뷰를 첫번째로 쓰려고 하는 것으로 뷰리졸버가 1개이면 안해되 됨
4. 템플릿 구축 후 공통화면 설정
WEB-INF/tiles/tiles.xml
- header, body, footer를 가진 template.jsp라는 기본 레이아웃을 정의
- 정의된 레이아웃의 name 속성인 base를 상속하여 추가적으로 여러 tiles들을 만들 수 있음
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
"http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
- tiles.xml 제일 상단에 DOCTYPE 적기
base 템플릿 구축
<tiles-definitions>
<!-- 템플릿의 모형을 정의, header, footer, body, sidebar-->
<!-- name은 컨트롤러에서 반환되는 값 template은 파일의 위치 -->
<definition name="base" template="/WEB-INF/tiles/template.jsp">
<put-attribute name="header" value="/WEB-INF/tiles/header.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" />
<put-attribute name="left" value="/WEB-INF/tiles/left.jsp" />
</definition>
</tiles-definitions>
- tiles-definitions 태그 안에 템플릿 정의
- <definition> 태그로 name="레이아웃 이름 정의", template="템플릿 파일이 있는 경로" 속성을 넣어서 템플릿 구축
- <put-attribute>태그로 필요한 부분을 하나씩 만들어서 넣어줌
보통 header, footer, body(컨테이너, 내용이 들어갈 부분), sidebar(left) 등으로 나눔 - body의 value(경로)는 오버라이딩해서 갈아끼울 수 있게 하기 위해서 비워둠 ▼ 아래에서 동적으로 표현해줄 예정
base 템플릿 상속 ▶ body 부분 동적 처리
<tiles-definitions>
<!-- 위에 선언된 base템플릿을 상속 ▶ body부분을 동적으로 처리 -->
<!-- 1단 경로 -->
<definition name="*" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}.jsp" />
</definition>
<!-- 2단 경로 -->
<definition name="*/*" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp" />
</definition>
<!-- 3단 경로 -->
<definition name="*/*/*" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}.jsp" />
</definition>
- extends로 위의 템플릿(base)을 상속받음
- body만 새로 만들어주면 되기 때문에 body만 오버라이딩
- name="*" 부분은 controller에서 뷰를 찾기 위해 반환하는 값 = controller에서 들어오는 리턴값
- 상속받을 때 base의 name=*로 표현 = 특정 단어가 맵핑되서 들어오면 body의 경로로 보내주겠다(* 이거로 표현해서 어떤 것이든 다 받아주겠다)라는 뜻으로
value 값에는 /WEB-INF/views/{1}.jsp 이런식으로 넣어주면 됨, 들어오는 모든 값을 {1} 로 치환 ▶ 동적으로 표현 - 1, 2, 3 단 등 경로 다양하게 사용 가능
컨트롤러에서 특정 단어가 들어오면
views 폴더 아래의 파일이 들어가 있는 형식에 맞춰서
그게 {1}에 들어가고 템플릿의 body에서 합쳐져서 그걸 열어줌
다양한 사용 방법 보기
5. 원래대로 사용 = 직접 사용 = 템플릿 사용x
- tiles를 사용하지 않고 기존 파일을 그대로 쓰려고 특별히 지정할때는 직접 연결
(로그인 창 같은 곳에서 header, footer 필요없을 경우)
<tiles-definitions>
<!-- 템플릿을 사용하지 않을 경로 -->
<definition name="user/login" template="/WEB-INF/views/user/login.jsp" />
</tiles-definitions>
- name 속성 - 컨트롤러의 리턴위치 = 컨트롤러에서 넘어오는 값
template 속성 - 보여질 파일의 위치 = 이 파일로 직접 연결됨
전체코드
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
"http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
<tiles-definitions>
<!-- 템플릿의 모형을 정의, header, footer, body, sidebar-->
<!-- name은 컨트롤러에서 반환되는 값 template은 파일의 위치 -->
<definition name="base" template="/WEB-INF/tiles/template.jsp">
<put-attribute name="header" value="/WEB-INF/tiles/header.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp" />
<put-attribute name="left" value="/WEB-INF/tiles/left.jsp" />
</definition>
<!-- 위에 선언된 base템플릿을 상속 ▶ body부분을 동적으로 처리 -->
<!-- 1단 경로 -->
<definition name="*" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}.jsp" />
</definition>
<!-- 2단 경로 -->
<definition name="*/*" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp" />
</definition>
<!-- 3단 경로 -->
<definition name="*/*/*" extends="base">
<put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}.jsp" />
</definition>
<!-- 템플릿을 사용하지 않을 경로 -->
<definition name="user/login" template="/WEB-INF/views/user/login.jsp" />
</tiles-definitions>
6. JSP에서 tiles 뷰 사용
WEB-INF/tiles/template.jsp
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
- 태그 라이브러리 적어주기
- 여기서 prefix에 들어가는 이름은 아래의 태그에서 사용될 이름
- html의 구조에 맞게 쪼개서 넣어줌
- <tiles:insertAttribute> 사용하여 name에는 tiles.xml에서 설정했던 이름 적어줌
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 태그 라이브러리 적어줌 -->
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<!-- 타일즈 뷰에서 정의한 name값이 들어갑니다 -->
<div id="wrap">
<tiles:insertAttribute name="header"/>
<tiles:insertAttribute name="body"/>
<tiles:insertAttribute name="footer"/>
</div>
<tiles:insertAttribute name="left"/>
</body>
</html>
- index.jsp에 들어있던 css, js 관련 파일들 (=정적 파일)은 template.jsp의 <head> 안으로 옮김 (전역에서 사용)
- 기존의 header, footer, left 부분은 각자 jsp파일로 만들고, 내용(container)만 가져다 넣기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
- user/join.html, user/login.html 파일은 jsp 파일로 변경
- html과 jsp의 차이는 위에 선언부가 있냐 없냐, 위의 코드를 써주면 jsp
- join은 템플릿을 이용 ▶ 내용(container)만 남김
<!-- 템플릿을 사용하지 않을 경로 -->
<!-- name은 컨트롤러에서 반환되는 값, template은 파일의 위치 -->
<definition name="user/login" template="/WEB-INF/views/user/login.jsp" />
- login은 직접 원래대로 사용 ▶ tiles.xml 에서 처리
파일 자체는 따로 건들지 않고 놔두기 (<!DOCTYPE html>, script, footer 있음) - mypage.html은 그대로 이용
Lombok
- VO의 멤버변수에 맞게 getter/setter, toString(), 생성자를 빠르게 생성해주는 라이브러리
멤버변수만 적고 어노테이션 사용하면 자동으로 생성해줌 - 실업무에서 사용
- 단, 모든 팀원이 Lombok을 사용해야 함
설치
더보기
1. Lombok 라이브러리 설치
2. 위치 및 STS 지정
- 우선 STS를 끄고, 다운받은 jar 파일 spring 폴더에 넣은 후 실행
만약 실행이 안된다면?
- cmd 창을 연다
- cd> 디렉토리 경로 를 적어준다 ▶ 파일로 들어감
여기서는 cd> C:\Users\user\Desktop\JWcourse\spring - java -jar lombok.jar 적어준다
한글 때문에 실행이 안된다면? onedrive 사용시
- 파일을 프로젝트와 같은 위치로 빼내고
- STS.ini 에서 -javaagent:./lombok.jar 써준다
현재 위치의 lombok.jar 연결
원래 캡쳐처럼 간다면 루트는
-javaagent:C:\Users\user\Desktop\JWcourse\spring\sts-bundle\sts-3.9.18.RELEASE\lombok.jar
이고, 같은 위치에 넣는다면 아래처럼 루트가 나옴 (바탕화면이 한글이어서 안되는 것임) 이것을 강제로 바꿔준 것
-javaagent:C:\Users\pheng\OneDrive\바탕 화면\course\spring\sts-bundle\sts-3.9.18.RELEASE\lombok.jar
- IDEs에는 STS (여기서는 spring) 지정 해주고 install
3. 설치 확인
- Maven update 후 라이브러리에 lombok.jar 있는지 확인
- STS.ini 파일 확인해보면 lombok 설치 확인 가능
4. 사용하기 위해 Maven library 추가
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
<scope>provided</scope>
</dependency>
- pom.xml에 Lombok dependency 넣고 Maven update
사용법
command 패키지 - VO 클래스에서 멤버변수 선언 후 어노테이션 사용
@Data
- getter, setter, toString
@NoArgsConstructor
- 기본생성자
@AllArgsConstructor
- 모든 멤버변수 생성자
SpringMyweb(1) - 생성 및 기본 설정
프로젝트 생성
- spring의 기본 프로젝트인 Spring Legacy Project 생성
기본 연결
1. pom.xml
<!-- pom.xml에서 사용할 변수들 -->
<!-- 자바버전 11, 스프링버전 변경 -->
<properties>
<java-version>11</java-version>
<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependencies> 시작 부분
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
- java, spring 을 프로젝트의 버전에 맞게 변경
<!-- Servlet -->
<!-- 서블릿 버전 최소 3.1이상으로 변경 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
- 서블릿 버전 최소 3.1이상으로 변경
<!-- 오라클커넥터 -->
<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>21.1.0.0</version>
</dependency>
<!-- mysql커넥터 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<!-- 스프링 jdbc 모듈 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<!-- 히카리 커넥션 풀 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
<!-- 테스트환경 - spring-test 모듈 and junit기능 -->
<!-- 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>
<!-- Test 버전은 최소 4.12 이상 (호환) -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 마이바티스 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!-- 마이바티스-스프링 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
- 필요한 라이브러리 추가
- 기존의 test 라이브러리는 지우고, 테스트 환경으로 spring-test 모듈 and junit기능 넣어줌
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<!-- 요기!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
- 메이븐 설정 - 메이븐 컴파일 버전 3.8.1 변경, 컴파일 자바 레벨 11
2. web.xml 맞춰 폴더 구조 변경
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 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 https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 스프링 전역 설정파일 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/root-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 디스패쳐 서블릿 등록 -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 한글 처리 필터 코드, requestSetCharacter 필요없이 해줌 -->
<!-- 스프링에서 지공하는 인코딩필터 등록 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 위에 지정한 encodingFilter이름을 모든 패턴에 적용 -->
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
- main - webapp - WEB-INF - spring ▶ fonfig 로 이름 변경
- servlet-context 위로 빼내고 기존의 appServlet 폴더 지우기
= config 폴더 아래에 root-context, servlet-context 파일이 위치함
3. servlet-context
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<!-- 원래 모든 경로는 컨트롤러를 타는데 리소스로 시작하는 경로는 리소스 폴더로 바로 들어가게 맵핑 해줘라 -->
<resources mapping="/resources/**" location="/resources/" />
<!-- 타일즈 설정 전 파일 -->
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<beans:property name="order" value="2" />
</beans:bean>
<context:component-scan
base-package="com.coding404.myweb.*" />
</beans:beans>
- 마지막 부분 context:component-scan base-package=" "; 안에 패키지명 집어넣기
공통으로 들어갈 패키지명/* 처리
4. root-context
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- 데이터베이스 연결은 가장 처음에, 전역에서 사용되도록 해야 하기때문에 servlet-context가 아닌 root-context에 해야함 -->
<!-- 데이터베이스 정보는 외부 파일로 관리 -->
<!-- classpath:/ 자바/리소스 경로를 가르킵니다 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:/DB-config/hikari.properties"></property>
</bean>
<!-- 데이터베이스 설정: mysql -->
<!-- <bean id="hikari" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring?serverTimezone=Asia/Seoul"></property>
<property name="username" value="spring"/>
<property name="password" value="spring"/>
</bean> -->
<!-- 데이터베이스 설정: DataSource와 HikariCP 빈으로 등록 -->
<bean id="hikari" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="${ds.driverClassName}"></property>
<property name="jdbcUrl" value="${ds.jdbcUrl}"></property>
<property name="username" value="${ds.username}"/>
<property name="password" value="${ds.password}"/>
</bean>
<!-- 데이터베이스 설정: 오라클 -->
<!-- <bean id="hikari" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
<property name="username" value="jsp"/>
<property name="password" value="jsp"/>
</bean> -->
<!-- 데이터베이스 정보를 주입 -->
<bean id="ds" class="com.zaxxer.hikari.HikariDataSource">
<constructor-arg ref="hikari"/>
</bean>
<!-- 마이바티스 설정 sqlSessionFactory 빈으로 생성 -->
<!-- classpath:/ 자바/리소스 경로를 가르킵니다 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 데이터베이스 정보 전달 -->
<property name="dataSource" ref="ds" /> <!-- bean객체 주입 -->
<!-- 마이바티스 설정파일 경로 -->
<property name="configLocation" value="classpath:/mybatis-config/mybatis-config.xml" />
<!-- 0207 매퍼파일의 위치 -->
<!-- 매퍼의 경로를 따로 분리해서 지정할 떄 사용, sqlmap폴더 하위에 모든 xml파일을 mapper의 위치로 지정함 -->
<property name="mapperLocations" value="classpath:/sqlmap/*.xml"></property>
</bean>
<!-- 마이바티스 관련 어노테이션을 찾아서 설정으로 등록 (모든 인터페이스를 등록)-->
<!-- TestMapper.java 인터페이스는 어노테이션 안해도 등록되긴함 -->
<mybatis-spring:scan base-package="com.coding404.myweb.*"/>
</beans>
- root-context에서 데이터베이스 연결
- root-context.xml - Namespace 에서 jdbc, mybatis-spring 활성화 후 Maven update
mybatis & jdbc 무조건 같이감!
5. DB-config & mybatis-config 폴더 복사
- DB-config / hikari.properties 는 그대로 사용
<?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">
<!-- 마이바티스 부연 설정 -->
<configuration>
<typeAliases>
<typeAlias type="" alias=""/>
</typeAliases>
</configuration>
- mybatis-config / mybatis-config.xml 의 <typeAlias />는 변경해야 하므로 우선 비워놓기
추가 연결
1. index.jsp에서 정적파일 연결 방법 2가지
template.jsp - 절대 경로 설정
<head> <!-- head 파일 확인 -->
<title> 투어리스트인투어 </title>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- resources 폴더 css, js 관련 파일들은 절대경로로 넣어주기 / servlet-context에서 경로 맵핑해주면 안해도 됨 -->
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/swiper.min.css">
<link rel="stylesheet" href="${pageContext.request.contextPath }/resources/css/common.css">
<script src="${pageContext.request.contextPath }/resources/js/jquery-1.11.3.min.js"></script>
<script src="${pageContext.request.contextPath }/resources/js/rollmain.js"></script>
<script src="${pageContext.request.contextPath }/resources/js/jquery.easing.js"></script>
<script src="${pageContext.request.contextPath }/resources/js/common.js"></script>
<script src="${pageContext.request.contextPath }/resources/js/jquery.smooth-scroll.min.js"></script>
</head>
- resources / css, js 관련 파일들 src에 절대경로 넣어서 연결
- ${pageContext.request.contextPath} : 내 현재 위치 ( EL(Expression Language) 사용
JSP - 경로 | |
${pageContext.request.contextPath} | 내 현재 위치 ( EL ) 사용, /myweb |
${pageContext.request.requestURL} | http://localhost:8282/myweb/WEB-INF/tiles/template.jsp |
${pageContext.request.scheme} | http |
${pageContext.request.serverName} |
localhost |
${pageContext.request.serverPort} | 8282 |
${pageContext.request.requestURI} | /myweb/WEB-INF/tiles/template.jsp |
${pageContext.request.servletPath} | /WEB-INF/tiles/template.jsp |
servlet-context.jsp - 경로 맵핑
<beans:beans
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<!-- 원래 모든 경로는 컨트롤러를 타는데 리소스로 시작하는 경로는 리소스 폴더로 바로 들어가게 맵핑 해줘라 -->
<resources mapping="/resources/**" location="/resources/" />
<resources mapping="/img/**" location="/resources/img/" />
<resources mapping="/js/**" location="/resources/js/" />
▼ CSS가 들어있으면 무조건 resources/css를 참고하게 됨
<resources mapping="/css/**" location="/resources/css/" />
</beans:beans>
- 웹에 관한 파일이므로 servlet-context에서 맵핑
- 원래 모든 경로는 컨트롤러를 타지만 resources로 시작하는 경로는 resources 폴더로 바로 들어가게 맵핑
- img로 시작하는 경로는 resources / img로 들어가게 맵핑
- js로 시작하는 경로는 resources / js로 들어가게 맵핑
- css로 시작하는 경로는 resources / css로 들어가게 맵핑
tiles view template 적용 ▲tiles 게시물
lombok 적용 ▲lombok 게시물
오늘 하루
더보기
기억에 남는 부분
-
-
어려운 부분
-
-
문제 해결 부분
-
-
728x90
'Server > Spring' 카테고리의 다른 글
[Spring] SpringMyweb 실습(3) - 페이지네이션, 검색 기능 (0) | 2023.02.09 |
---|---|
[Spring] SpringMyweb 실습(2) - 게시판 구현 (0) | 2023.02.08 |
[Spring] MyBatis, Mapper, TestMapper 실습 (0) | 2023.02.06 |
[Spring] MySQL 설치, Spring,DB연결 ▶ JDBC, Spring-JDBC, DataSource, HikariCP, Spring-test (0) | 2023.02.03 |
[Spring] MVC Controller, MVC 웹서비스 service, service 실습, DAO 구조 (0) | 2023.02.02 |