3. Client Front Controller LOGIN
LOGOUT
ADD
MULTIPLICATION
web.xml
View
Template
request request request
response response
DispatcherServlet CONTROLLERS
model and
view name
@Controller
@Controller
@Controller
@Controller
oraclejava-servlet.xml
4. 개발 장비 셋팅
• Window 7(OSX) 이상
• Chrome(Safari) or IE11
• JDK 1.8 설치
• Apache Tomcat 7.0 이상 설치
• Eclipse EE 설치(최신버전)
이클립스 단축키
Ctrl + Shift + L
http://seohs.tistory.com/488
21. 컨트롤러 구성
package com.oraclejava; // 패키지는 반드시 있어야 함
public class AddController { // 클래스는 상속받지 않음
public void add() { //요청을 처리할 메서드(이름은 자유)
//실제 처리하는 내용
System.out.println("Add Controller");
}
}
25. Spring MVC 설정파일({서블릿명}-
servlet.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:ctx="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc=http://www.springframework.org/schema/mvc
…
XML파일이라는 것 알려줌
XML 스키마 설정:
Spring Beans, Context, MVC
26. Spring MVC 설정파일({서블릿명}-
servlet.xml)
자바 어노테이션 기반의 컨피규레이션 설정하겠다는 뜻
@Controller, @Component,
@Repository, @Service등
스프링 컴포넌트 등록할 패키지
(멀티 설정 가능)
• <ctx:annotation-config></ctx:annotation-config>
• <ctx:component-scan base-
package="com.oraclejava"></ctx:component-scan>
27. @Controller, @RequestMapping
• 경고: No mapping found for HTTP request with URI
[/DemoMVC/add] in DispatcherServlet with name 'oraclejava’
• 원인: 요청에 대한 Dispacher에서 맵핑된 컨트롤러를 찾을 수 없기
때문에
28. @Controller, @RequestMapping
package com.oraclejava;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller // 이 클래스가 컨트롤러라는 것을 나타냄
public class AddController {
@RequestMapping("/add") // /add라는 요청에 대한 맵핑된 메서드
public void add() {
System.out.println("Add Controller");
}
}
36. 서비스 클래스
• 로직 처리
package com.oraclejava.service;
public class AddService {
public int add(int x, int y) {
int sum = x + y;
return sum;
}
}
@RequestMapping("/add")
public ModelAndView add(HttpServletRequest
request, HttpServletResponse response) {
int i =
Integer.parseInt(request.getParameter("t1"));
int j =
Integer.parseInt(request.getParameter("t2"));
//int k = i + j;
AddService as = new AddService();
int k = as.add(i, j);
ModelAndView mv = new ModelAndView();
mv.setViewName("display.jsp");
mv.addObject("result", k);
return mv;
}
41. Spring Web Initializer
• 기존의 oraclejava-servlet.xml 파일 삭제
• web.xml의 servlet, servlet-mapping 삭제
42. 뷰리졸버 설정
@Configuration
@ComponentScan({"com.oraclejava"})
public class OracleJavaConfig {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver vr = new InternalResourceViewResolver();
vr.setPrefix("/WEB-INF/");
vr.setSuffix(".jsp");
return vr;
}
}
46. STS(Spring Tool Suite) 다운로드 및 설치
• https://spring.io/tools3/sts/all
• 플랫폼 별로 다운로드 받아 설치
• 윈도우: 압축을 푼후 sts-bundle 안에 sts.exe 실행
• (시작화면에 고정 혹은 바탕화면에 바로가기 지정)
• 기존의 메이븐 프로젝트 작성 가능
47. Spring Boot
• 기존의 EJB와 같은 복잡한 어플리케이션 일수록 환경설정이 어
렵다.
• “톰캣"과 같은 컨테이너를 포함해서 "독립적”으로 앱을 만들
수 없을까? Spring Boot
• STS를 통해 만들 수 있고 https://start.spring.io 를 이용해서도
앱을 작성 가능하다
48. STS를 이용한 앱 작성
File -> New -> Spring Starter Project
Name: FirstProj
Group: com.oraclejava
Description: Oraclejava project for Spring Boot
Package: com.oraclejava.firstproj
65. View로 jsp사용하기
• View의 종류
• Velocity
• Thymeleaf
• Jsp
• Jsp를 사용하기 위한 준비
• /src/main/webapp폴더 준비(jsp 루트)
• mvnrepository.com 에서 설치된 톰캣에 맞는 tomcat jasper 설치
66. /src/main/webapp폴더 준비(jsp 루트)
• src
• main
• webapp
• home.jsp
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE htmlPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
hi! this is home
</body>
</html>
67. mvnrepository.com 에서 설치된 톰캣에
맞는 tomcat jasper 설치
• https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-
jasper/9.0.12
• pom.xml
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper</artifactId>
<version>9.0.12</version>
</dependency>
•
68. 컨트롤러 수정
@Controller
public class HomeController {
@RequestMapping("home")
public String home() {
//System.out.println("hi");
return "home.jsp";
}
}
리턴 타입을 String
jsp경로를 리턴
69. application.properties
• Spring Boot: Auto Configuration
• 포트 변경, DB 정보 등은 application.properties를 통해 설정
• spring.mvc.view.prefix=/pages/
• spring.mvc.view.suffix=.jsp
• server.port=8082
70. 컨트롤러 수정
@Controller
public class HomeController {
@RequestMapping("home")
public String home() {
//System.out.println("hi");
return "home";
}
}
리턴 타입을 String
뷰이름만을 리턴
71. Session을 이용한 데이터 전달
@Controller
public class HomeController {
@RequestMapping("home")
public String home(HttpServletRequest req) {
HttpSession session = req.getSession();
String name = req.getParameter("name");
System.out.println("hi " + name);
session.setAttribute("name", name);
return "home";
}
}
72. Session을 이용한 데이터 전달
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE htmlPUBLIC"-//W3C//DTDHTML 4.01Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
hi! ${name}님
</body>
</html>
73. Spring Boot hot reload
• Spring Boot Developer Tools 설치
https://docs.spring.io/spring-
boot/docs/current/reference/html/using-boot-devtools.html
• <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>