๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปStudy/Spring

์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์„œ๋น„์Šค ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ธฐ(@Service) / ์ปจํŠธ๋กค๋Ÿฌ ์ •๋ฆฌํ•˜๊ธฐ (@Controller)

์ด์ „ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ƒ์„ฑ๋œ ๊ฐ์ฒด์— DI๋งŒ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ๋‹ค๋ฉด, ์ด๋ฒˆ์—๋Š” ๊ฐ์ฒด ์ƒ์„ฑ๊นŒ์ง€ ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

service-context.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"
	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 http://www.springframework.org/schema/context/spring-context-4.3.xsd"> 
        
    <!-- <context:annotation-config /> --> <!-- ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ์–ด๋…ธํ…Œ์ด์…˜(autowired)์„ ํ†ตํ•ด set ํ•ด๋‹ฌ๋ผ๋Š” ํƒœ๊ทธ -->
    <context:component-scan base-package="com.newlecture.web.service"></context:component-scan>
    <!-- base-package ์•ˆ์—์„œ @๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ๋‹ฌ๋ผ๋Š” ํƒœ๊ทธ 
    	์ปดํฌ๋„ŒํŠธ ์Šค์บ”ํ•˜๊ฒŒ ๋˜๋ฉด @Autowired๋„ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์—
    	DI์— ์‚ฌ์šฉํ–ˆ๋˜ annotation-config ํƒœ๊ทธ๋Š” ์‚ญ์ œํ•ด๋„ ๋œ๋‹ค.
    -->
    
<!--     
	<bean id="noticeService" class="com.newlecture.web.service.jdbc.JDBCNoticeService">
		<property name="dataSource" ref="dataSource"/>
	</bean> 
-->
    
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    	<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    	<property name="url" value="jdbc:oracle:thin:@14.35.198.58:1522/orcl" />
    	<property name="username" value="USER01" />
    	<property name="password" value="1111" />
    </bean>
</beans>

 

<context:component-scan> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. base-package ์•ˆ์— ์žˆ๋Š” ํด๋ž˜์Šค ์ค‘์—์„œ @๊ฐ€ ๋ถ™์€ ํŒŒ์ผ์„ ์ฐพ์•„ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ๋‹ฌ๋ผ๋Š” ํƒœ๊ทธ์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์ž์—ฐํžˆ ๊ทธ ์•ˆ์—์„œ @Autowired๊ฐ€ ๋ถ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์— <context:annotation-config/> ํƒœ๊ทธ๋Š” ์ง€์›Œ๋„ ๋œ๋‹ค. ์–ด๋…ธํ…Œ์ด์…˜ ์ปจํ”ผ๊ทธ๋ณด๋‹ค ์ƒ์œ„ ํƒœ๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

 

JDBCNoticeService.java

package com.newlecture.web.service.jdbc;

//๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ IoC ์ปจํ…Œ์ด๋„ˆ์— ๋‹ด๋Š” ์ปดํฌ๋„ŒํŠธ ์–ด๋…ธํ…Œ์ด์…˜
//@Component //@Controller, @Service, @Repository
@Service
public class JDBCNoticeService implements NoticeService{
	
	@Autowired
	private DataSource dataSource;
	

 

@Component ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด๋ฉด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ MVC ํŒจํ„ด์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์žˆ๊ณ , MVC์—์„œ์˜ ์—ญํ• ์„ ๊ฐ•์กฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” @Service ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ด๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

 

 

 

์ด์ œ servlet-context์™€ IndexController๋„ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์•ž์„œ ์ˆ˜์ •ํ•œ ๋ฐฉ๋ฒ•๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค. ์šฐ์„  servlet-context.xml ํŒŒ์ผ์˜ IndexController ๋นˆ ์ƒ์„ฑ ํƒœ๊ทธ๋ฅผ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

