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 |