티스토리 뷰

 

처음 한번만, 환경설정까지 하나하나 다 해볼 것

(외우지 않아도 됨. 이해만)

1. Spring MVC 개요  
2. 실습환경 설정  Apache 9 사용, 이클립스 등으로 MVC 환경 설정
3. 메이븐 프로젝트 생성 빈 프로젝트 생성
4. Spring Dispatcher를 Front 컨트롤러로 설정 JSP할 때, 메인 서블릿과 같은 것. 직접 만들지 않음. 자동 생성됨
5. 스프링 컨트롤러 IndexController 작성 사용자 요청이 왔을 때, 어떤식으로 받아서 처리하는가? 알아볼 것
6. 정적파일 서비스 설정 스프링이 정적파일을 어떻게 관리하는가?
7. tiles 설정 웹페이지 공통 분모 - 헤드 영역, 메뉴 영역, 푸터 영역 같은 것.
(tag include - 디자이너가 웹페이지를 관리할 때)
최근 잘 안 쓰지만...그래도 쓰니까 해볼 것.
8. 데이터베이스와 Service 객체 사용하기 차례차례 DI 하는 법?
9. 스프링 설정파일 분리하기  
10. Anotation을 활용한 서비스 객체 DI 내가 만든 건 Annotation 해보는 작업.

 


1. MVC(Model, View, Controller)

보여지는 부분(View)과 데이터 처리(Controller)를 분리하는 방식. (*모델(Model)은 원래 분리되어 있음)

JSP할 때, DB 바로 접속했었음.

모델 객체 : entity. 데이터베이스 테이블 이름과 같은 것. - 처음부터 분리되어 있음.

XML 설정   Java 설정
servlet-context.xml Spring MVC servletConfig.class
root-context.xml Spring Core rootConfig.class
MyBatis
  DB  

 

(1) Spring MVC Process

MVC 모델 1  MVC 모델2
JSP가 모든 역할 JSP는 보여주는 역할 - View

① 사용자 요청

② 톰캣 : 디스패쳐(Dispatcher)에게 URL에 해당하는 페이지 요청

③ Dispatcher가 요청에 따른 컨트롤러 선택해 실행토록(*요청에 따른 컨트롤러를 선택하도록 하는 것이 <url.mapping>)

④ 처리 결과를 돌려주면, Dispatcher가 뷰(JSP 페이지)를 선택해 결과를 만들어서 사용자에게 응답.

 

[ 사용자 ] [ 톰캣 ]
(web.xml)
[ Dispatcher ] Controller 1
Controller 2
...
      디스패쳐 서블릿
Model / View
<url.mapping>
-servlet.xml
  View(JSP 페이지)  

└Controller : 뷰(View)와 모델(Model)에 데이터를 실어서 디스패쳐에게 돌려줌.

└Dispatcher : 모델에 실어진 데이터를 뷰에 답아서 사용자에게 보여줌.

 

-JSP : front Servlet = spring : Dispatcher Servlet(스프링은 Dispatcher-servlet 제공)


*처음에만 메이븐 프로젝트로 설정을 하나하나 직접해보지만,

다음부터는 레거시 자동 생성으로 만들어진 것을 사용할 것임.

2. 환경설정

-스프링을 사용할 수 있도록 환경설정 / Java EE 상태

(1) 이클립스

Java EE 상태 >> New Project : Spring : Spring Legacy Project 생성 >> webmvc01 / Spring MVC Project >> download

(이거 먼저하려고 했는데, 안 되서 다른 것부터)

 

(2) 아파치 톰캣(Apache tomcat)

-톰캣 9 버전으로 사용할 예정(톰캣 설치 안 되어 있으면 9버전 다운 설치하면 되고 다른 버전이 있다면, 9버전 zip 다운받아서 압축해제만 해두면 됨.)

>> 톰캣 9 : 64-bit Windows zip (pgp, sha512)

>> 압축 해제 >> 원하는 경로에 apache-tomcat-9.0.59 폴더 옮겨두기

(집 : D:\setup\apache-tomcat-9.0.59)

 

(3) Java 11 다운로드 및 환경변수 설정

오라클 >> 제품(Product) >> Java >> Java 11 : 알집파일(.zip) 다운로드 >> 압축 해제

>> 경로 복사(C:\soyun\_setup\jdk-11.0.14_windows-x64_bin\jdk-11.0.14) -  빈 폴더가 보이는 위치까지

>> 고급 시스템 설정 >> 고급 >> 환경변수 >> 새로만들기

변수 이름 : JAVA_HOME(자바를 여러 개 다운받을 수 있는데... JAVA_HOME은 디폴트값)

변수 값 : JDK 경로 복사한 것 붙여넣기

>> 시스템 변수 - Path >> 기존의 자바 1.8 삭제 >> 새로만들기 : %JAVA_HOME%\bin 입력 >> 확인

(* 집 : D:\setup\jdk-11.0.14)

 

(4) Spring Tools 4 for Eclipse(STS) 다운로드

(*기존에 다운받은 STS이 있다면, STS RELEASE의 압축해제한 contents 폴더 삭제 : STS에서 설치하고 설정했던 것 삭제)

(contents.zip 압축 해제 → contents 폴더 >> release 폴더 : 작업환경(workspace) 폴더의 tools 폴더에 옮겨두기)