	<bean id="/index" class="com.newlecture.web.controller.IndexController" />  

 

servlet-context์—์„œ๋Š” ์š”์ฒญ url์ธ "/index"๊ฐ€ ๋นˆ์˜ id์ด๋‹ค. @Service ์–ด๋…ธํ…Œ์ด์…˜๋งŒ์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ–ˆ๋˜ JDBCNoticeService ๊ฐ์ฒด์™€๋Š” ์„ฑ์งˆ์ด ๋‹ค๋ฅด๋‹ค.

 

 

servlet-context.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:context="http://www.springframework.org/schema/context"
    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
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd"> 
    
    <!-- <context:annotation-config /> -->
    <context:component-scan base-package="com.newlecture.web.controller"></context:component-scan>
    
	<!--     
	<bean id="/index" class="com.newlecture.web.controller.IndexController" />  
	-->    
	<bean id="/notice/list" class="com.newlecture.web.controller.notice.ListController">
    	<!-- 
    	<property name="noticeService" ref="noticeService" /> 
		 -->
    </bean>  
    <bean id="/notice/detail" class="com.newlecture.web.controller.notice.DetailController" />  
    
    
    <!-- Tiles ViewResolver -->    
    <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>
    
    <!-- View Resolver -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	<property name="prefix" value="/WEB-INF/view/"></property>
    	<property name="suffix" value=".jsp"></property>
    	<property name="order" value="2" />
    </bean>
    
    <mvc:resources location="/static/" mapping="/**"></mvc:resources>
    <mvc:annotation-driven />
    
    
</beans>

 

service-context.xml๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ annotation-config ํƒœ๊ทธ๋ฅผ ์ง€์šฐ๊ณ , component-scan ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. <bean id="/index"...> ํƒœ๊ทธ๋ฅผ ์ง€์šด๋‹ค. <mvc:annotation-driven /> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

 

IndexController.java

package com.newlecture.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexController /*implements Controller*/{

	@RequestMapping("/index")
	public void aaaa() {
		System.out.println("hihi");
	}
	
	/*
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//		System.out.println("index controller");
		ModelAndView mv = new ModelAndView("root.index"); //๋ทฐ ๋ฆฌ์กธ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ž์˜ /WEB-INF/view/์™€ ๋’ค์˜ .jsp๋ฅผ ์•ˆ ์จ๋„ ๋œ๋‹ค.
		mv.addObject("data", "Hello Spring MVC"); //view์—์„œ ์ถœ๋ ฅํ•  data๋ฅผ ๋‹ด๋Š”๋‹ค.
		//mv.setViewName("/WEB-INF/view/index.jsp");

		return mv;
	}
	*/
}

 

/index ๊ฒฝ๋กœ๋ฅผ ๋ฐ›๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Controller๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜์—ฌ handleRequest๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜๊ณ  ModelAndView ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ทฐ ํŽ˜์ด์ง€๋ฅผ ์„ธํŒ…ํ•ด์•ผ ํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ @Controller ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜๋ฉด ๊ณผ์ •์ด ํ•œ๊ฒฐ ๊ฐ„๋‹จํ•ด์ง„๋‹ค.

 

์šฐ์„  implements Controller๋Š” ๋”์ด์ƒ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฉฐ, ๊ทธ์— ๋”ฐ๋ฅธ handleRequest ๋ฉ”์†Œ๋“œ ์—ญ์‹œ ๋ถˆํ•„์š”ํ•ด์ง„๋‹ค. void ํƒ€์ž…์œผ๋กœ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ (๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์€ ๊ด€๊ณ„์—†๋‹ค) @RequestMapping์œผ๋กœ url ์ฃผ์†Œ๋ฅผ ์„ธํŒ…ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ @Controller ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ๊ณผ ๊ทธ์— ๋”ฐ๋ผ @RequestMapping ์–ด๋…ธํ…Œ์ด์…˜ ์„ค์ •์„ ์œ„ํ•ด xml์—์„œ <mvc:annotation-driven /> ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋œฌ๋‹ค.

 

 

 

 

tiles ์„ธํŒ…์ด ๋˜์ง€ ์•Š์€ index.jsp ํŽ˜์ด์ง€๊ฐ€ ๋œจ๊ณ , @RequestMapping("/index") ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ๋ฉ”์†Œ๋“œ์—์„œ ์‹คํ–‰ํ•˜๋Š” Sysout ์ฝ˜์†” ์ถœ๋ ฅ๋„ ์ž˜ ๋œ๋‹ค.

 

ModelAndView์™€ ๊ฐ™์ด ๋ทฐ ํŽ˜์ด์ง€ ์„ค์ •์„ ๋”ฐ๋กœ ํ•˜์ง€ ์•Š์•„๋„ ๋งคํ•‘ ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ๋ทฐ ํŽ˜์ด์ง€ ์„ค์ •์„ ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ๋งคํ•‘์ด "/aaa"์œผ๋กœ ๋˜์–ด์žˆ์—ˆ๋‹ค๋ฉด "/WEB-INF/view/aaa.jsp"๋ฅผ ์ฐพ์„ ๊ฒƒ์ด๊ณ , ๊ทธ ๊ฒฝ๋กœ์— ํŽ˜์ด์ง€๊ฐ€ ์—†๋‹ค๋ฉด 404 ์—๋Ÿฌ๊ฐ€ ๋œจ๊ฒŒ ๋œ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ 1์ธ tiles ์„ค์ •์ด ์•ˆ ๋˜๋‹ˆ ์šฐ์„ ์ˆœ์œ„ 2์ธ ๋ทฐ ๋ฆฌ์กธ๋ฒ„ ์„ค์ •์œผ๋กœ ๊ฐ€์„œ prefix, suffix๋ฅผ ๊ฑฐ์ณ index.jsp ํŽ˜์ด์ง€๋ฅผ ๋„์šด๋‹ค. (tiles.xml์— definition name์ด root.index์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด์„œ tiles ์„ค์ •์ด ์•ˆ ๋จนํž˜)

 

 

 

* HomeController ๋งŒ๋“ค๊ธฐ

 

 

IndexController.java

@Controller
public class IndexController {

