Spring Framework (Legacy) spring01 프로젝트 뜯어보기
궁금한 부분 : Controller / Repository / Service bean 등록 각각 어디서? 빈으로 등록된 코드 직접 볼수는 없나
spring01 프로젝트 실행시 첫 화면은 http://localhost:8090/spring01/
메인 컨트롤러 설정
@RequestMapping (value="/") //프로젝트 실행 시 하단의 메서드가 실행되도록함
URL 맵핑 => http://localhost:8090/spring01/ ( 메인화면 URL )
public String main( Model model ) { ~
스프링이 제공하는 Model 인터페이스 : 데이터를 담는 그릇 역할, map 구조로 저장됨
JSP에서 doget, dopost 메서드가 상속하는 클래스 모두 포함하고 있다. request와 같은 기능을 함
스프링이 제공하는 Model 인터페이스, add/merge/contains Attribute 메서드 제공
//스프링이 제공하는 인터페이스 객체(내장객체)는 따로 @inject / @Autowired 안달아줘도 된다.
(request도 직접 객체 생성한 적 없는것처럼)
return "main" //출력페이지인 /WEB-INF/views/main.jsp로 넘어감
return "~" => ~로 포워딩
URL : (href가 가리키는 링크) =( @RequestMapping value + href에 추가된 파라미터 ) OR return redirect value
view : return value
// 반환 페이지가 없다면 매핑된 주소에 해당하는 페이지로 이동한다. (URL과 페이지 이름이 같다면 리턴값 주지 않아도 된다는 의미)
// returen redirect일 경우에는 redirect가 가리키는 페이지가 URL로 맵핑된다.
// RequestMappig value URL로
실행됐다가 리턴시 redirect URL로 새로 맵핑되어 넘어가는 것
menu.jsp
1 2 3 4 5 6 7 8 9 10 11 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <c:set var="path" value="${pageContext.request.contextPath}" /> <div style="text-align: center;"> <a href="${path}/">main</a> <a href="${path}/gugu.do?dan=7">구구단</a> <a href="${path}/test.do">테스트</a> <a href="${path}/member/list.do">회원관리</a> </div> <hr> | cs |
1 2 3 4 | @RequestMapping(value = "gugu.do", method = RequestMethod.GET) public String gugu(@RequestParam int dan, Model model) { //int dan=9; //@RequestParam은 생략해도 되지만 명시해주는것이 보기 편하다 | cs |
// URL에 파라미터가 함께 담겨서 넘어올때, request로 받아서 사용할 필요없이
맵핑한 메서드 파라미터 변수 자리에 순서 상관없이 위치시켜주면 된다.
컨트롤러에 대한 설정은 servlet- context 에
1 2 3 4 5 6 7 | <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean> | c s |
InternalResourceViewResolver 클래스는 스프링이 제공하는 view 해석기
servlet-context에서 컴포넌트 스캔
1 2 3 4 5 | </beans:bean> <!-- 스프링 빈을 태그로 등록하지 않고 자동으로 검색(auto scan) --> <context:component-scan base-package="com.example.spring01" /> </beans:beans> | cs |
Controller에서 Model 변수에 담은 정보는 return 된 페이지( 반환 페이지가 없다면 매핑된 주소에 해당하는 페이지로 )
1 2 3 4 5 6 | @RequestMapping("test/doC") public ModelAndView doC() { Map<String,Object> map=new HashMap<>(); map.put("product", new ProductDTO("샤프",1000)); return new ModelAndView("test/doC","map",map); } | cs |
ModelAndView
: 출력할 페이지, 전달할 객체의 변수, 오브젝트 모두 담아 리턴할 수 있다.
스프링 내장객체, Model의 기능도 포함하고 있어 매개변수에 Model 따로 쓰지 않아도된다. (?)
Controller에서 view가 아닌 데이터를 넘길때는
( @Controller + 클래스 블럭 안에 @ResponseBody ) OR @RestController 사용
데이터를 넘겼으므로 Controller로 넘어오기 전 view로 다시 돌아가서 javascript 함수를 실행한다.
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 | <%@ 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> <%@ include file="include/header.jsp" %> <script> function doF(){ $.ajax({ type: "post", url: "${path}/test/doF", success: function(result){ //익명함수 실행 $("#result").html( "상품명:"+result.name+",가격:"+result.price); } }); } </script> </head> <body> <%@ include file="include/menu.jsp" %> <h2>링크 테스트</h2> <a href="${path}/test/doA">doA</a><br> <a href="${path}/test/doB">doB</a><br> <a href="${path}/test/doC">doC</a><br> <a href="${path}/test/doD">doD</a><br> <a href="javascript:doF()">doF</a><br> <div id="result"></div> </body> </html> | cs |
view페이지로 가기 전에 맵핑된 Controller 부터 실행 > javascript:doF() 함수 호출되기 전에 매핑된 컨트롤러부터 실행
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package com.example.spring01.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import com.example.spring01.model.dto.ProductDTO; @RestController // 스프링 4.0부터 사용 가능 public class SampleRestController { @ResponseBody //데이터 리턴 // json 형식으로 리턴 @RequestMapping("test/doF") // url mapping public ProductDTO doF() { //호출한 곳으로 데이터가 넘어감(json 형식) return new ProductDTO("냉장고",500000); } } | cs |
( jackson-databind 라이브러리 pom에 추가 )
json형식의 String타입으로 변환하지 않고 DTO타입으로 넘겨서 EL문으로 표현하는건 안되나?
(ajax랑 자바스크립트 공부해봐야 알듯)
5강 )
'Spring > study' 카테고리의 다른 글
mybatis #{value}와 ${value} 차이 (0) | 2019.06.05 |
---|---|
spring 5강 Oracle과 mybatis 연동 실습(회원 목록,등록,수정,삭제) (0) | 2019.06.05 |
Spring MVC 전체 흐름 파악하기 (0) | 2019.05.31 |
MVC 패턴에서 Service Model의 역할 (0) | 2019.05.31 |
스프링 프레임워크 입문 -PSA(Portable Service Abstraction) (0) | 2019.05.31 |