Spring MVC 


루트컨테이너 등록하고 사용하기:)  



1. Dynamic Web Project를 생성합니다. 

프로젝트 이름을 주고 

Next 버튼을 선택 후 

web.xml 체크박스를 선택 후 Finish를 선택! 



2. Configure -> Convert to Maven Project를 선택해서 

완료버튼을 클릭해줍니당



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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>Spring_member</groupId>
  <artifactId>Spring_member</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
 
 
     <dependencies>
  
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
    </dependencies>   
  
  
</project>
cs


3. pom.xml에 

디펜던시 세팅해줍니다

(spring core, context, web, webmvc, jdbc, aop, mybatis, mybatis-spring, mysql)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Spring_member</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
      <servlet-name>dispatcher</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>dispatcher</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>
cs


4. web.xml에 dispatcherServlet을 서블릿으로 등록 

*.do에 대해서 처리하도록 서블릿 매핑 



1
2
3
4
<init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</init-param>
cs


+

만약 

경로와 설정파일의 이름이 다르다면 이렇게 !! 


+

항상

마지막에 

<load-on-startup>1</load-on-startup>

써줘야함

중간에써주면안됨! 

안써줘도상관은없지만!! 


1
2
3
4
5
6
7
8
9
10
11
12
13
<?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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="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-4.1.xsd">
    <context:component-scan base-package="controller"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="jsp/"/>
        <property name="suffix" value=".jsp" />
    </bean>
</beans>
 
cs



5. dispatcherServlet이 사용할 스프링 설정파일 생성 

(Spring Bean Configuration FIle)

controller패키지에 대해서 컴포넌트 스캔

internalResourceViewResolver등록 

(prefix는 jsp파일을 모아놓은 폴더경로

suffix는 jsp파일들의 확장자로)






루트컨테이너 등록하고 사용하기:)  


루트컨테이너 등록하는 방법

1. web.xml에 컨텍스트 로더 리스너를 등록 

2. /WEB-INF/applicationContext.xml이름으로 스프링 설정 파일 작성



web.xml에 ContextLoaderListener클래스를 리스너로 등록하면 

/WEB-INF/applicaitonContext.xml을 설정파일로해서 스프링컨테이너를 하나 빌드하고 

해당 컨테이너를 모든 서블릿 컨테이너가 공유할 수 있도록 세팅! 



1
2
3
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
cs


1. 아까 설정해 둔 web.xml에 

위의 내용 추가! 


1
2
3
4
    <context-param>
        <param-name>contextConfiguration</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param
cs


+

만약

applicationContext.xml 파일명을 바꾸고싶을경우는 

<param-value></param-value> 사이에 원하는 설정파일 경로와 이름을 작성하면 됨! 





applicationContext.xml은 

서비스단 이하를 빈으로 등록

(datasource, sqlSessionFacotry, mapperFactoryBean(Dao), services클래스(컴포턴트스캔),트랜잭션 매니저 등) 



dispatcher-servlet.xml은 

서블릿컨테이너 

여기에는 mvc구성요소들 

컨트롤러(컴포넌트스캔) 


1
2
3
4
5
6
7
8
9
10
11
12
package service;
 
import org.springframework.stereotype.Service;
 
@Service
public class MemberService {
    public String getData(){
        return "I am a boy";
    }
}
//@Component: 이 에노테이션이 달려있는 클래스는 컴포넌트 스캔에 의해서 빈으로 등록이됨 
//그때의 빈의 아이디의 첫글자는 소문자 
cs


2. MemberService를 만들어줍니당 



1
2
3
4
5
6
7
8
9
10
11
<?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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="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-4.1.xsd">
 
    <context:component-scan base-package="service"/>
    
</beans>
 
cs


3. 루트컨테이너인 

applicationContext.xml에

MemberService를 빈으로 등록! 


 

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
package controller;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
 
import service.MemberService;
//서비스주입받아서
//받은 리퀘스트를 처리하기에 피룡한 서비스의 메소드를 호출해서 결과 획득 
//결과 데이터랑 적절한 페이지 세팅해서 
//모델엔뷰 리턴 
@Controller
public class MemberController {
    @Autowired
    private MemberService service;
    @RequestMapping("test.do")
    public ModelAndView dummy(){
        ModelAndView mav = new ModelAndView();
        mav.addObject("attr",service.getData());
        mav.setViewName("test");
        return mav;
    }
 
}
cs



4. MemberController만들고 

service참조변수에 루트컨테이너에 등록되있는 

MemberService빈 객체를 주입 


@Autowired 사용! 


test.do에서 

서비스객체의 getData 함수호출의 결과를 attr에 싣고 

test.jsp를 뷰페이지로 지정



1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${attr }
</body>
</html>
cs




5. jsp폴더내

test.jsp를 만들어줍니당! 




6. 이렇게 파일을 만드셨으면! 

실행을 해보겠습니당! 




7. 실행하면 404에러가 뜨지만

test.do를 입력하면

위와같은 

I am a boy를 출력할 수 있습니다~ 










+ 알아둬야할 사항


@Component의 아들들!

@Controller, @Service, @Repository

-> 모두 @Component의 아들들 

-> 그러므로 컴포넌트 스캔에의해 빈등록됨 

@Controller -> hanlderMapping 추가됨 


그래서 MemberController.java에서는 

@Component가 아닌 

@Controller을 씀 


이유는 

@Component를 쓰면 

HandlerMapping기능이 없기 때문에 

아마 조회가 안되는 일이 발생 


@Controller은 

HandlerMapping기능이 있어서 

Controller알아서 찾을 수 있도록!? 

여튼 그런 기능! 




+ Recent posts