저번에 이어서 다 못한 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를 반환하기 위해 사용한다.

  1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.
  2. Mapping 되는 Handler와 그 Type을 찾는 DispatcherServlet이 요청을 인터셉트한다.
  3. 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://imdsoho.tistory.com/entry/requestsetAttribute%EC%99%80-requestgetAttribute%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C

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

+ Recent posts