	@RequestMapping("/index")
	public void aaaa() {
		System.out.println("hihi");
	}
    
	@RequestMapping("/help")
	public void bbbb() {
		System.out.println("hello");
	}

 

@Controller ์–ด๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•˜์—ฌ ์•ž์œผ๋กœ๋Š” ํ•œ ์ปจํŠธ๋กค๋Ÿฌ ํŒŒ์ผ ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ๊ฐ๊ฐ์˜ ๋ฉ”์†Œ๋“œ๋งˆ๋‹ค ๋งคํ•‘์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด "/index", "/help" ๋‘ ๊ฐœ์˜ ์š”์ฒญ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ ์ด๋ฆ„์ด IndexController์ธ ๊ฒƒ์€ ์ ์ ˆํ•˜์ง€ ์•Š์•„ ๋ณด์ธ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ์˜ ํด๋”๋ช… ๋“ฑ์œผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ ํŒŒ์ผ ์ด๋ฆ„์„ ์ง€์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ฉฐ ํ˜„์žฌ "/index" ์š”์ฒญ์„ ๋ฐ›๋Š” ๋ทฐ ํŒŒ์ผ์ธ index.jsp ํŒŒ์ผ์€ webapp/WEB-INF/view/index.jsp์˜ ๊ฒฝ๋กœ์— ์žˆ์œผ๋ฏ€๋กœ RootController, HomeController ๋“ฑ์œผ๋กœ ๋ช…๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค. HomeController์œผ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋„๋ก ํ•œ๋‹ค.

 

 

HomeController.java

@Controller
public class HomeController{