-새로 다운 및 설치

>> 구글링  STS >> Spring Tools 4 Suit for Eclipse 4.13.1 >> 다운받은 jar 파일 압축 해제 >> content.zip 압축 해제

>> RELEASE 폴더 통채로 워크스페이스(작업환경-spring 작업 프로젝트가 생성될)에 tools 폴더 만들어서 복사 붙여넣기

>> SpringToolSuite4.exe : 작업표시줄 고정, 바탕화면에 바로가기 보내기

>> STS 실행 : 작업환경(workspace) 설정 & 문자인코딩 설정(workspace / HTML / CSS / JSP)

(참고로, 이클립스랑 STS 작업공간을 같은 곳으로 설정할 경우 STS랑 이클립스틑 동시에 실행할 수 없음. )

 

*STS4는 스프링부트 최적화.

프로젝트 생성할 때, 스프링부트만 만들 수 있음. → 레거시 프로젝트, 메이븐 프로젝트를 오류없이 생성하기 위한 설정

 

(5) 레거시 프로젝트 생성을 위한 설치 및 환경 설정

(*레거시 프로젝트 : 일일이 설정할 필요없이 자동으로 설정되어 있는 프로젝트?)

예전에는 STS4만 설치하면 레거시 프로젝트는 생성할 수 있었음. JSP만 플러그인 해주면 됐었는데...

버전 업그레이드? 스프링부트 주력화하면서 동기화?가 잘 안 됨. 레거시 생성하려면 따로 플러그인 설치해줘야 함.

(5-1) 설치

-레거시 생성을 위한 설치

STS4 >> workspace 설정 : spring_work >> Help >> Eclipse Marketplace : sts 검색

>> Spring Tools 3 Add-One for Spring Tools4 3.9.21. RELEASE >> Confirm(다음) >> 설치 후 STS 자동 재시작

 

-JSP 생성을 위한 설치

STS4 >> Help >> Eclipse Marketplace >> Eclipse Web 검색

>> Eclipse Enterprise Java and Web Edveloper Tools 3.24(JSP 포함된 것) : 기본으로 체크된 것만 설치

>> 설치 후 STS 자동 재시작

 

// 레거시 프로젝트 생성 가능, JSP 파일 정상적 생성 가능

BUT) 스프링 레거시 프로젝트 : Spring MVC Project 생성하려고 하면 오류 → 환경설정

 

(5-2) 환경설정

-Exception initialize 오류 잡기

sts-4.13.1.RELEASE 폴더 >> SpringToolSuite4.ini 메모장 열기 >>JDK 11 경로를 -vm 새로 입력해서 추가 후 저장

-vm
C:\soyun\_setup\jdk-11.0.14_windows-x64_bin\jdk-11.0.14\bin\javaw.exe

-(JDK를 옮겨두었던) 경로\javaw.exe

 (*집 : D:\setup\jdk-11.0.14\bin\javaw.exe)

 

-Convert 안 되는 오류 잡기

STS4 우클릭 속성 >> 대상 맨끝에 -clean 입력 >> 저장

C:\soyun\work\tools\sts-4.13.1.RELEASE\SpringToolSuite4.exe -clean

 

(6) 레거시 프로젝트 생성

-위의 과정을 제대로 이행했다면, 생성할 수 없던 오류 사라짐. 생성 가능.

파일 >> 프로젝트 생성 >> 스프링 >> 스프링 레거시 프로젝트 : 스프링 MVC Project 생성 / 이름 : t01

입력 : com.wsy.promvc

기타 설정 입력할 필요없이 알아서 만들어줌. pom.xml


3. 메이븐 프로젝트

-일일이 설정해보는 것. 필요한 것을 하나하나 입력해줌.

(1) 프로젝트 생성 및 설정

-Group Id : com.wsy

-Artifact Id : maven_webmvc

-packaging : WAR

 

(1-2) pom.xml 오류 잡기

메이븐 프로젝트 생성했을 때, pom.xml의<packaging>war</packaging> Error가 오류났던 이유 :

web.xml이 없어서 오류나는 것. >> 맞는 버전의 톰캣의 WEB-INF 복사 붙여넣기

>> (설치한) 톰캣9 - apache-tomcat-9.0.59 >> webapp >> ROOT >> WEB-INF 폴더 복사

>> STS의 프로젝트(maven_webmvc)의 src/main/webapp 폴더에 붙여넣기

 

(1-3) pom.xml에 입력 - 필요한 것들 준비하라고

pom.xml >> 아래 탭 메뉴 중 overview >> property : create >>

-Name : maven.compriler.source

-Value : 11

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.wsy</groupId>
  <artifactId>maven_webmvc</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <properties>
  	<!-- overview에서 create함으로써 자동 생성 -->
  	<maven.compiler.source>11</maven.compiler.source>
  	<!-- 위 코드 복붙해서 수정 :  source → target -->
  	<maven.compiler.target>11</maven.compiler.target>
  </properties>
</project>

 

(1-4) maven repository - 필요 라이브러리 추가

구글링 : maven repository >> tomcat-api, spring-webmvc 코드 복사 >> pom.xml

>> </packaging> 태그 아래에 <dependencies> 태그 만들어서 붙여넣기

-tomcat-api : 설치한 톰캣 버전에 맞는 것 : 9.0.59

