KITRI/SPRING

μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬ - [Spring] νƒ€μΌμ¦ˆ(Tiles) μ„€μ •ν•˜κΈ°

λ˜νš¨λ‹ˆ 2020. 8. 4. 10:59

νƒ€μΌμ¦ˆ(Tiles)λž€?

 

νƒ€μΌμ¦ˆλŠ” 타일듀을 λΆ™μ΄λŠ” 것과 같이 각각의 μ˜μ—­μ„ λΆ™μ—¬μ„œ ν•˜λ‚˜μ˜ μ›ΉνŽ˜μ΄μ§€μ˜ 화면을 κ΅¬μ„±ν•˜λŠ” λΌμ΄λΈŒλŸ¬λ¦¬μ΄λ‹€.

μ›Ή νŽ˜μ΄μ§€μ˜ μ˜μ—­μ€ 크게 header, content, left, nav, footer둜 λ‚˜λˆ„μ–΄μ§€λ©°, μ—¬λŸ¬ μ›Ή νŽ˜μ΄μ§€μ—μ„œ 이 μ˜μ—­λ“€μ„ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ 각각의 μ˜μ—­μ„ νƒ€μΌμ¦ˆ νƒœκ·Έλ‘œ μ§€μ •ν•˜μ—¬ νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€. 

 

pom.xml

tiles2λ₯Ό μ“°κΈ° μœ„ν•΄μ„œ pom.xml에 tiles-core, tiles-servlet, tiles-jsp κ°€μ Έμ˜€κΈ°

ν•΄λ‹Ή url의 λ‚΄μš©μ„ pom.xml에 λΆ™μ—¬λ„£λŠ”λ‹€.

 

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.java</groupId>
	<artifactId>homgPage</artifactId>
	<name>06_MavenSpringMVC</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>
	<properties>
		<java-version>1.6</java-version>
		<org.springframework-version>3.1.1.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>
				
		<!-- AspectJ -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>${org.aspectj-version}</version>
		</dependency>	
		
		<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
			<exclusions>
				<exclusion>
					<groupId>javax.mail</groupId>
					<artifactId>mail</artifactId>
				</exclusion>
				<exclusion>
					<groupId>javax.jms</groupId>
					<artifactId>jms</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jdmk</groupId>
					<artifactId>jmxtools</artifactId>
				</exclusion>
				<exclusion>
					<groupId>com.sun.jmx</groupId>
					<artifactId>jmxri</artifactId>
				</exclusion>
			</exclusions>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</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>
	
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>      
		
		<!-- Library μΆ”κ°€ -->
		<!-- JSTL -->
		<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>jstl</artifactId>
		    <version>1.2</version>
		</dependency>
		
		<!-- STANDARD -->
		<!-- https://mvnrepository.com/artifact/taglibs/standard -->
		<dependency>
		    <groupId>taglibs</groupId>
		    <artifactId>standard</artifactId>
		    <version>1.1.2</version>
		</dependency>
		
		<!-- AOP -->
		<!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
		<dependency>
		    <groupId>aopalliance</groupId>
		    <artifactId>aopalliance</artifactId>
		    <version>1.0</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
		<dependency>
		    <groupId>org.aspectj</groupId>
		    <artifactId>aspectjweaver</artifactId>
		    <version>1.8.13</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/cglib/cglib -->
		<dependency>
		    <groupId>cglib</groupId>
		    <artifactId>cglib</artifactId>
		    <version>2.2.2</version>
		</dependency>
		
		<!-- DB / spring jdbc, mybatis, spring mybatis, oracle(tomcat server) C:\sohyunkim\spring\apache-tomcat-9.0.35\bin -->
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-jdbc</artifactId>
		    <version>3.0.5.RELEASE</version>
		</dependency>
				
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis</artifactId>
		    <version>3.4.6</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis-spring</artifactId>
		    <version>1.3.2</version>
		</dependency>
		
		
		<!-- Download / -->
		<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>1.3.2</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
		<dependency>
		    <groupId>commons-fileupload</groupId>
		    <artifactId>commons-fileupload</artifactId>
		    <version>1.3.3</version>
		</dependency>
		
		<!-- template -->
		<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-jsp -->
		<dependency>
		    <groupId>org.apache.tiles</groupId>
		    <artifactId>tiles-jsp</artifactId>
		    <version>2.2.2</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-servlet -->
		<dependency>
		    <groupId>org.apache.tiles</groupId>
		    <artifactId>tiles-servlet</artifactId>
		    <version>2.2.2</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-core -->
		<dependency>
		    <groupId>org.apache.tiles</groupId>
		    <artifactId>tiles-core</artifactId>
		    <version>2.2.2</version>
		</dependency>
		
		<!-- POOL -->
		<!-- https://mvnrepository.com/artifact/commons-pool/commons-pool -->
		<dependency>
		    <groupId>commons-pool</groupId>
		    <artifactId>commons-pool</artifactId>
		    <version>1.6</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
		<dependency>
		    <groupId>commons-dbcp</groupId>
		    <artifactId>commons-dbcp</artifactId>
		    <version>1.4</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/commons-collections/commons-collections -->
		<dependency>
		    <groupId>commons-collections</groupId>
		    <artifactId>commons-collections</artifactId>
		    <version>3.2.1</version>
		</dependency>

		
	</dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <additionalProjectnatures>
                        <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                    </additionalProjectnatures>
                    <additionalBuildcommands>
                        <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                    </additionalBuildcommands>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArgument>-Xlint:all</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <configuration>
                    <mainClass>org.test.int1.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

