본문 바로가기
Spring

230201 Spring mvc모듈과 @Controller, @RequestMapping

spring-servlet Namespaces에서 mvc 활성화
 
mvc라는 모듈의 기능 사용가능하게 됨.

<mvc:annotation-driven/>
-스프링 내부에 있는 어노테이션 방법으로 핸들러맵핑과 핸들러어댑터기능을 제공함

@Controller : 빈으로 생성할 클래스. 선언문 같은 것. 따로 명령을 해서 빈으로 만들어줘야 한다.
@RequestMapping("주소") : 핸들러맵핑


따로 명령을 해서 빈으로 만들어줘야 한다.->
Namespaces에서 context모듈 활성화

<context:component-scan base-package="컨트롤러가 들어있는 패키지"/>
-이 태그는 위의 mvc:annotation-driven과 짝.
-@Controller어노테이션이 붙어있는 애들을 패키지 스캔을 하여 빈으로 생성해준다.
-이 태그를 사용하면 @Controller어노테이션이 있는 컨트롤러.java파일에 S표시가 생기는데, 빈으로 변경되었다는 뜻임.

빈으로 등록해야 할 클래스들이 많아지면,

<context:component-scan base-package="com.simple.**">
	<context:include-filter type="annotation" expression="com.simple.controller.HomeController"/> //클래스까지
					...
					...
</context:component-scan>

 

으로 확장 가능. include, exclude를 확장시켜 사용 가능


정적 파일은 컨트롤러 맵핑에 들어가면 안됨. 컨트롤러 요청에 들어가지 않아도 되는 파일은 제외. (대표적으로 css, js)

정적자원 맵핑설정

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

 

(태그의 mapping)/resource경로로 들어오면 (태그의 location)/resource폴더경로로 바로 연결

이 resource폴더는 WEB-INF와 같은 자리. webapp에서 폴더를 생성한다.
이렇게 하면 컨트롤러에 태우지 않고 바로 실행이 가능해진다.

 


spring-servlet.xml

<?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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

	<!-- 메인컨트롤러를 빈으로 등록 -->
	<!-- <bean id="xxx" class="com.simple.controller.MainController" /> -->

	<!-- 핸들러맵핑 등록 -->
	<!-- /test/aaa 요청이 들어오면 xxx빈으로 핸들러맵핑 -->
	<!-- <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
		<property name="mappings"> <props> <prop key="/test/aaa">xxx</prop> <prop 
		key="/test/bbb">xxx</prop> </props> </property> </bean> -->

	<!-- 스프링 내부에 있는 어노테이션 방법으로 핸들러맵핑과 핸들러어댑터기능을 제공함 -->
	<!-- 해당 패키지를 읽어서 @Controller가 있는 클래스를 자동으로 bean으로 등록시킴. include, exclude를 확장시켜 사용가능함 -->
	<mvc:annotation-driven />
	<context:component-scan base-package="com.simple.**">
		<context:include-filter type="annotation" expression="com.simple.controller.HomeController"/>
	</context:component-scan>
	
	
	<!-- css, js 정적자원들은 폴더경로로 바로 연결 -->
	<!-- /resource경로로 들어오면 /resource폴더 연결 -->
	<mvc:resources location="/resource" mapping="/resource/**"/>


	<!-- 뷰 합성기(뷰 리졸버) -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>

</beans>

각주처리한 방법이 mvc모듈을 통해 더 간단하게.

 

 

 

HomeController.java

package com.simple.controller;

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

@Controller //빈으로 생성할 클래스
public class HomeController {
	
	@RequestMapping("/test/aaa") //핸들러맵핑
	public String home() {
		return "home";
	}
}

 

home.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>
	
	hello world!
</body>
</html>

경로확인하기. SpringMake/test/aaa이다.


 

 

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

	index.jsp
	
</body>
</html>

경로확인하기. SpringMake/resource/index.jsp

home.jsp와 다르게 index.jsp는 바로 실행가능하다. index.jsp의 위치는

로, resource폴더에 위치한다. <mvc:resources location="/resource" mapping="/resource/**"/>를 통해 바로 연결된 것.