저번에 이어서 다 못한 Spring MVC패턴을 공부하겠다.
우선 간단하게 View를 만든다.
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>
<body>
<form action="bmi" method="post">
키<input type="text" name="t1"/>cm<br>
몸무게<input type="text" name="t2"/>kg<br>
<input type="submit" value="비엠아이">
</form>
</body>
</html>
POST 방식을 사용한 이유 - POST 방식은 GET 방식과 달리 데이터 전송을 기반으로 한 요청 메서드이기 때문이다.
다음으로는 그 뒤로 넘어갈 jsp 페이지
<%@ 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>
</head>
<body>
키<%=request.getAttribute("num1") %><br>
몸무게<%=request.getAttribute("num2") %><br>
bmi<%=request.getAttribute("result") %><br>
입니다.
</body>
</html>
JSP태그
<% %> java code를 넣는 태그이다.
<%= %> 출력하기 위한 태그이다. out.println이랑 비슷한 기능을 함.
<%@ %> 지시자 태그이고 Web container가 JSP를 Servlet으로 변환할 때 특정 지시를 내리기 위해서 사용하는 태그
request와 response
클라이언트가 서버쪽으로 요청하는 것은 request
서버가 클라이언트에게 응답하는 것은 response
get과 set
get은 데이터를 빼내 오는 것
set은 데이터를 입력하는 것
request.setParameter()와 requestsetAttribute()
request.setParameter() get Parameter는 String의 값 밖에 받을 수 없다
requestsetAttribute() getAttribute는 List를 받기 위해 사용한다 (type이 Object이기 때문에 형변환 필요!)
결론적으로
출력 태그를 이용하여 클라이언트가 서버쪽으로 요청하며
num1이라는 인자값을 get 하라는 것이다.
Object타입으로
Spring Bean Configuration File
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">
<!-- 자바 어노테이션 기반의 컨피규레이션 설정하겠다는 뜻 -->
<context:annotation-config></context:annotation-config>
<!-- @Controller, @Component, Repository, @ service등
스프링 컴포넌트 등록할 패키지(멀티 설정)-->
<context:component-scan base-package="com.yadoc"></context:component-scan>
</beans>
yadoc-servlet.xml 파일이고 Spring MVC설정파일 이라는 것.
XML 스키마 설정: Spring Beans, Context, MVC...
왜 저렇게 파일을 만들고 어떤 설정들이라는 것인지 이해가 안된다 ㅜㅜ
패키지를 설정해준다는 것과 무언가 여러가지 설정들이라는 것... 다음에 보완해야겠다.
기본적인 흐름은 client 가 요청을 하면 @Controller에 진입하고 그 요청에 대해 작업을 수행 후 뷰로 데이터를 전달한다.
우선 @Controller를 이용해서 클래스를 생성하고 @RequestMapping을 이용해 view의 요청 경로를 지정한다.
요청 처리 메서드를 구현하고 뷰 이름을 리턴한다.
package com.yadoc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class AddBmi {
@RequestMapping("/bmi")
public ModelAndView add(
HttpServletRequest request,
HttpServletResponse response) {
double i = Double.parseDouble(request.getParameter("t1"));
double j = Double.parseDouble(request.getParameter("t2"));
double k = j/((i*i)*0.0001);
ModelAndView mv = new ModelAndView();
mv.setViewName("display.jsp");
mv.addObject("result",k);
mv.addObject("num1",i);
mv.addObject("num2",j);
return mv;
}
}
@Controller (이것이 컨트롤러라고 자기 주장 하는 것이다.)
전통적인 Spring MVC의 컨트롤러는 주로 View를 반환하기 위해 사용한다.
- Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
- Mapping 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
- Controller가 요청을 처리한 후에 응답을 DispatcherServlet으로 반환하고, DispatcherServlet은 View를 사용자에게 반환한다.
@RequestMapping
bmi라는 요청에 대한 맵핑된 메서드 이다. jsp의 bmi 요청을 처리한다.
ModelAndView
Controller의 처리 결과를 보여줄 view와 view에서 사용할 값을 전달하는 클래스이다.
HttpServletRequest, HttpServletResponse
WAS는 웹 브라우저로부터 Servlet요청을 받으면
요청할 때 가지고 있는 정보를 HttpServletRequest 객체를 생성하여 저장
웹 브라우저에게 응답을 보낼 때 사용하기 위하여 HttpServletResponse객체를 생성
생성된 HttpServletRequest, HttpServletResponse 객체를 서블릿으로 전달
mv객체를 생성.
setViewName() 메소드 ("뷰의 경로") 안에 뷰의 경로를 설정한다.
addObject() 메소드 데이터를 보낼 때 사용한다. ("변수 이름", "데이터 값")
그리고 return mv;
ModelAndView 객체를 반환한다.
return 이란 메서드의 종료, 값의 반환의 역할을 한다. 메서드를 종료함과 동시에 호출한 부분으로 반환한다.
그렇게 display.jsp가 실행된다.
끝
https://gap85.tistory.com/entry/%EC%95%A1%EC%85%98%ED%83%9C%EA%B7%B8
https://mommoo.tistory.com/60
https://mangkyu.tistory.com/49
https://andamiro25.tistory.com/148
'Spring Framework > spring공부' 카테고리의 다른 글
Spring MVC패턴 (2) | 2020.06.14 |
---|