WEB-INF/template 폴더 μƒμ„±ν•œ ν›„ footer.jsp, header.jsp, layout.jsp, menu.jsp νŒŒμΌμ„ 생성해쀀닀.

 

ν…œν”Œλ¦Ώμ—μ„œ 폴더 μž‘μ„± template 

contentλŠ” λ³΄λ‚΄μ£ΌλŠ” κ²ƒμ΄κΈ°λ•Œλ¬Έμ— μž‘μ„± X

 

layout.jsp둜 κ°€μ„œ μž‘μ„±ν•΄μ€€λ‹€.

 

servlet-context.xml

λ·° 리쑸버λ₯Ό μ„€μ •ν•΄μ€€λ‹€. tiles κ΄€λ ¨ 섀정을 μž‘μ„±ν•΄μ€€λ‹€. 

Maven Dependencies > spring-webmvc-3.1.1.RELEASE.jar μ•ˆμ˜ org.springframework.web.servlet.view.tiles2

<?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"
	xmlns:aop="http://www.springframework.org/schema/aop"
	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
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.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/" />
	<resources mapping="/css/**" location="/css/" />
	<resources mapping="/javascript/**" location="/javascript/" />
	
    <!-- μ£Όμ„μœΌλ‘œ λ‹«μ•„μ£ΌκΈ°  -->
	<!-- 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:bean> -->

	<!-- Tiles2 μΆ”κ°€ -->
	<!-- Tiles μ„€μ • 파일 -->
	<beans:bean id ="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
		<beans:property name="definitions">
			<beans:list>
				<beans:value>/WEB-INF/tiles/tiles.xml</beans:value>
			</beans:list>
		</beans:property>
	</beans:bean>
	
	<!-- Tiles2 λ·° 리쑸버 -->
	<beans:bean id ="tilesViewResolver" class="org.springframework.web.servlet.view.tiles2.TilesViewResolver">
		<beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
	</beans:bean>
	
	<!-- DI -->
	<context:component-scan base-package="com.java..*" />
	
	<!-- AOP -->
	<aop:aspectj-autoproxy/>
	
	<!-- FileUpload -->
	<beans:bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
	<beans:property name="maxUploadSize" value="502400"/>
	<!-- 102400 -->
	<beans:property name="defaultEncoding" value="utf-8"/>
	</beans:bean>
	
</beans:beans>

 

WEB-INF/tiles 폴더λ₯Ό 생성해쀀닀. 

