본문으로 바로가기

[JSP] Spring MVC

category Dev/JSP 2018. 7. 20. 19:08


Spring MVC 


DispatcherServlet

- 프론트 컨트롤러 (Front Controller)

- Client의 모든 요청을 받은 후 이를 처리할 핸들러에게 넘기고 결과를 받아서 Client에게 보여줌



[ pom.xml ]

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
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>kr.or.connect</groupId>
  <artifactId>mvcexam</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>mvcexam Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.3.5.RELEASE</spring.version>
  </properties>
  <dependencies>
      
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    
    <!-- Servlet 라이브러리 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.1</version>
        <scope>provided</scope>
    </dependency>
 
    <!-- JSTL 라이브러리 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
      
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>mvcexam</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
 
cs


Spring MVC 설정

DispatcherServlet을 FrontController로 설정하기



Repository

DAO 패턴

- 데이터 액세스 계층은 DAO 패턴을 적용하여 비즈니스 로직과 데이터 액세스 로직을 분리하는 것이 원칙!

- DAO 패턴은 서비스 계층에 영향을 주지 않고 데이터 액세스 기술을 변경할 수 있음


NamedParameterJdbcTemplate

- JDBC Template : 실행, 조회, 배치의 작업을 지원

- 이름있는 파라미터를 제공하기 위한 템플릿


RowMapper<>

- template객체의 query를 통해 결과값을 가져올 때,

- SQL에 따라 추출된 결과를 리턴받을 객체의 멤버변수에 적절하게 할당하기 위한 Mapping 수단


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
package kr.or.connect.reservation.dao;
 
import java.util.List;
 
import javax.sql.DataSource;
 
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
 
import kr.or.connect.reservation.dto.Category;
 
@Repository
public class CategoryDao {
    private NamedParameterJdbcTemplate jdbc;
    private RowMapper<Category> rowMapper = BeanPropertyRowMapper.newInstance(Category.class);
    
    public CategoryDao(DataSource dataSource) {
        this.jdbc = new NamedParameterJdbcTemplate(dataSource);
    }
    
    public List<Category> selectAll(){
        return jdbc.query("SELECT * FROM category", rowMapper);
    }
}
cs


Service

@Autowired

- 의존관계를 자동설정할 때 사용하며, 빈 객체를 삽입해줌

- Service에서는 DAO의 로직을 사용하기 위해 사용함


Interface

- 인터페이스와 클래스 파일이 한 세트!

- 필요한 서비스들의 목록을 나열할 수 있는 Interface를 구현한 뒤

- 클래스에서 만든 interface를 구현함


1
2
3
4
5
6
7
8
9
package kr.or.connect.reservation.service;
 
import java.util.List;
 
import kr.or.connect.reservation.dto.Category;
 
public interface CategoryService {
    public List<Category> getCategorys();
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package kr.or.connect.reservation.service.impl;
 
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import kr.or.connect.reservation.dao.CategoryDao;
import kr.or.connect.reservation.dto.Category;
import kr.or.connect.reservation.service.CategoryService;
 
@Service
public class CategoryServiceImpl implements CategoryService{
    @Autowired
    CategoryDao dao;
 
    @Override
    public List<Category> getCategorys() {
        List<Category> list = dao.selectAll();
        return list;
    }
}
cs


Controller

@RequestController

- 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념

- REST API 를 사용하기 위한 Annotation


@RequestMapping

- path를 사용하여 Mapping


@Autowired

- Controller에서는 Service의 Logic을 사용하기 위해서 사용


Map<String, Object>

- JSON 형식의 데이터를 반환하기 위해서 Map 객체에 List를 넣음


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
package kr.or.connect.reservation.controller;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import kr.or.connect.reservation.dto.Category;
import kr.or.connect.reservation.service.CategoryService;
 
@RestController
@RequestMapping(path="/categorys")
public class CategoryController {
    @Autowired
    CategoryService categoryService;
    
    @GetMapping
    public Map<String, Object> list() {
        List<Category> list = categoryService.getCategorys();
        Map<String, Object> map = new HashMap<>();
        map.put("list", list);
        
        return map;
    }
}
cs



'Dev > JSP' 카테고리의 다른 글

[JSP] 인터셉터(Interceptor)와 아규먼트 리졸버(Argument Resolver)  (0) 2018.10.10
[JSP] Spring Cookie & Session  (0) 2018.10.10
[JSP] Spring JDBC  (0) 2018.07.20
[JSP] Spring  (0) 2018.07.19
[JSP] JDBC 사용하기!!  (0) 2018.05.29