-spring-webmvc : 최신버전인 5.2.19.RELEASE

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.wsy</groupId>
  <artifactId>maven_webmvc</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  <dependencies>
	<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-api -->
	<dependency>
		<groupId>org.apache.tomcat</groupId>
		<artifactId>tomcat-api</artifactId>
		<version>9.0.59</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>5.2.19.RELEASE</version>
	</dependency>
  
  </dependencies>
  <properties>
  	<!-- overview에서 create함으로써 자동 생성 -->
  	<maven.compiler.source>11</maven.compiler.source>
  	<!-- 위 코드 복붙해서 수정 :  source → target -->
  	<maven.compiler.target>11</maven.compiler.target>
  </properties>
</project>

(*STS >> Window >> perspective > Open perspective > Other : maven repository)

 

(1-5) Servers(서버) 설정

있다면 그대로 사용해도 되고, 삭제 후 재설정해도 됨.

서버 경로 : bin 폴더가 보이는 곳까지

(*학원 : C:\soyun\_setup\apache-tomcat-9.0.59)

(*집 : D:\setup\apache-tomcat-9.0.59)

 

(2) JSP 생성

src/main/webapp >> index.jsp 생성

(*만약 포트 충돌나면, 포트번호 수정하면 됨. 8080은 웹 오라클이 쓰는 번호)

 

>> 결과 출력

Hi

Hi만 출력되는 이유는 ${ data }의 data 값을 설정하지 않아서.

 

사용자 요청이 있을 때,

사용자 요청을 받아주는 서블릿(적합한 컨트롤러 실행토록 하고, 결과를 돌려주는)이 필요.

 

(3) Dispatcher

스프링이 제공하는 Disptacher 사용하겠다고 선언(?)해줘야 함.

프로젝트 >> maven dependencies >> spring-webmvc-5.2.19 RELEASE >> org.springframework.web.servlet

>> DispatcherServlet.class 우클릭 >> copy qualified name

>> 현재 프로젝트 >> src/main/webapp >> web.xml 파일에서 아래와 같이 설정

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="true">
  
  <servlet>
  	<servlet-name>dispatcher</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  
  <!-- 어떤 서블릿 url을 통과시키는가? 통과시킬 ??-->
  <servlet-mapping>
  	<servlet-name>dispatcher</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>

</web-app>

 

(3-2) url에 맞는 컨트롤러를 선택하도록 하는 작업 : IndexController 클래스 생성

-source folder : maven_webmvc/src/main/java

-package : com.wsy.webmvc.controller

-name : IndexController

>> implements Controller 입력 >> import >> 추상메소드 구현

>>

package com.wsy.webmvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class IndexController implements Controller {
	//리턴형이 ModelAndView
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		//객체 생성
		ModelAndView mv = new ModelAndView();
		mv.addObject("data", "Hello Spring MVC!");
		//index.jsp에 입력했던 ${data}에 Hello Spring MVC!를 넣는다는 의미
		mv.setViewName("index.jsp");
		//index.jsp에 데이터를 보낸다는 의미
		//index.jsp 위치 : webapp(루트 폴더)
		return mv;
		
		//연결해줘야 함(요즘엔 자동으로 연결해줌.)
		//이 컨트롤러를 선택하도록 설정. 로컬호스트(localhost)에서 index입력하면 선택되도록.
	}
}

(*경로 설정 : 맨앞에 슬래시(/)를 붙이면 루트 폴더(webapp)에서부터 찾음. 맨앞에 슬래시를 붙여주는게 좋음)

(*메이븐 프로젝트에서 루트 폴더 : webapp)

 

→ localhost에서 index 입력하면 선택되도록(이 컨트롤러 선택하도록) 설정

 

(3-3) dispatcher-servlet.xml 생성

src/main/webapp >> WEB-INF : xml 파일 생성 : dispatcher-servlet.xml

(이름 설정 중요함)

<?xml version="1.0" encoding="UTF-8"?>
<!-- 코드는 수업자료에서 복붙 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!-- (4)번에서 만든 IndexController를 빈으로 만듦 -->
<bean id="/index" class="com.wsy.webmvc.controller.IndexController"/>
</beans>

>> 실행(Run As)

index.jsp Hi
메이븐 프로젝트 : maven_webmvc
 우클릭 >> Run As 
http://localhost:8080/maven_webmvc/index
Hi Hello Wpring MVC!

 

(4) 컨텐트, 리스트 페이지 생성 및 연결

(4-1) JSP 페이지 생성

webapp(루트) 폴더에 생성

<!--List.jsp-->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>List Page</title>
</head>
<body>
	<p>List Page</p>
</body>
</html>

<!--Content.jsp-->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Content Page</title>
</head>
<body>
	<p>Content Page</p>
</body>
</html>

 

(4-2) Controller 클래스 생성 - ListController.java, ContentController.java

//ListController
package com.wsy.webmvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class ListController implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		return new ModelAndView("list.jsp");
	}
}
//ContentController
package com.wsy.webmvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class ContentController implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		return new ModelAndView("content.jsp");
	}
}

 

