웹개발 교육/Spring

[66일] spring (3) - MVC

ewok 2022. 10. 31. 17:42

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:ptl:spring_mvc_architecture 

 

egovframework:rte2:ptl:spring_mvc_architecture [eGovFrame]

Spring Framework은 간단한 설정만으로 Struts나 Webwork같은 Web Framework을 사용할 수 있지만, 자체적으로 MVC Web Framework을 가지고 있다. Spring MVC는 기본요소인 Model, View, Controller 외에도, 아래와 같은 특성

www.egovframe.go.kr

 

새 프로젝트 생성

Application.java가 붙은 파일은 시작 클래스이다.

run은 Spring Boot App을 통해 한다.

 

kr.co.itwill 패키지에 HelloController 클래스를 생성한다.

 

HelloController.java

package kr.co.itwill;

import org.springframework.stereotype.Controller;

//URL에서 요청한 명령어를 읽어서 처리해주는 클래스
//HelloController 클래스는 컨트롤러 기능이다.
@Controller
public class HelloController {
	
	public HelloController() {
		System.out.println("-----HelloController()객체 생성됨");
	}//end
	
}//class end

 

시작 클래스인 Spring02MbcApplication.java를 run 한 결과

 

 

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:ptl:annotation-based_controller 

 

egovframework:rte2:ptl:annotation-based_controller [eGovFrame]

작업중입니다… ControllerAdvice추가예정 스프링 프레임워크는 2.5 버젼 부터 Java 5+ 이상이면 @Controller(Annotation-based Controller)를 개발할 수 있는 환경을 제공한다. 인터페이스 Controller를 구현한 SimpleFo

www.egovframe.go.kr

 

HelloController.java

package kr.co.itwill;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

//URL에서 요청한 명령어를 읽어서 처리해주는 클래스
//HelloController 클래스는 컨트롤러 기능이다.
//스프링컨테이너(웹서버)가 자동으로 객체를 생성한다.
@Controller
public class HelloController {
	
	public HelloController() {
		System.out.println("-----HelloController()객체 생성됨");
	}//end
	
	//결과확인 http://localhost:9095/hello.do
	//요청명령어 등록 후 실행의 주체는 메소드(함수)
	
	@RequestMapping("/hello.do")
	public void hello() {
		
	}//hello() end
	
}//class end

@RequestMapping의 ( ) 안에 요청 명령어를 등록한다. 이 명령어가 들어오면 hello 메서드가 실행된다.

 

pom.xml

<!-- 뷰페이지를 JSP로 지정하려면 의존성 추가해야 함 -->
<!-- https://mvnrepository.com에서 jasper 검색 -->
<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <version>9.0.58</version>
</dependency>

추가

 

application.properties 한글 인코딩 (우클릭 - Properties - Resource - Text file encoding (Other : UTF-8)

 

application.properties

#주석
#/src/main/resources/application.properties 환경설정 파일

#Spring Boot는 WAS(Tomcat) 내장되어 있음(기본port번호 8080)
#톰캣서버의 http port번호 변경
server.port=9095

Spring Boot App으로 run

이클립스에서 톰캣 포트번호를 9090으로 사용하고 있다. 이클립스에서 톰캣이 실행 중인데 sts에서 또 실행하려고 하면 에러가 나기 때문에 처음부터 포트번호를 변경하여 사용한다.

 

포트 번호가 9095로 변경되었다.

 

jsp를 뷰페이지로 사용하려면 WEB-INF 폴더를 생성해야 한다.

myweb에서는 bbs, member, pds 등의 폴더를 webapp 폴더에 생성하였다. WEB-INF는 물리적으로 접근할 수 없기 때문에 이 안에 뷰 파일들을 넣으면 보안이 더 강화된다.

JSP파일은 views에서 관리할 것이다.

 

hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>hello.jsp</title>
</head>
<body>

	<h3>안녕하세요~~</h3>
	
</body>
</html>

 

 

다시 application.properties로 와서

#주석
#/src/main/resources/application.properties 환경설정 파일


#Spring Boot는 WAS(Tomcat) 내장되어 있음(기본port번호 8080)
#톰캣서버의 http port번호 변경
server.port=9095


#주의사항 JSP, Thymeleaf, Mustache는 공통으로 사용할 수 없음
#JSP를 뷰페이지로 사용할 경우 pom.xml에 라이브러리 추가해야 함
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

 

HelloController.java

package kr.co.itwill;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

//URL에서 요청한 명령어를 읽어서 처리해주는 클래스
//HelloController 클래스는 컨트롤러 기능이다.
//스프링컨테이너(웹서버)가 자동으로 객체를 생성한다.
@Controller
public class HelloController {
	
	public HelloController() {
		System.out.println("-----HelloController()객체 생성됨");
	}//end
	
	//결과확인 http://localhost:9095/hello.do
	//요청명령어 등록 후 실행의 주체는 메소드(함수)
	
	@RequestMapping("/hello.do")
	public ModelAndView hello() {
		
		ModelAndView mav = new ModelAndView();
		
		//application.properties 환경 설정 파일의 prefix와 suffix값을 조합해서 뷰페이지를 완성
		// /WEB-INF/views/hello.jsp
		mav.setViewName("hello");
		
		return mav;
		
	}//hello() end
	
}//class end

서버 재실행 후 http://localhost:9095/hello.do 를 통해 결과를 확인

hello.jsp에서 작성한 내용이 나오는 것을 확인할 수 있다.

 

 

부모 페이지에서 값을 올리면 자식 페이지에서 request, session, application을 이용해 가져다 사용할 수 있다.

 

HelloController.java

package kr.co.itwill;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

//URL에서 요청한 명령어를 읽어서 처리해주는 클래스
//HelloController 클래스는 컨트롤러 기능이다.
//스프링컨테이너(웹서버)가 자동으로 객체를 생성한다.
@Controller
public class HelloController {
	
	public HelloController() {
		System.out.println("-----HelloController()객체 생성됨");
	}//end
	
	//결과확인 http://localhost:9095/hello.do
	//요청명령어 등록 후 실행의 주체는 메소드(함수)
	
	@RequestMapping("/hello.do")
	public ModelAndView hello() {
		
		ModelAndView mav = new ModelAndView();
		
		//application.properties 환경 설정 파일의 prefix와 suffix값을 조합해서 뷰페이지를 완성
		// /WEB-INF/views/hello.jsp
		mav.setViewName("hello");
		
		//서로 다른 페이지들 간에 값을 공유하기 위해서
		//-> request, session, application 활용
		
		//request.setAttribute() 함수와 동일
		mav.addObject("message", "Welcome to MyHome!!");
		
		return mav;
		
	}//hello() end
	
}//class end

 

hello.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>hello.jsp</title>
</head>
<body>

	<h3>안녕하세요~~</h3>
	${requestScope.message}
	<br>
	${message}
	
</body>
</html>