원지의 개발
article thumbnail
728x90

tiles

  • 웹 페이지의 상단, 하단 메뉴와 같이 반복적으로 사용되는 부분들에 대한 코드를 분리해서 한 곳에서 관리를 가능하게 해주는 프레임워크
    ex) 보통 header를 resources-layout 폴더에 넣고 index.jsp에서 <%@include file ...> 넣는데 추천X,
    페이지명이 바뀌면 많은 파일을 전부 수정해줘야 하기 때문에 그것을 방지

라이브러리 추가

Maven library 추가

      <!-- 타일즈 (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>

css, js 관련 파일들

  • 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 라이브러리 설치

https://projectlombok.org/

 

Project Lombok

 

projectlombok.org

2. 위치 및 STS 지정

  • 우선 STS를 끄고, 다운받은 jar 파일 spring 폴더에 넣은 후 실행

만약 실행이 안된다면?

  1. cmd 창을 연다
  2. cd> 디렉토리 경로 를 적어준다 ▶ 파일로 들어감
    여기서는 cd> C:\Users\user\Desktop\JWcourse\spring
  3. java -jar lombok.jar 적어준다

한글 때문에 실행이 안된다면? onedrive 사용시

  1. 파일을 프로젝트와 같은 위치로 빼내고
  2. 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

  • 모든 멤버변수 생성자

@Data
@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에서 데이터베이스 연결

2023.02.03 - [Spring] - [Spring] ??? MySQL 설치, Spring,DB연결 ▶ JDBC, Spring-JDBC, DataSource, HikariCP, Spring-test

 

[Spring] ??? MySQL 설치, Spring,DB연결 ▶ JDBC, Spring-JDBC, DataSource, HikariCP, Spring-test

MySQL MySQL 설치 https://dev.mysql.com/downloads/installer/ MySQL :: Download MySQL Installer Select Operating System: Select Operating System… Microsoft Windows Select OS Version: All Windows (x86, 32-bit) Windows (x86, 32-bit), MSI Installer 8.0.32 2

j-won950101.tistory.com

  • 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
profile

원지의 개발

@원지다

250x250