(6-3) 빈(bean) 등록 - dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 코드는 수업자료에서 복붙 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!-- (4)번에서 만든 IndexController를 빈으로 만듦 -->
<bean id="/index" class="com.wsy.webmvc.controller.IndexController"/>
<!-- (6-3) -->
<bean id="/list" class="com.wsy.webmvc.controller.ListController"/>
<bean id="/content" class="com.wsy.webmvc.controller.ContentController"/>
</beans>

 

>> 실행(Run As) : 결과 출력

http://localhost:8081/maven_webmvc/list | content | index 확인

→ 페이지 정상적으로 연결되는 것 확인

 

(7) 외부 접근 차단

원래 실행은 메이븐 프로젝트로 실행(Run As)하는 것 권유.

jsp 파일로도 실행되는데 jsp 파일로 실행되지 않도록 막는 법 : 외부에서 들여다 볼 수 없는 위치 이동.

>> WEB-INF/view/board 폴더 생성 >> list.jsp, content.jsp 옮기기

>> WEB-INF/view 폴더로 index.jsp 이동

>> index.jsp, list.jsp, content.jsp 접근하기위해 Index/List/ContentController 수정

//IndexController
package com.wsy.webmvc.controller;
...import...
public class IndexController implements Controller {
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

		ModelAndView mv = new ModelAndView();
		mv.addObject("data", "Hello Spring MVC!");
		mv.setViewName("/WEB-INF/view/index.jsp");

		return mv;
	}
}
//ListController
package com.wsy.webmvc.controller;
...import...
public class ListController implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		return new ModelAndView("/WEB-INF/view/board/list.jsp");
	}
}

//ContentController
package com.wsy.webmvc.controller;
...import...
public class ContentController implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		return new ModelAndView("/WEB-INF/view/board/content.jsp");
	}
}

└import 생략(공간 차지를 줄이기 위해)

└슬래시(/)는 루트 폴더(webapp)부터 적어줌.

 

>> 출력 : 메이븐 프로젝트 실행(Run As)

http://localhost:8081/maven_webmvc/ (+) index | list | content 입력해서 해당 JSP 페이지로 이동하는지 확인

 

(8) 경로 간소화

현재 경로 설정하는데 중복이 많음. 그것을 간소화하는 방법

//IndexController
mv.setViewName("/WEB-INF/view/index.jsp");

//ListController
return new ModelAndView("/WEB-INF/view/board/list.jsp");

//ContentController
return new ModelAndView("/WEB-INF/view/board/content.jsp");

 

>> Controller에서 공통 부분 생략

(8-1) Index/List/ContentController

//IndextController
package com.wsy.webmvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class IndexController implements Controller {
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

		ModelAndView mv = new ModelAndView();
		mv.addObject("data", "Hello Spring MVC!");
		mv.setViewName("index"); //논리 view name
		//prefix와 suffix로 진짜 이름 만든다. ResourceViewResolver 이용.
		//dispatcher-servlet.xml

		return mv;
	}
}

//ListController
package com.wsy.webmvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class ListController implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		return new ModelAndView("board/list");
	}
}

//ContentController
package com.wsy.webmvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class ContentController implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		return new ModelAndView("board/content");
	}
}

(8-2) dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 코드는 수업자료에서 복붙 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<!-- xml은 오타를 안 잡아주기 때문에 자바의 자동입력기능 활용 -->
<!-- 임의의 클래스에서 InternalResource... 자동완성 후, import한 것의 일부분 가져오기 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<!-- prefix는 경로, suffix는 확장자 -->
	<property name="prefix" value="/WEB-INF/view/"/>
	<property name="suffix" value=".jsp"/>
	<property name="order" value="1"/>
	<!-- 컨트롤러에 의해 리턴받는 방법이 여러 가지가 있는데, 위의 방법을 첫번째로 쓰겠단 의미 -->
	<!-- 논리 네임을 찾는 여러 가지 방법 중에서 위의 방법을 첫번째로 쓰겠다는 의미 -->
</bean>

<!-- (4)번에서 만든 IndexController를 빈으로 만듦 -->
<bean id="/index" class="com.wsy.webmvc.controller.IndexController"/>
<!-- (6-3) -->
<bean id="/list" class="com.wsy.webmvc.controller.ListController"/>
<bean id="/content" class="com.wsy.webmvc.controller.ContentController"/>
</beans>

>> 출력 : 메이븐 프로젝트 실행(Run As)

http://localhost:8081/maven_webmvc/ (+) index | list | content 입력해서 해당 JSP 페이지로 이동하는지 확인

 

(9) 정적인 파일

img나 css 파일 쓰는 법(*mytemplete 자료 이용)

-board 폴더 >> images 폴더 붙여넣기(이미지 자료 함께)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>List Page</title>
</head>
<body>
	<p>List Page</p>
	<img src="images/kirby1.jpg"/> <!--원래 이미지 참조하는 방식-->
</body>
</html>

└원래 이미지 참조하는 방식으로 하면 경로가 맞게 설정되어 있다고 해도 엑박

 

왜냐하면, Spring에서는 정적 파일을 막아두었기 때문

<!--web.xml-->
  <!-- 어떤 서블릿 rul을 통과시키는가? -->
  <servlet-mapping>
  	<servlet-name>dispatcher</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