tiles.xmlνŒŒμΌμ„ μƒμ„±ν•œλ‹€. 

 

https://tiles.apache.org/framework/tiles-core/dtddoc/tiles-config_3_0.dtd.html

 

DTD for the Tiles Definition File, Version 3.0

Project Tiles has retired. For details please refer to its Attic page. DTD for the Tiles Definition File, Version 3.0 tiles-config_3_0.dtd: Elements - Entities - Source | Intro - Index FRAMES / NO FRAMES DTD for the Tiles Definition File, Version 3.0 Usa

tiles.apache.org

μœ„μ˜ λ§ν¬μ—μ„œ λ³΅μ‚¬ν•œ Doctype을 μ‚½μž…

<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">

 

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>
   <definition name="layout" template="/WEB-INF/template/layout.jsp">
      <put-attribute name="header" value="/WEB-INF/template/header.jsp"/>
      <put-attribute name="menu" value="/WEB-INF/template/menu.jsp"/>
      <put-attribute name="content" value=""/>
      <put-attribute name="foot" value="/WEB-INF/template/footer.jsp"/>
   </definition>
   
   <!-- content -->
   <definition name="*.tiles" extends="layout">
   		<put-attribute name="content" value="/WEB-INF/views/{1}.jsp"></put-attribute>
   </definition>

   <definition name="*/*.tiles" extends="layout">
   		<put-attribute name="content" value="/WEB-INF/views/{1}/{2}.jsp"></put-attribute>
   </definition>

   <definition name="*/*/*.tiles" extends="layout">
   		<put-attribute name="content" value="/WEB-INF/views/{1}/{2}/{3}.jsp"></put-attribute>
   </definition>
   
   <!-- tiles μ œμ™Έ μ‹œν‚¨λ‹€ -->
   <definition name="empty" template="/WEB-INF/template/empty.jsp">
   		<put-attribute name="content" value=""/>
   </definition>

   <definition name="*/*.empty" extends="empty">
   		<put-attribute name="content" value="/WEB-INF/views/{1}/{2}.jsp"/>
   </definition>
</tiles-definitions>

μ΄λ ‡κ²Œ μ„€μ •ν•˜κ³  λ‚œ ν›„ contentλŠ” λΉ„μ›Œλ‘κ³  layout.jsp둜 κ°€μ„œ μž‘μ„±ν•΄μ€€λ‹€. 

 

menu.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:set var="root" value="${pageContext.request.contextPath}"/>
	<c:set var = "id" value="${id}" scope="session"/>
	
	<a href="${root}/member/test.do">Spring MVC Start!!!</a>
	
	<c:if test="${memberLevel==null}">
		<h3>νšŒμ›κ΄€λ¦¬</h3>
			<a href="${root}/member/register.do">νšŒμ›κ°€μž…</a>
		<h3>둜그인</h3>
			<a href="${root}/member/login.do">둜그인</a>
	</c:if>
	
	<c:if test="${memberLevel!=null}">
    	<a href="${root}/member/delete.do">νšŒμ›νƒˆν‡΄</a>
    	<a href="${root}/member/update.do">νšŒμ›μˆ˜μ •</a>
  		<a href="${root}/member/logout.do">λ‘œκ·Έμ•„μ›ƒ</a>	
  		
  		<c:if test="${memberLevel=='MA'}">
  			<h3>κ΄€λ¦¬μž νŽ˜μ΄μ§€</h3>
  			<a href="">νšŒμ›κ΄€λ¦¬</a>
  		</c:if>
   </c:if>
   
   <br/><br/>
   
   <h3>파일 κ²Œμ‹œνŒ</h3>
   <a href="${root}/fileBoard/write.do">νŒŒμΌκ²Œμ‹œνŒ μ“°κΈ°</a>
  	<br/><br/>
  	
  	<a href="${root}/fileBoard/list.do">파일 리슀트</a> 
</body>
</html>

 

footer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3 style="color:red">FOOT</h3>
</body>
</html>

 