	@RequestMapping("/index")
	public String index() { //๋ฉ”์†Œ๋“œ ์ด๋ฆ„์„ ๋งคํ•‘๋ช…๊ณผ ๋™์ผํ•˜๋„๋ก ์ˆ˜์ •
		return "root.index";
	}

/*
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModelAndView mv = new ModelAndView("root.index");
		mv.addObject("data", "Hello Spring MVC"); //view์—์„œ ์ถœ๋ ฅํ•  data๋ฅผ ๋‹ด๋Š”๋‹ค.

		return mv;
	}
*/
}

 

ModelAndView ๊ฐ์ฒด์— "root.index"๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ–ˆ๋˜ handleRequest ๋ฉ”์†Œ๋“œ์™€ ๋‹ฌ๋ฆฌ String ํ˜•์‹์œผ๋กœ "root.index"๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด tiles ์„ค์ • ์—ญ์‹œ ์ ์šฉ๋œ๋‹ค.

 

 

 

* Notice ์ปจํŠธ๋กค๋Ÿฌ ์ •๋ฆฌํ•˜๊ธฐ

 

์ปจํŠธ๋กค๋Ÿฌ๋Š” view ํŒŒ์ผ์„ ๊ธฐ์ค€์œผ๋กœ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์ผ ๋•Œ๋Š” EventController, FaqController, NoticeController ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , NoticeController ํด๋ž˜์„œ ์•ˆ์— detail, list ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. event, faq, inc, notice๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” customer๋Š” ํŒจํ‚ค์ง€๋กœ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

IndexController๋ฅผ HomeController์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฉ”์†Œ๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด notice ๊ด€๋ จ ์ปจํŠธ๋กค๋Ÿฌ๋„ ์ˆ˜์ •ํ•˜๋„๋ก ํ•œ๋‹ค.

 

 

NoticeController.java

package com.newlecture.web.controller.customer;

import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.newlecture.web.entity.Notice;
import com.newlecture.web.service.NoticeService;

@Controller
public class NoticeController{

	@Autowired
	private NoticeService noticeService;

	//url ๊ตฌ์กฐ๋Š” ํŒŒ์ผ ๊ตฌ์กฐ์™€ ๊ฐ™๊ฒŒ ํ•ด์•ผ ํŒŒ์ผ ์ฐพ์•„๊ฐ€๊ธฐ ์‰ฝ๋‹ค.
	@RequestMapping("/customer/notice/list")
	public String list() throws ClassNotFoundException, SQLException {
		
		List<Notice> list = noticeService.getList(1, "TITLE", "");
		
		return "notice.list";
	}

	@RequestMapping("/customer/notice/detail")
	public String detail() {
		return "notice.detail";
	}
}

 

 

servlet-context.xml

