디펜던시 설정        
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
    <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-jdbc</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>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
    </dependencies>
</project>
cs


◎ web.xml에 dispatchServlet을 서블릿으로 등록 *.do에 대해서 처리하도록 서블릿매핑 설정

◎ dispatcherServlet이 사용할 스프링 설정하일 생성

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

◎ internalResouceViewResolver등록(prefix는 jsp파을들을 모아놓을 폴더경로, suffix는 jsp파일들의 확장자로)


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
<?xml version="1.0" encoding="UTF-8"?>

 
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
 
</web-app>
cs


1
2
3
4
5
6
7
8
9
10
11
12
13


    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>
 
cs


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

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

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


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

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


dataSource, sqlSessionFactory, mapperFactoryBean(Dao), service클래스들(컴포넌트스캔), 트랜잭션매니저

dispatcher-servlet.xml 서블릿 컨테이너 <- mvc구성요소들, 컨트롤러(컴포넌트스캔), 뷰리졸버,,,,


((((((( 리스너, 필터 참고 // http://wiki.gurubee.net/pages/viewpage.action?pageId=26740229  )))))

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

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

1
    <context:component-scan base-package="service"></context:component-scan>
cs

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

- 컨트롤러에서 파라미터 받기

- 컨트롤러에서 request, session, response등 기본객체 사용하기

- 컨트롤러에서 ModelAndView외에 다양한 반환유형


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
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("msg",service.getData());
        mav.setViewName("test");
        return mav;
    }
    
}
//작성 후, service참조변수에 루트컨테이너에 등록되있는 MemberSerivce빈 객체를 주입
//test.do에서 서비스 객체의 getData함수호출의 결과를 싣고 test.jsp를 뷰 페이지로 지정
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package service;
 
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
 
@Service
public class MemberService {
    public String getData(){
        return "What the Hell!";
        
        //작성후 루트컨테이너에 빈으로 등록
    }
}
//@Component : 이 에노테이션이 달려있는 클래스는 컴포턴트 스캔에 의해서 빈으로 등록이 됨
// 그때의 빈의 아이디는 클래스 첫글자 소문자
 
//@Controller, @Service, @Repository
//->모두 @Component의 아들들, 그러므로 얘네들도 컴포넌트스캔에 의해 빈 등록 됨
cs





' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day65 Spring-student  (0) 2016.06.21
Day64  (0) 2016.06.20
Day62 Spring MVC  (0) 2016.06.16
Day61  (0) 2016.06.15
Day60 Spring-AOP  (0) 2016.06.14

• Spring MVC 구성 주요 컴포턴트

* DispatcherServlet 

- Front Controller : 모든 요청을 최초로 받아들이는 역할

* Controller (요청을 실제로 처리하는 역할)

- 클라이언트 요청 처리를 수행하는 Controller

* HandlerMapping  (어떤 요청 컨트롤러가 처리할지 결정)

- 클라이언트의 요청을 처리한 Controller를 찾는 작업 처리

* View

- 응답하는 로직을 처리

* ViewReslover

 - 응답할 View를 찾는 작업을 처리

* ModelAndView (응답에 사용할 데이터와 페이지 정보 집합)

- 응답할 View와 View에게 전달할 값을 저장하는 용도의 객체 



• 요청 처리 순서

①DispatcherServlet이 요청을 수신

• 단일 Front controller servlet

• 요청을 수신하여 처리를 다른 컴포넌트에 위임

• 어느 컨트롤러에 요청을 전송할지 결정


②DispatcherServlet은 HandlerMapping에 어느 컨트롤러를 사용할 것인지 문의


③DispatcherServlet은 요청을 컨트롤러에게 전송하고 컨트롤러는 요청을 처리한 후 결과 리턴

• 비즈니스 로직 수행 후 결과 정보(Model)가 생성되어 JSP와 같은 뷰에서 사용됨


④ModelAndView를 생성하여 DispatcherServlet에 리턴


⑤ModelAndView 정보를 바탕으로 바탕으로ViewResolver 에게 View를 요청


⑥View는 결과정보를 사용하여 화면을 표현함.


1. DispatcherServlet을 web.xml에 서블릿으로 등록

2. DispatcherServlet이 사용할 스프링 설정파일을 생성

3. 2의 설정파일에 HandlerMapping, Controller, ViewResolver들을 빈(bean) 객체로 등록



pom.xml


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

</dependencies>



dispatcher-servlet.xml

<bean id="handlerMappingclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />


<bean class="controller.WhatTimeController" name="/whatTime.do"></bean>



WhatTimeController.java


package 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 WhatTimeController implements Controller{


@Override

public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {

// TODO Auto-generated method stub

String inTime  = new java.text.SimpleDateFormat("HHmmss").format(new java.util.Date());

ModelAndView mav = new ModelAndView();

mav.addObject("msg",inTime);

mav.setViewName("jsp/whatTime.jsp");

return mav;

}

}


web.xml

<servlet>

<servlet-name>dispatcher</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

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

</servlet>

<servlet-mapping>

<servlet-name>dispatcher</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>



jsp/whatTime.jsp

<body>

${msg }<br>

현재시간이라능~~

</body>





ViewResolver


1. 디펜더시 등록


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

</dependencies>



2. web.xml

<servlet>

<servlet-name>dispatcher</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

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

</servlet>

<servlet-mapping>

<servlet-name>dispatcher</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>



3.dispatcher-servlet.xml

<context:component-scan base-package="controller"></context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>


4.controller/MyController.java

@Controller //@Component의 아들로써 빈으로 등록하게함

//Request를 받아 처리하는 컨트롤러로써 인식

public class MyController {

@RequestMapping("hello.do")

public ModelAndView hello(){

ModelAndView mav = new ModelAndView();

mav.addObject("msg","Hello World");

mav.setViewName("hello");

return mav;

}

@RequestMapping("whatTime.do")

public ModelAndView whatTime(){

ModelAndView mav = new ModelAndView();

mav.addObject("time",new Date());

mav.setViewName("whatTime");

return mav;

}

}



5. hello.jsp // whatTime.jsp 작성


<body>

${msg }

</body>


<body>

${time }

</body>






' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day64  (0) 2016.06.20
Day63 Spring-member  (0) 2016.06.17
Day61  (0) 2016.06.15
Day60 Spring-AOP  (0) 2016.06.14
Day59 Spring-AOP  (0) 2016.06.13

+ Recent posts