header.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h3 style="color:blue">header</h3>
</body>
</html>

 

layout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- header -->
	<tiles:insertAttribute name="header"/>
	<hr color="red"/>
	<!-- menu -->
	<tiles:insertAttribute name="menu"/>
	<hr color="pink"/>
	
	<!-- 계속 λ°”λ€ŒλŠ” λ‚΄μš©λΆ€ -->
	<tiles:insertAttribute name="content"/>
	<hr color="blue"/>
	
	<!-- foot -->
	<tiles:insertAttribute name="foot"/>
</body>
</html>

 

Controller 파일둜 κ°€μ„œ ν™•μž₯자λ₯Ό .tiles λ‘œ λ°”κΏ”μ£Όμ–΄μ•Όμ§€ ν…œν”Œλ¦Ώμ΄ μ μš©λœλ‹€. μ²˜μŒλΆ€ν„° ν…œν”Œλ¦Ώμ„ κ±Έκ³  μž‘μ„±ν•˜λŠ” 것이 μ’‹λ‹€.

 

[com.java.homePage] HomeController.java

package com.java.homePage;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home.tiles";
	}
	
}

 

[com.java.member.controller] MemberController.java

package com.java.member.controller;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import org.springframework.web.servlet.view.InternalResourceView;

import com.java.aop.HAspect;
import com.java.member.dto.MemberDto;
import com.java.member.service.MemberService;

@Controller
public class MemberController{	//Command
	@Autowired
	private MemberService memberService;
	
	@RequestMapping(value="/member/test.do", method=RequestMethod.GET)
	public ModelAndView testing(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("OK");
		
		//Service - Dao / Dto - Service
		//μ΅œμƒμœ„ ν΄λž˜μŠ€λŠ” View
		/*
		InternalResourceView view = new InternalResourceView("/WEB-INF/member/test.jsp");
		ModelAndView mav = new ModelAndView();
		mav.addObject("msg", "hi");
		mav.setView(view);
		*/
		
		//λ‹€μ–‘ν•œ μƒμ„±μžκ°€ μžˆκΈ°μ— 그에 λ§žμΆ°μ„œ μ‚¬μš©!!!
		//ModelAndView mav = new ModelAndView(view);
		ModelAndView mav = new ModelAndView("member/test.tiles");
		mav.addObject("msg", "hi");
		
		return mav;
	}
	
	@RequestMapping(value="/member/register.do", method=RequestMethod.GET)
	public ModelAndView memberRegister(HttpServletRequest request, HttpServletResponse response) {
		return new ModelAndView("member/register.tiles");
	}
	
	@RequestMapping(value="/member/registerOk.do", method=RequestMethod.POST)
	public ModelAndView memberRegisterOk(HttpServletRequest request, HttpServletResponse response, MemberDto memberDto) {
		HAspect.logger.info(HAspect.logMsg + memberDto.toString());
		
		ModelAndView mav = new ModelAndView();
		mav.addObject("memberDto", memberDto);
		
		memberService.memberRegisterOk(mav);
		
		return mav;
	}
	
	@RequestMapping(value="/member/idCheck.do", method=RequestMethod.GET)
	public ModelAndView memberidCheck(HttpServletRequest request, HttpServletResponse response) {
		ModelAndView mav = new ModelAndView();
		mav.addObject("request", request);
		
		memberService.memberidCheck(mav);
		
		return mav;
	}
	
	@RequestMapping(value="/member/zipcode.do", method=RequestMethod.GET)
	public ModelAndView memberZipcode(HttpServletRequest request, HttpServletResponse response) {
		ModelAndView mav = new ModelAndView();
		mav.addObject("request", request);
		
		memberService.memberZipcode(mav);
		
		return mav;
	}
	
	@RequestMapping(value="/member/login.do", method=RequestMethod.GET)
	public ModelAndView memberLogin(HttpServletRequest request, HttpServletResponse response) {
		return new ModelAndView("member/login.tiles");
	}
	