	<!--     
	<bean id="/index" class="com.newlecture.web.controller.IndexController" />  
	-->    
	<!-- 
	<bean id="/notice/list" class="com.newlecture.web.controller.notice.ListController">
		<property name="noticeService" ref="noticeService" /> 
	</bean>
	-->  
	<!-- 
	<bean id="/notice/detail" class="com.newlecture.web.controller.notice.DetailController" />  
	-->

 

 

header.jsp

<li><a href="/customer/notice/list"><img src="/images/txt-customer.png" alt="๊ณ ๊ฐ์„ผํ„ฐ" /></a></li>

 

๊ธฐ์กด์— ListController, DetailController์—์„œ ๊ฐ๊ฐ ์žˆ์—ˆ๋˜ ๋‚ด์šฉ์„ NoticeController ์•ˆ์— ๋ฉ”์†Œ๋“œ๋กœ ๋งŒ๋“ค์–ด์„œ ํ•ฉ์นœ๋‹ค. "/notice/list"์˜€๋˜ ๋งคํ•‘์„ "/customer/notice/list"์œผ๋กœ ๋ณ€๊ฒฝํ•œ ์ด์œ ๋Š”, ํŒŒ์ผ ๊ตฌ์กฐ์™€ url ๊ตฌ์กฐ๊ฐ€ ๋™์ผํ•ด์•ผ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํŒŒ์ผ์„ ์ฐพ๊ธฐ๊ฐ€ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. header.jsp์—์„œ ๊ณ ๊ฐ์„ผํ„ฐ a ํƒœ๊ทธ์˜ url์„ ์—ญ์‹œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ˆ˜์ •ํ•œ๋‹ค.

 

tiles์—์„œ ์ด๋ฆ„์„ ์ฐพ๋Š” ๊ธฐ์ค€์œผ๋กœ String ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๊ฒŒ ํ•œ๋‹ค. ("notice.list"์™€ "notice.detail")

@Controller์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  @Autowired์œผ๋กœ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋ฏ€๋กœ xml์—์„œ์˜ bean ์„ค์ •์€ ๋”์ด์ƒ ํ•„์š”์น˜ ์•Š๋‹ค. ์‚ญ์ œ ๋˜๋Š” ์ฃผ์„์ฒ˜๋ฆฌ ํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜€๋˜ ์ปจํŠธ๋กค๋Ÿฌ ์ž๋ฐ” ํŒŒ์ผ์ด ํ•˜๋‚˜๋กœ ์ถ•์†Œ๋˜์–ด ํ›จ์”ฌ ๊ด€๋ฆฌํ•˜๊ธฐ ํŽธํ•˜๋‹ค.

 

 

notice ํŒจํ‚ค์ง€ ์‚ญ์ œ ์ „
notice ํŒจํ‚ค์ง€ ์‚ญ์ œ ํ›„

 

 

์ง€๊ธˆ ์ด ์ƒํƒœ๋กœ๋„ ์‹คํ–‰์— ์ „ํ˜€ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ๋” ์ˆ˜์ •ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ด ์žˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ์—์„œ url์ด ๊ณตํ†ต๋˜๋Š” ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋–ผ์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

 

NoticeController.java

package com.newlecture.web.controller.customer;

import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.newlecture.web.entity.Notice;
import com.newlecture.web.service.NoticeService;

@Controller
@RequestMapping("/customer/notice/") //ํด๋ž˜์Šค์— ๋งคํ•‘ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ๋‹ค.
public class NoticeController{

	@Autowired
	private NoticeService noticeService;

	@RequestMapping("list") 
	//์œ„์˜ "/customer/notice/"์™€ ์ด์–ด์ ธ์„œ ๋งคํ•‘๋œ๋‹ค.
	public String list() throws ClassNotFoundException, SQLException {
		
		List<Notice> list = noticeService.getList(1, "TITLE", "");
		
		return "notice.list";
	}

	@RequestMapping("detail")
	public String detail() {
		return "notice.detail";
	}
}

 

list ๋ฉ”์†Œ๋“œ์˜ ๋งคํ•‘์€ "/customer/notice/list"์ด๊ณ  detail ๋ฉ”์†Œ๋“œ์˜ ๋งคํ•‘์€ "/customer/notice/detail"์œผ๋กœ "/customer/notice/" ๋ผ๋Š” ๊ณตํ†ต ๋ถ€๋ถ„์ด ์žˆ๋‹ค. ๊ทธ ๋ถ€๋ถ„์€ ๋–ผ์–ด์„œ ํด๋ž˜์Šค๋ช…์— ๋งคํ•‘ํ•˜๊ณ  ๋ฉ”์†Œ๋“œ์—๋Š” list, detail๋งŒ ๋‚จ๊ฒจ๋‘”๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด url ๋งคํ•‘๋  ๋•Œ ํด๋ž˜์Šค์— ๋ถ™์€ "/customer/notice/"๊ณผ ์ด์–ด์ ธ์„œ ๋งคํ•‘์ด ๋œ๋‹ค.

 

๋งˆ์ฐฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ HomeController๋„ ์ˆ˜์ •ํ•œ๋‹ค.

 

 

HomeController.java

@Controller
@RequestMapping("/")
public class HomeController{

	@RequestMapping("index")
	public String index() {
		return "root.index";
	}
}

 

ํด๋ž˜์Šค์— "/"์œผ๋กœ ๋งคํ•‘ํ•˜๊ณ  ๋ฉ”์†Œ๋“œ์— "index"์œผ๋กœ ๋งคํ•‘ํ•˜๋ฉด, ๋‘˜์ด ์ด์–ด์ ธ์„œ "/index"์œผ๋กœ ๋งคํ•‘ ๋œ๋‹ค.