[66일] spring (3) - MVC
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>