/ /*
정적 파일 실행 막음 정적 파일 실행 막음 + jsp 파일 실행 막음

└정적 파일 실행(막아둔 정적 파일 실행을 해제)하려면 <mvc:resources> 등록

 

(9-1) 정적인 파일 실행하도록

-dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 코드는 수업자료에서 복붙 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/view/"/>
	<property name="suffix" value=".jsp"/>
	<property name="order" value="1"/>
</bean>

<mvc:resources location="resources" mapping="/**" />

<bean id="/index" class="com.wsy.webmvc.controller.IndexController"/>
<bean id="/list" class="com.wsy.webmvc.controller.ListController"/>
<bean id="/content" class="com.wsy.webmvc.controller.ContentController"/>
</beans>

-list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>List Page</title>
</head>
<body>
	<p>List Page</p>
    <!--경로설정 1-->
	<img src="resources/images/kirby1.jpg"/>
    <!-- dispatcher-servlet : <mvc:resources location="resources" mapping="/**" />
    	<bean id="/list" class="com.wsy.webmvc.controller.ListController"/>
    	호출 : http://localhost:8080/maven_webmvc/list -->
        
	<!--경로설정 2--><!--엑박 뜨는데?-->
	<img src="../resources/images/kirby1.jpg"/>
    <!-- dispatcher-servlet : <mvc:resources location="resources" mapping="/**" />
    	<bean id="/list" class="com.wsy.webmvc.controller.ListController"/>
    	호출 : http://localhost:8080/maven_webmvc/list -->

	<!--절대 경로-->
    <img src="images/kirby1.jpg"/>
    <!-- dispatcher-servlet : <mvc:resources location="/resources/" mapping="/**" />
    	<bean id="/list" class="com.wsy.webmvc.controller.ListController"/>
    	호출 : http://localhost:8080/maven_webmvc/list -->
</body>
</html>

 

>> 출력 : 메이븐 프로젝트 실행(Run As)
http://localhost:8081/maven_webmvc/list 입력해서 해당 JSP 페이지로 이동하는지 확인

(경로 2번이 안 되는데? 확인 필요)

 

(10) tiles

헤더, 푸터, 메뉴는 변하지 않고 내용만 바뀌는 것. <jsp:include >랑 비슷

하나의 레이아웃을 만들어 변경되는 내용만 바꿔치기. 최근에는 잘 안 씀(2017년 이후 업뎃 없음)

→ include 방식 사용(페이지가 바뀔 때마다 공통부분을 include / 기존 모델2 방식)

 

*페이지 구조를 그리는 게 front로 옮겨가는 게 추세. 타일은 비중 점차 약화?!

 

(10-1) 소스 복사 붙여넣기

>> mytemplete 자료 사용 : css, js 폴더 복사 >>  webapp >> resources 폴더 붙여넣기

>> index, board 폴더의 List, Content HTML 파일 코드를 <head> 이후 복사해서 바꿔치기

>> dispatcher-servlet.xml 경로 수정

<?xml version="1.0" encoding="UTF-8"?>
<!-- 코드는 수업자료에서 복붙 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/view/"/>
	<property name="suffix" value=".jsp"/>
	<property name="order" value="1"/>
</bean>

<mvc:resources location="resources" mapping="/**" />

<bean id="/index" class="com.wsy.webmvc.controller.IndexController"/>
<bean id="/board/list" class="com.wsy.webmvc.controller.ListController"/> <!--★-->
<bean id="/board/content" class="com.wsy.webmvc.controller.ContentController"/> <!--★-->
</beans>

>> Controller는 수정하지 않았음.

//List
package com.wsy.webmvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class ListController implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		return new ModelAndView("board/list");
	}
}
//Content
package com.wsy.webmvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class ContentController implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		return new ModelAndView("board/content");
	}
}

 

>> 출력 : 메이븐 프로젝트 실행(Run As)

>> http://localhost:8081/maven_webmvc/ (+) index | list | content 입력해서 해당 JSP 페이지로 이동하는지 확인

(현재 write 만들지 않아서 없음)

 

(10-2) tiles 지시서 작성 전에, 페이지 쪼개기

-list.jsp 예시)

① <nav> 태그 잘라내기 >> view 폴더 - inc 폴더 생성 >> header.jsp 생성해서 붙여넣기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
	<div class="container">

		<a class="navbar-brand" href="/index.html"> <i
			class="material-icons align-middle">android</i> <span
			class="align-middle">Logo</span>
		</a>

		<button class="navbar-toggler" type="button" data-toggle="collapse"
			data-target="#navbarSupportedContent"
			aria-controls="navbarSupportedContent" aria-expanded="false"
			aria-label="Toggle navigation">
			<span class="navbar-toggler-icon"></span>
		</button>

		<div class="collapse navbar-collapse" id="navbarSupportedContent">
			<ul class="navbar-nav mr-auto">
				<li class="nav-item active"><a class="nav-link"
					href="/index.html">Home</a></li>
				<li class="nav-item"><a class="nav-link"
					href="/member/join.html">회원가입</a></li>
				<li class="nav-item"><a class="nav-link"
					href="/member/login.html">로그인</a></li>
				<li class="nav-item"><a class="nav-link" href="#">로그아웃</a></li>

				<li class="nav-item dropdown"><a
					class="nav-link dropdown-toggle" href="#" id="navbarDropdown"
					role="button" data-toggle="dropdown" aria-haspopup="true"
					aria-expanded="false"> 내정보 관리 </a>
					<div class="dropdown-menu" aria-labelledby="navbarDropdown">
						<a class="dropdown-item" href="#">비밀번호 변경</a> <a
							class="dropdown-item" href="#">내정보 수정</a>
						<div class="dropdown-divider"></div>
						<a class="dropdown-item" href="#">회원탈퇴</a>
					</div></li>

				<li class="nav-item dropdown"><a
					class="nav-link dropdown-toggle" href="#" id="navbarDropdown"
					role="button" data-toggle="dropdown" aria-haspopup="true"
					aria-expanded="false"> 게시판 </a>
					<div class="dropdown-menu" aria-labelledby="navbarDropdown">
						<a class="dropdown-item" href="/board/boardList.html">게시판</a>
						<div class="dropdown-divider"></div>
						<a class="dropdown-item" href="#">갤러리</a>
					</div></li>

				<li class="nav-item dropdown"><a
					class="nav-link dropdown-toggle" href="#" id="navbarDropdown"
					role="button" data-toggle="dropdown" aria-haspopup="true"
					aria-expanded="false"> 채팅 서비스 </a>
					<div class="dropdown-menu" aria-labelledby="navbarDropdown">
						<a class="dropdown-item" href="#">심플 채팅</a>
						<div class="dropdown-divider"></div>
						<a class="dropdown-item" href="#">채팅방 목록</a>
					</div></li>

				<li class="nav-item"><a class="nav-link disabled" href="#"
					tabindex="-1" aria-disabled="true">Disabled</a></li>
			</ul>
			<form class="form-inline my-2 my-lg-0">
				<input class="form-control mr-sm-2" type="search" placeholder="검색"
					aria-label="Search">
				<button class="btn btn-outline-success my-2 my-sm-0" type="submit">검색</button>
			</form>
		</div>
	</div>
</nav>

② <footer> 태그 잘라내기 >> view 폴더 > inc 폴더 >> footer.jsp 생성 후 붙여넣기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<footer class="mt-5 py-5 bg-warning">
	<div class="container">
		<div class="row">
			<div class="col-12 col-md">
				<i class="material-icons display-4">android</i> <small
					class="d-block mb-3 text-muted">&copy; 2017-2021</small>
			</div>
			<div class="col-6 col-md">
				<h5>Features</h5>
				<ul class="list-unstyled text-small">
					<li><a class="text-muted" href="#">Cool stuff</a></li>
					<li><a class="text-muted" href="#">Random feature</a></li>
					<li><a class="text-muted" href="#">Team feature</a></li>
					<li><a class="text-muted" href="#">Stuff for developers</a></li>
					<li><a class="text-muted" href="#">Another one</a></li>
					<li><a class="text-muted" href="#">Last time</a></li>
				</ul>
			</div>
			<div class="col-6 col-md">
				<h5>Resources</h5>
				<ul class="list-unstyled text-small">
					<li><a class="text-muted" href="#">Resource</a></li>
					<li><a class="text-muted" href="#">Resource name</a></li>
					<li><a class="text-muted" href="#">Another resource</a></li>
					<li><a class="text-muted" href="#">Final resource</a></li>
				</ul>
			</div>
			<div class="col-6 col-md">
				<h5>About</h5>
				<ul class="list-unstyled text-small">
					<li><a class="text-muted" href="#">Team</a></li>
					<li><a class="text-muted" href="#">Locations</a></li>
					<li><a class="text-muted" href="#">Privacy</a></li>
					<li><a class="text-muted" href="#">Terms</a></li>
				</ul>
			</div>
		</div>
	</div>
</footer>

③ Vertical Nav 태그 잘라내기 >> view 폴더 - board 폴더 - inc 폴더 >> menu.jsp 생성 후 붙여넣기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<ul class="nav flex-column nav-pills">
	<li class="nav-item"><a class="nav-link active" href="#">Active</a>
	</li>
	<li class="nav-item"><a class="nav-link" href="#">Link</a></li>
	<li class="nav-item"><a class="nav-link" href="#">Link</a></li>
	<li class="nav-item"><a class="nav-link disabled" href="#"
		tabindex="-1" aria-disabled="true">Disabled</a></li>
</ul>

④ list.jsp를 복사해서 view/board/inc 붙여넣기 >> list.jsp 리네임 : layout.jsp

>> Contents area 내용 잘라내기 >> list.jsp에 붙여넣기

<!--layout.jsp-->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <!-- Google Fonts and Icons -->
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="../resources/css/bootstrap.css">
</head>
<body>
    <!-- Navbar   nav.fixed-top  -->
    <!-- end of Navbar -->

    <!-- middle container -->
    <div class="container mt-4">
      <div class="row">

        <!-- Left Menu -->
        <div class="col-sm-3">

          <!-- Vertical Nav -->
          <!-- end of Vertical Nav -->
        </div>
        <!-- end of Left Menu -->


        <!-- Right area -->
        <div class="col-sm-9">

          <!-- Contents area -->
          <!-- end of Contents area -->
        </div>
        <!-- end of Right area -->
      </div>
    </div>
    <!-- end of middle container -->

    <!-- FOOTER -->
    <!-- end of FOOTER -->

    <!-- JavaScript -->
    <script src="/resources/js/jquery-3.6.0.js"></script>
    <script src="/resources/js/bootstrap.js"></script>

</body>
</html>
<!--list.jsp-->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<div class="border border-info p-4 rounded">
	<h5>게시판 글목록</h5>

	<hr class="featurette-divider">

	<!-- 새글쓰기 버튼 -->
	<button type="button" class="btn btn-primary btn-sm float-right my-3"
		onclick="location.href = '/board/boardWrite.html';">
		<i class="material-icons align-middle">create</i> <span
			class="align-middle">새글쓰기</span>
	</button>

	<div class="clearfix"></div>

	<!-- 글목록 테이블 -->
	<table class="table table-hover" id="board">
		<thead>
			<tr>
				<th scope="col" class="text-center">번호</th>
				<th scope="col" class="text-center">제목</th>
				<th scope="col" class="text-center">작성자</th>
				<th scope="col" class="text-center">작성일</th>
				<th scope="col" class="text-center">조회수</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td class="text-center">10</td>
				<td><a href="/board/boardContent.html">Lorem ipsum dolor
						sit amet, consectetur adipiscing elit.</a></td>
				<td class="text-center">user1</td>
				<td class="text-center">2021.08.20</td>
				<td class="text-center">15000</td>
			</tr>
			<tr>
				<td class="text-center">9</td>
				<td>Vivamus viverra porttitor commodo.</td>
				<td class="text-center">user1</td>
				<td class="text-center">2021.08.20</td>
				<td class="text-center">150</td>
			</tr>
			<tr>
				<td class="text-center">8</td>
				<td>In pulvinar fermentum erat a tincidunt. Nulla id magna sit
					...</td>
				<td class="text-center">user1</td>
				<td class="text-center">2021.08.20</td>
				<td class="text-center">15000</td>
			</tr>
			<tr>
				<td class="text-center">7</td>
				<td>Sed diam velit, dictum a iaculis sed, tempor sed mi.</td>
				<td class="text-center">user1</td>
				<td class="text-center">2021.08.20</td>
				<td class="text-center">150</td>
			</tr>
			<tr>
				<td class="text-center">6</td>
				<td>Nullam ac dignissim diam. Mauris vitae magna ipsum,</td>
				<td class="text-center">user1</td>
				<td class="text-center">2021.08.20</td>
				<td class="text-center">15</td>
			</tr>
			<tr>
				<td class="text-center">5</td>
				<td>eget vehicula metus. In euismod sollicitudin lorem eu.</td>
				<td class="text-center">user1</td>
				<td class="text-center">2021.08.20</td>
				<td class="text-center">15000</td>
			</tr>
			<tr>
				<td class="text-center">4</td>
				<td>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</td>
				<td class="text-center">user1</td>
				<td class="text-center">2021.08.20</td>
				<td class="text-center">1500</td>
			</tr>
			<tr>
				<td class="text-center">3</td>
				<td>Vivamus viverra porttitor commodo.</td>
				<td class="text-center">user1</td>
				<td class="text-center">2021.08.20</td>
				<td class="text-center">15</td>
			</tr>
			<tr>
				<td class="text-center">2</td>
				<td>In pulvinar fermentum erat a tincidunt. Nulla id magna sit
					...</td>
				<td class="text-center">user1</td>
				<td class="text-center">2021.08.20</td>
				<td class="text-center">15</td>
			</tr>
			<tr>
				<td class="text-center">1</td>
				<td>Nullam ac dignissim diam. Mauris vitae magna ipsum,</td>
				<td class="text-center">user1</td>
				<td class="text-center">2021.08.20</td>
				<td class="text-center">150</td>
			</tr>
		</tbody>
	</table>

	<!-- pagination area -->
	<nav aria-label="Page navigation example">
		<ul class="pagination justify-content-center my-4">
			<li class="page-item disabled"><a class="page-link"
				href="#board">이전</a></li>
			<li class="page-item active"><a class="page-link" href="#board">1</a></li>
			<li class="page-item"><a class="page-link" href="#board">2</a></li>
			<li class="page-item"><a class="page-link" href="#board">3</a></li>
			<li class="page-item"><a class="page-link" href="#board">4</a></li>
			<li class="page-item"><a class="page-link" href="#board">5</a></li>
			<li class="page-item"><a class="page-link" href="#board">다음</a></li>
		</ul>
	</nav>
	<!-- end of pagination area -->

	<hr class="featurette-divider">

	<!-- Search area -->
	<form class="form-inline justify-content-center my-4">

		<div class="form-group mx-3">
			<label for="searchType">검색 조건</label> <select
				class="form-control mx-2" id="searchType" name="type">
				<option value="" disabled selected>--</option>
				<option value="T">제목</option>
				<option value="C">내용</option>
				<option value="W">작성자</option>
			</select>
		</div>

		<label for="searchKeyword">검색어</label> <input type="search"
			class="form-control mb-2 mr-sm-2 mx-2" id="searchKeyword"
			placeholder="검색어" name="keyword">

		<button type="submit" class="btn btn-primary mb-2">
			<i class="material-icons align-middle">search</i> <span
				class="align-middle">검색</span>
		</button>
	</form>
	<!-- end of Search area -->
</div>

 

(+) content.jsp, write.jsp도 똑같이 해주기. contents area만 남기기

 

(10-3) Tiles 지시서

Apache Tiles - Home >> documentation >> 3.0 >> tutorial >> creating tile page >> create a definition의 코드 복사

>> WEB-INF  폴더 우클릭 >>xml 파일 생성 >> tiles.xml 생성한 뒤 붙여넣기

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<!-- 내 프로젝트에 맞게 수정 -->
<!-- Controller 경로 설정에서 슬래시(/)만 점(.)으로 변경 -->
<!-- template="위치/파일이름" -->
  <definition name="board.list" template="/WEB-INF/view/board/inc/layout.jsp">
    <put-attribute name="title" value="Tiles tutorial homepage" />
    <put-attribute name="header" value="/WEB-INF/view/inc/header.jsp" />
    <put-attribute name="menu" value="/WEB-INF/view/board/inc/menu.jsp" />
    <put-attribute name="body" value="/WEB-INF/view/board/list.jsp" />
    <put-attribute name="footer" value="/WEB-INF/view/inc/footer.jsp" />
  </definition>
</tiles-definitions>

 

(10-4) maven_repository

-JSTL

JSTL 검색 >> 4번 JavaServer Pages(TM) Standard Tag Library >> javax.servlet.jsp.jstl >> 버전 1.2 >> 코드 복사 >> pom.xml에 붙여넣기

 

-Tiles jsp support

tiles jsp support 검색 >> 3.0.8  : 코드 그룹아이디가 org.apache.tiles인 것 >> 코드 복사해서 pom.xml 붙여넣기

 

→ layout.jsp에서 uri 설정 자동완성됨. (*자동완성된다는 것은 필요한 jstl이 준비되었다는 뜻)

 

(10-5) layout.jsp에서 tiles 설정하기

tiles.xml에서 설정한 이름과 같아야 함.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<!-- pome.xml에 javax.servlet과 tiles 넣어줘야 함. -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <!-- Google Fonts and Icons -->
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="../resources/css/bootstrap.css">
</head>
<body>
    <!-- Navbar   nav.fixed-top  -->
    <tiles:insertAttribute name="header"/> <!--★-->
    <!-- end of Navbar -->

    <!-- middle container -->
    <div class="container mt-4">
      <div class="row">

        <!-- Left Menu -->
        <div class="col-sm-3">

          <!-- Vertical Nav -->
          <tiles:insertAttribute name="menu"/> <!--★-->
          <!-- end of Vertical Nav -->
        </div>
        <!-- end of Left Menu -->

        <!-- Right area -->
        <div class="col-sm-9">

          <!-- Contents area -->
          <tiles:insertAttribute name="body"/> <!--★-->
          <!-- end of Contents area -->
        </div>
        <!-- end of Right area -->
      </div>
    </div>
    <!-- end of middle container -->

    <!-- FOOTER -->
	<tiles:insertAttribute name="footer"/> <!--★-->    
    <!-- end of FOOTER -->



    <!-- JavaScript -->
    <script src="/resources/js/jquery-3.6.0.js"></script>
    <script src="/resources/js/bootstrap.js"></script>

</body>
</html>

>> ListController 수정

package com.wsy.webmvc.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class ListController implements Controller {

	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//		return new ModelAndView("board/list"); //viewResolver 사용
		return new ModelAndView("board.list"); //tiles 사용
	}
}

 

>> dispatcher-servlet.xml 수정

(기존에) 요청이 들어오면, 디스패쳐-서블릿이 뷰리졸브로 처리.

타일로 찾아가는 방법은 어떻게?

dispatcher-sevlet.xml에서 xml에서 일일이 치지말고 아무 클래스 가서 자동완성해서 임포트 내용만 카피

urlbaseviewresolver : org.springframework.web.servlet.view.UrlBasedViewResolver

tilesviewresolver : org.springframework.web.servlet.view.tiles3.TilesView

TilesConfigurer : org.springframework.web.servlet.view.InternalResourceViewResolver

<?xml version="1.0" encoding="UTF-8"?>
<!-- 코드는 수업자료에서 복붙 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/view/"/>
	<property name="suffix" value=".jsp"/>
	<property name="order" value="2"/>
</bean>

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
	<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
	<property name="order" value="1"/>
</bean>

<bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
	<property name="definitions" value="/WEB-INF/tiles.xml" /> <!-- 파일 위치 -->
</bean>

<mvc:resources location="resources" mapping="/**" />

<bean id="/index" class="com.wsy.webmvc.controller.IndexController"/>
<bean id="/board/list" class="com.wsy.webmvc.controller.ListController"/>
<bean id="/board/content" class="com.wsy.webmvc.controller.ContentController"/>
</beans>

 

(+) content랑 write까지 변경

(...변경한 내용 추후 추가...)

 

>> 출력 : 메이븐 프로젝트 실행(Run As)
http://localhost:8081/maven_webmvc/board/ (+) index | list | content 입력해서 해당 JSP 페이지로 이동하는지 확인

 

(10-6) Content, Write도 tiles로 해보기

...

(10-7) tiles.xml 간단하게 쓰는 법.

...

(10-8) index도 해보기

...

layout 만들어서 잘라내야 함. 위의 과정 반복.

 


오늘 했던 설정들을

내일은 자동설정으로 사용해볼 것. - legacy Project

 

END

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함