저번에 이어서 다 못한 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

이번에 학원에서 배운 Spring MVC패턴에 대해 공부해보기로 한다.


우선 MVC 패턴이란???

 

Model, View, Controller를 분리한 디자인 패턴이다. (_개발자가 직접 구현해야 한다!_)

스프링 MVC는 모델 2 방식의 구조이면 웹 개발 시 대부분 MVC구조를 응용한 방식으로 사용한다.

디자이너와 개발자의 작업분리가 되어 작업하기가 편하다.

 

 

  • Model
    • 데이터를 처리하는 부분이다.
    • Java Beans(자바로 작성된 컴포넌트 즉 클래스를 일반적으로 말한다. jsp페이지의 디자인 부분과 로직 부분을 나누어 코드를 줄이고 프로그램의 재사용성을 증가시킨다. (((자바빈에 대해서는 더 공부가 필요하지만 일단은 넘어가는 걸로...)))
  • View
    • JSP HTML 화면을 담당한다. 
  • Controller
    • View와 Model사이의 인터페이스이다.
    • 입력 및 요청을 수신하여 Model에 담아 View에 전달한다
    • Controller>Service>Dao>DB
    •  

- 요약 - 클라이언트가 컨트롤러에게 요청

           컨트롤러가 모델에게 요청

           모델이 컨트롤러에게 응답

           컨트롤러가 응답받고 뷰에게 보냄

           뷰가 화면으로 보냄

 


이번에는 키와 몸무게를 내보내는 문제를 아주 간단하게 MVC패턴으로 해보자.

코드 공부라기보다는 주요 개념들을 위주로 공부하겠다.


 

우선 Maven Project

메이븐은 오픈소스 빌드 툴이다.

컴파일과 동시에 빌드를 수행할 수 있으며 테스트를 병행, 서버 측 디플로이 자원을 관리할 수 있는 환경을 제공한다.

프로젝트의 종속 라이브러리들과 그 라이브러리에 영향을 미치는 Deppendency 자원까지 관리할 수 있다.

jar 파일을 다운받아 프로젝트에 추가할 경우 연관된 다른 종속 라이브러리 또한 다 찾아야 하는 불편함을 Maven을 통해 의존성 관리를 할 수 있다.

메이븐을 사용하기 위해 메이븐을 설치하고 POM(Project Object Model)을 작성한 후 각종 빌드 스크립트 혹은 명령어를 배워야 한다.

 

 

src

main

java

자바 소스(.class)파일 두는 곳

resources

자바 관련 리소스 파일 두는 곳

webapp

html, jsp 등 web관편 파일 둠


web.xml

 

web application의 설정을 위한 deployment descriptor (배포서술자)

 

Deploy 할 때 Servlet의 정보를 설정해준다

브라우저가 Java Servlet에 접근하기 위해서는 WAS(톰켓)에 필요한 정보를 알려줘야 해당 Servlet을 호출할 수 있다.

배포할 Servlet이 무엇인지 해당 Servlet이 어떤 URL에 매핑되는지...

 

 

위의 서블릿 name과 서블릿 맵핑의 이름은 같아야 한다.

servlet-class는 개발자에 의해 작성된 클래스 이름과 같아야 한다. Ex. (패키지 이름.)(서블릿 클래스 이름)

 

url-pattern은 클라이언트의 요청 URL에서 앱 이름 뒤에 오는 부분이다.

 

한마디로 web.xml은 배포서술자 URL이 서블릿에 매핑되는 방법, URL 등의 정보 확인, 웹서버가 이를 사용하여 웹 요청을 처리하는 방법을 기술한다. 매핑한다.


pom.xml

빌드 파일이다.

메이븐은 pom.xml 빌드 파일을 사용하여 빌드 정보를 기술한다.

Project Object Model의 약자로 프로젝트의 다양한 정보를 처리하기 위한 객체 모델이다.


servlet.xml

처음에 web.xml이 돌아가면서 dispatcher-servlet을 실행시키게 되면 servelt.xml에 있는 내용이 적용된다

요청할 컨트롤러 파일이 존재하는 패키지를(com.yadoc) 탐색하도록 하여 서블릿이 요청을

전달받을 수 있도록 기본 설정한다.

 





 

'Spring Framework > spring공부' 카테고리의 다른 글

Spring MVC패턴2  (1) 2020.06.16

+ Recent posts