프로그래밍

Spring MVC 공부(4)

RainIron 2022. 5. 28. 17:05
반응형

※ URL Mapping

  • Servlet/JSP URL 주소

- 사용자가 서버에 접속해서 서비스를 받기 위해 입력하는 주소

- 기본형식: [프로토콜://도메인주소(IP):포트번호/경로1/경로2/...]

- 프로토콜: 서버와 클라이언트간의 통신을 위한 약속

- 도메인주소: 같은 네트워크 망에서 컴퓨터를 구분하기 위해 제공되는 숫자로 구성된 고유 주소

- 포트번호: 1~65535번으로 구성, 컴퓨터 내에서 프로그램을 구분하기 위해 사용

- 경로에 관하여: Servlet/JSP에서 첫번째 경로는 Context Path라고 부른다.

 


※ 요청방식 / Parameter Object

  • GET,POST, PUT, DELETE, PATCH

- @RequestMapping(value = ?, method = RequestMethod.GET || RequestMethod.POST)

- @GetMapping

- @PostMapping

  • 만일 두 방식을 동시에 사용하고 싶다면?
@RequestMapping(value = ?, method = {RequestMethod.GET, RequestMethod.POST})

 

  • HttpServletRequest

- Servlet/JSP에서 파라미터 데이터 추출 시, HttpServletRequest 객체 사용

- 객체의 getParameter, SetParameter, getParameterValues 등을 사용해 데이터 추출

 

  • @PathVariable

- 데이터가 요청 주소에 있을 경우 값을 주입 받을 수 있는 어노테이션

- Restful API 서버 프로그래밍시 많이 사용하는 방식

- 요청주소/값1/값2/값3

- Ex

@GetMapping("/navercom/{data1}/{data2}/{data3}")
public String test1(@PathVariable String data1,
					@PathVariable String data2,
					@PathVariable String data3){
	System.out.println("data1: " + data1);
    System.out.println("data1: " + data2);
    System.out.println("data1: " + data3);
    
    return "result";
}

 

  • @RequestParam

- 파라미터 데이터를 직접 주입

- 지정된 변수의 이름과 파라미터의 이름이 같을 경우 값을 주입

- 자동 형변환

- value: 파라미터 이름을 지정 / required: false를 설정하면 지정된 이름의 파라미터가 없을 경우 null이 주입된다.

@GetMapping("/navercom/{data1}/{data2}/{data3}")
public String test2(@RequestParam(value = "data1") int value1,
					@RequestParam(value = "data2") int value2,
					@RequestParam(value = "data3") int [] value3){
	System.out.println("data1: " + value1);
    System.out.println("data1: " + value2);
    
    for(int i: value3){
    	System.out.println("data3: " + i);
    }
    
    return "result";
}

※ 파라미터

  • Map<Type, Type> 객체명: 클라이언트가 송신하는 데이터를 한 번에 Map으로 수신
  • @ModelAttribute: 커맨드 객체(Command Object)
// Controller.java
@GetMapping("/test")
public String test(@ModelAttribute DataBean bean1){
	// DataBean이라는 데이터를 담을 수 있는 클래스 생성
	System.out.println(bean1.getData());
    
  	return "result";
}

※ ViewResolver

1. 사용자 응답을 Request 형태로 Dispatcher Servlet에게 보낸다.

2. Dispatcher Servlet은 Controller에게 Request Data를 보낸다.

3. SpringMVC에서는 Controller가 Dispacther Servlet에게 ModelAndView(data, view name, etc...)라는 객체를 보낸다.

4. Dispatcher Servlet이 ModelAndView 정보를 추출한 후, 앞 뒤 경로를 완성시켜 html을 만들 View name을 View Resolver에게 보낸다.

5. View Resolver는 View name을 확인한 후, 해당 파일로 View 객체로 만들어 Dispatcher Servlet에게 보낸다.

6. Dispatcher Servlet은 3번 단계에서 받은 ModelAndView 내의 Data를 토대로 jsp를 완성시켜 html코드를 브라우저로 보낸다.

 

  • Model

Model 객체 형태로 생성 후 데이터를 세팅해주면, HttpServletRequest 객체에 담겨 이를 JSP로 전달할 수 있다.

  • ModelAndView

Model에 값을 세팅하는 기능과 View의 이름을 지정하는 기능을 가지고 있다.

// Controller.java
@GetMapping("/localhost")
public ModelAndView view1(ModelAndView mv){
	mv.addObject("value1", 1000);
    mv.addObject("value2", 2000);
    mv.setViewName("index");
    
    return mv;
}

// jsp 파일에서 ${requestScope.value1}의 형태로 확인할 수 있다.

※ Command Object

- 클라이언트가 전달해주는 파라미터 데이터를 주입받기 위해 사용하는 객체

// jsp에서 넘기는 파라미터의 이름을 보고 주입
@PostMapping("/localhost")
public String test1(@ModelAttriubte DataBean bean1){
	return "test1";
    
}

- HttpServletRequest 객체에 자동으로 담기고 jsp로 전달된다. 이 때, HttpServletRequest 객체에 저장되는 이름은 클래스의 이름으로 결정된다.

- Controller에서 데이터에 작업을 하지 않고 jsp에서 찾기 위해서는 ${requestScope.데이터형태클래스(생성한 것).소유데이터}의 형태로 찾아온다.


※ Form 태그

https://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/spring-form-tld.html

 

43. spring-form JSP Tag Library

Renders a list of HTML 'option' tags. Sets 'selected' as appropriate based on bound value. Table 43.10. Attributes AttributeRequired?Runtime Expression?DescriptioncssClassfalsetrueEquivalent to "class" - HTML Optional AttributecssErrorClassfalsetrueEquiv

docs.spring.io

Ex)

<@ taglib prefix="form" uri ="http://www.springframework.org/tags/form"%>

...

<form:form modelAttribute=데이터보관클래스명 action=jsp파일명>
    user name: <form:input path="userName"/><br/> <!-- html로 확인해보면, id와 name이 userName으로 지정되어있다. -->
    user age: <form:input path="userAge"/><br/>
    user id: <form:input path="userId"/><br/>
</form:form>

※ Redirect & Forward

- Spring MVC는 요청이 발생되면 요청 주소를 분석하여 그와 매핑되어 있는 메서드를 호출하고 메서드가 반환하는 정보를 토대로 응답결과를 생성하여 클라이언트에게 전달한다.

 

  • Redirect

- 서버가 클라이언트에게 요청할 주소를 응답결과로 전달하는 것

- 클라이언트는 응답결과로 받은 요청주소를 직접 요청

- 브라우저가 요청하므로 주소창의 주소는 변경됨

- Redirect시 HttpServletRequest 객체는 소멸 후 재생성되고, HttpSession 객체는 유지된다.

 

  • Forward

- 코드의 흐름을 서버상에서만 이동하는 것

- 브라우저는 흐름이 이동된 것을 모르기 때문에 주소창의 주소는 변경되지 않는다.

- HttpServletRequest, HttpSession 유지된다.

반응형

'프로그래밍' 카테고리의 다른 글

스프링부트, REST, Token  (0) 2023.01.15
Spring MVC 공부(5)  (0) 2022.05.28
Spring MVC 공부(3)  (0) 2022.05.18
Spring MVC 공부(2)  (0) 2022.05.05
Spring MVC 공부(1)  (0) 2022.05.01