	@RequestMapping(value="/member/loginOk.do", method=RequestMethod.POST)
	public ModelAndView memberLoginOk(HttpServletRequest request, HttpServletResponse response) {
		
		ModelAndView mav = new ModelAndView();
		mav.addObject("request", request);
		memberService.memberloginOk(mav);
		
		return mav;
	}
	
	@RequestMapping(value="/member/main.do", method=RequestMethod.GET)
	public ModelAndView main(HttpServletRequest request, HttpServletResponse response) {
		
		ModelAndView mav = new ModelAndView();
		mav.addObject("request", request);
		memberService.main(mav);
		
		return mav;
	}
	
	@RequestMapping(value="/member/logout.do", method=RequestMethod.GET)
	public ModelAndView memberLogout(HttpServletRequest request, HttpServletResponse response) {
		ModelAndView mav = new ModelAndView();
		mav.addObject("request", request);
		memberService.memberloginOut(mav);
		return mav;
	}
	
	@RequestMapping(value="/member/update.do", method=RequestMethod.GET)
	public ModelAndView memberUpdate(HttpServletRequest request, HttpServletResponse response) {
		//select μΆ”κ°€
		
		ModelAndView mav = new ModelAndView();
		mav.addObject("request", request);
		memberService.memberUpdate(mav);
		
		return mav;
	}
	
	@RequestMapping(value="/member/updateOk.do", method=RequestMethod.POST)
	public ModelAndView memberUpdateOk(HttpServletRequest request, HttpServletResponse response) {
		ModelAndView mav = new ModelAndView();
		mav.addObject("request", request);
		//memberService.memberUpdate(mav);
		return mav;
	}	
}

 

[com.java.member.service] MemberServiceImp.java

package com.java.member.service;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;

import com.java.aop.HAspect;
import com.java.member.dao.MemberDao;
import com.java.member.dto.MemberDto;
import com.java.member.dto.ZipcodeDto;

//κ΅¬ν˜„ 클래슀

@Component
public class MemberServiceImp implements MemberService {
	@Autowired
	private MemberDao memberDao;

	@Override
	public void memberRegisterOk(ModelAndView mav) {
		Map<String, Object> map = mav.getModelMap();
		MemberDto memberDto = (MemberDto)map.get("memberDto");
		
		memberDto.setMemberLevel("BA");
		
		int check = memberDao.memberinsert(memberDto);
		HAspect.logger.info(HAspect.logMsg + check);
		
		mav.addObject("check", check);
		mav.setViewName("member/registerOk.tiles");
		
	}
	
	@Override
	public void memberidCheck(ModelAndView mav) {
		Map<String, Object> map = mav.getModelMap();
		HttpServletRequest request = (HttpServletRequest)map.get("request");
		
		String id = request.getParameter("id");
		HAspect.logger.info(HAspect.logMsg + id);
		
		int check = memberDao.memberidCheck(id);
		HAspect.logger.info(HAspect.logMsg + check);
	
		mav.addObject("check", check);
		mav.addObject("id", id);
		mav.setViewName("member/idCheck.empty");
	}
	
	@Override
	public void memberZipcode(ModelAndView mav) {
		Map<String, Object> map = mav.getModelMap();
		HttpServletRequest request = (HttpServletRequest) map.get("request");
		
		String dong = request.getParameter("dong");
		
		if(dong!=null) {
			List <ZipcodeDto> zipcodeDto = memberDao.zipcode(dong);
			HAspect.logger.info(HAspect.logMsg + zipcodeDto.size());
			
			mav.addObject("zipcodeList", zipcodeDto);
		}
		mav.setViewName("member/zipcode.empty");
	}
	
	@Override
	public void memberlogin(ModelAndView mav) {
		// TODO Auto-generated method stub
		
	}
	
	
	@Override
	public void memberloginOk(ModelAndView mav) {
		Map<String, Object> map = mav.getModelMap();
		HttpServletRequest request = (HttpServletRequest)map.get("request");
		
		String id = request.getParameter("id");
		String password=request.getParameter("password");
		int check = memberDao.loginOk(id, password);
		HAspect.logger.info(HAspect.logMsg + check);
		
		mav.addObject("id", id);
		mav.addObject("password", password);
		mav.addObject("memberLevel", "BB");
		mav.setViewName("member/loginOk.tiles");
	}
	
