원지의 개발
article thumbnail
728x90

1. tiles

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

1.1. 라이브러리 추가

Maven library 추가

<java />
<!-- 타일즈 (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이 필요함 ▼
<java />
<!-- Servlet --> <!-- 서블릿 버전 최소 3.1이상으로 변경 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>

1.2. tiles 선언

  • tiles를 사용하는 뷰리졸버(view 경로를 합성, 컨트롤러에서 받은 view 정보를 이름만으로 맵핑)를 재정의함

1.2.1. 1. tiles 설정 파일의 위치 선언

WEB-INF/config/servlet-context.xml

  • Spring에서 서비스 단에서 처리된 데이터를 뷰단인 jsp 로 보내기 위해서 View Resolver 를 사용
<java />
<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 파일

1.2.2. 2. 기존에 있던 리졸버 뷰의 순서 2번째로 변경

<java />
<!-- 기존에 가지고 있던 뷰 입니당 --> <!-- 뷰가 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" /> 추가

1.2.3. 3. 다중 뷰 리졸버 선언 ▶ 해당 뷰 리졸버의 순서 1번째로 선언

  • 다중 뷰 리졸버가 선언되려면 UrlBasedViewResolver 이용
    UrlBasedViewResolver: 커스터마이징 할 때 사용하는 클래스, 이것 말고도 많은 클래스가 있음
  • 해당 뷰 리졸버의 설정으로 TilesView를 넣고 order를 1번째로 설정
<java />
<!-- 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개이면 안해되 됨

1.2.4. 4. 템플릿 구축 후 공통화면 설정

WEB-INF/tiles/tiles.xml

  • header, body, footer를 가진 template.jsp라는 기본 레이아웃을 정의
  • 정의된 레이아웃의 name 속성인 base를 상속하여 추가적으로 여러 tiles들을 만들 수 있음
<java />
<!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 템플릿 구축

<java />
<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 부분 동적 처리

<java />
<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에서 합쳐져서 그걸 열어줌

 

다양한 사용 방법 보기

1.2.5. 5. 원래대로 사용 = 직접 사용 = 템플릿 사용x

  • tiles를 사용하지 않고 기존 파일을 그대로 쓰려고 특별히 지정할때는 직접 연결
    (로그인 창 같은 곳에서 header, footer 필요없을 경우)
<java />
<tiles-definitions> <!-- 템플릿을 사용하지 않을 경로 --> <definition name="user/login" template="/WEB-INF/views/user/login.jsp" /> </tiles-definitions>
  • name 속성 - 컨트롤러의 리턴위치 = 컨트롤러에서 넘어오는 값
    template 속성 - 보여질 파일의 위치 = 이 파일로 직접 연결됨

전체코드

<java />
<?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>

1.2.6. 6. JSP에서 tiles 뷰 사용

WEB-INF/tiles/template.jsp

<java />
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
  • 태그 라이브러리 적어주기
  • 여기서  prefix에 들어가는 이름은 아래의 태그에서 사용될 이름

  • html의 구조에 맞게 쪼개서 넣어줌
  • <tiles:insertAttribute> 사용하여 name에는 tiles.xml에서 설정했던 이름 적어줌
<java />
<%@ 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)만 가져다 넣기
<java />
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  • user/join.html, user/login.html 파일은 jsp 파일로 변경
  • html과 jsp의 차이는 위에 선언부가 있냐 없냐, 위의 코드를 써주면 jsp
  • join은 템플릿을 이용 ▶ 내용(container)만 남김

<java />
<!-- 템플릿을 사용하지 않을 경로 --> <!-- name은 컨트롤러에서 반환되는 값, template은 파일의 위치 --> <definition name="user/login" template="/WEB-INF/views/user/login.jsp" />
  • login은 직접 원래대로 사용 ▶ tiles.xml 에서 처리
    파일 자체는 따로 건들지 않고 놔두기 (<!DOCTYPE html>, script, footer 있음)
  • mypage.html은 그대로 이용

2. Lombok

  • VO의 멤버변수에 맞게 getter/setter, toString(), 생성자를 빠르게 생성해주는 라이브러리
    멤버변수만 적고 어노테이션 사용하면 자동으로 생성해줌
  • 실업무에서 사용
  • 단, 모든 팀원이 Lombok을 사용해야 함

2.1. 설치

더보기

2.1.1. 1. Lombok 라이브러리 설치

https://projectlombok.org/

 

Project Lombok

 

projectlombok.org

2.1.2. 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

2.1.3. 3. 설치 확인

  • Maven update 후 라이브러리에 lombok.jar 있는지 확인
  •  STS.ini 파일 확인해보면 lombok 설치 확인 가능

2.1.4. 4. 사용하기 위해 Maven library 추가

<java />
<!-- 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

2.2. 사용법

command 패키지 - VO 클래스에서 멤버변수 선언 후 어노테이션 사용

 

@Data

  • getter, setter, toString

@NoArgsConstructor

  • 기본생성자

@AllArgsConstructor

  • 모든 멤버변수 생성자

@Data
@NoArgsConstructor & @AllArgsConstructor


3. SpringMyweb(1) - 생성 및 기본 설정

3.1. 프로젝트 생성

  • spring의 기본 프로젝트인 Spring Legacy Project 생성

디렉토리 확인

3.2. 기본 연결

3.2.1. 1. pom.xml

<java />
<!-- 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 을 프로젝트의 버전에 맞게 변경
<java />
<!-- 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이상으로 변경
<java />
<!-- 오라클커넥터 --> <!-- 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기능 넣어줌
<java />
<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

3.2.2. 2. web.xml 맞춰 폴더 구조 변경

<java />
<?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.2.3. 3. servlet-context

<java />
<?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="    "; 안에 패키지명 집어넣기
    공통으로 들어갈 패키지명/* 처리

3.2.4. 4. root-context

<java />
<?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 무조건 같이감!

3.2.5. 5. DB-config & mybatis-config 폴더 복사

  • DB-config / hikari.properties 는 그대로 사용
<java />
<?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 />는 변경해야 하므로 우선 비워놓기

3.3. 추가 연결

3.3.1. 1. index.jsp에서 정적파일 연결 방법 2가지

template.jsp - 절대 경로 설정

<java />
<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 - 경로 맵핑

<java />
<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로 들어가게 맵핑

3.4. tiles view template 적용 ▲tiles 게시물

3.5. lombok 적용 ▲lombok 게시물


오늘 하루

더보기

기억에 남는 부분

 

어려운 부분

 

문제 해결 부분

728x90
profile

원지의 개발

@원지다

250x250