	@Override
	public void main(ModelAndView mav) {
		mav.setViewName("member/main.tiles");
	}
	
	@Override
	public void memberloginOut(ModelAndView mav) {
		Map<String, Object> map = mav.getModelMap();
		HttpServletRequest request = (HttpServletRequest)map.get("request");
		
		String id = request.getParameter("id");
		String password=request.getParameter("password");
		int check = memberDao.loginOk(id, password);
		HAspect.logger.info(HAspect.logMsg + check);
		
		mav.addObject("id", id);
		mav.addObject("password", password);
		mav.addObject("memberLevel", "BB");
		mav.setViewName("member/logout.tiles");
		
	}
	@Override
	public void memberUpdate(ModelAndView mav) {
		Map<String, Object> map = mav.getModelMap();
		HttpServletRequest request = (HttpServletRequest)map.get("request");
		
		String id = request.getParameter("id");
		String password=request.getParameter("password");
		//int check = memberDao.loginOk(id, password);
		HAspect.logger.info(HAspect.logMsg + id + "@@" + password);
		
		mav.addObject("id", id);
		mav.setViewName("member/update.tiles");
		
	}
	
	@Override
	public void memberUpdateOk(ModelAndView mav) {
		Map<String, Object> map = mav.getModelMap();
		HttpServletRequest request = (HttpServletRequest)map.get("request");
		
		String id = request.getParameter("id");
		String password=request.getParameter("password");
		int check = memberDao.loginOk(id, password);
		HAspect.logger.info(HAspect.logMsg + check);
		
		mav.addObject("id", id);
		mav.addObject("password", password);
		mav.addObject("memberLevel", "BB");
		mav.setViewName("member/updateOk.tiles");
		
	}	
}

 

 

idCheck.jsp, zipcode.jsp μ˜ κ²½μš°μ—λŠ” template이 적용되면 μ•ˆλ˜κΈ°λ•Œλ¬Έμ—

tempate폴더에 empty.jspνŒŒμΌμ„ 생성해쀀닀.

 

empty.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<tiles:insertAttribute name="content"/>
</body>
</html>

 

tiles.xml

μ—μ„œ .empty νŒŒμΌμ— λŒ€ν•œ 섀정을 μΆ”κ°€λ‘œ ν•΄μ€€λ‹€.

<?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>
   <definition name="layout" template="/WEB-INF/template/layout.jsp">
      <put-attribute name="header" value="/WEB-INF/template/header.jsp"/>
      <put-attribute name="menu" value="/WEB-INF/template/menu.jsp"/>
      <put-attribute name="content" value=""/>
      <put-attribute name="foot" value="/WEB-INF/template/footer.jsp"/>
   </definition>
   
   <!-- content -->
   <definition name="*.tiles" extends="layout">
   		<put-attribute name="content" value="/WEB-INF/views/{1}.jsp"></put-attribute>
   </definition>

   <definition name="*/*.tiles" extends="layout">
   		<put-attribute name="content" value="/WEB-INF/views/{1}/{2}.jsp"></put-attribute>
   </definition>

   <definition name="*/*/*.tiles" extends="layout">
   		<put-attribute name="content" value="/WEB-INF/views/{1}/{2}/{3}.jsp"></put-attribute>
   </definition>
   
   <!-- tiles μ œμ™Έ μ‹œν‚¨λ‹€ -->
   <definition name="empty" template="/WEB-INF/template/empty.jsp">
   		<put-attribute name="content" value=""/>
   </definition>

   <definition name="*/*.empty" extends="empty">
   		<put-attribute name="content" value="/WEB-INF/views/{1}/{2}.jsp"/>
   </definition>
</tiles-definitions>
λ°˜μ‘ν˜•