-개발환경-
IDE : Eclipse 2018-12 (4.10.0) Spring Tool Suite : 3.9.7.RELEASE WAS : Pivotal tc Server Developer Edition v4.0 (피보탈 톰캣 서버) |
-설정-
-서버 포트번호 변경- 서버가 오라클,SQL 포트번호와 충돌안나게 안쓰는것으로 변경해주는것이 목표. 디폴트로 서버 포트번호는 8080임 서버들어가서 => Properties의 nio.http.port 를 9090이나 남는 포트번호로 변경하기 -STS 브라우저 테스트환경 설정해주기- WINDOW => Web Browser => Chrome 선택해서 테스트 환경을 크롬으로 잡아주기 -한글깨짐방지 태그 추가해주기- web.xml 파일에서 아래 태그들 추가.
|
-파일구성-
-servlet-context.xml-
1
|
<context:component-scan base-package="com.koreait.springMVCSample" />
|
cs |
server-context.xml 에서
<context:component-scan base-package="com.koreait.springMVCSample" /> 가 의미하는것은 아래와 같다.
controller가 있는 패키지 경로를 잡아준다.
base-package는 프로젝트를 생성할때 사용자가 입력한 내용으로 만들어주는 패키지로
@Controller어노테이션을 붙여준 컨트롤러 클래스 파일을 읽어들이는 기본 위치가 된다.
즉 , @Controller 어노테이션이 붙어있다고 해서 모두 컨트롤러로 인식되는 것이 아니고
base-package로 지정된 곳에서 @Controller어노테이션이 붙어 있는 클래스만 컨트롤러로 인식한다.
1
2
3
4
5
|
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
|
cs |
servlet-context.xml의 <beans:bean> 태그에서,
컨트롤러 클래스의 @RequestMapping 어노테이션이 붙은 메소드가 리턴하는 view 페이지 이름,앞,뒤에
자동으로 붙여줄 내용을 지정한다.
@RequestMapping 어노테이션이 붙은 메소드가 리턴하는 view 페이지 이름이 "home" 이라면
"/WEB-INF/views/home.jsp" 가 된다.
-HomeController.java-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package com.koreait.springMVCSample;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@RequestMapping( "/index.nhn")
public String home() {
return "home";
}
}
|
cs |
18 : 주소창에 서비스 요청이 들어오면 컨트롤러클래스의
@RequestMapping 어노테이션의 인수로 지정된 value 속성(생략가능)과
일치되는지 비교후, 일치된다면 @RequestMapping 어노테이션이 붙어 있는
메소드가 실행된다.
@RequestMapping 속성으로 RequestMethod.GET 이 지정되면 get 방식의 요청만
처리할 수 있고 RequestMethod.POST가 지정되면 post방식의 요청만 처리할 수 있다.
추가로 , 요청방식이 일치하지 않으면 405 에러가 발생된다.
ex) @RequestMapping(value = "/", method = RequestMethod.POST)
아래와 같이 @RequestMapping 어노테이션에서 method 속성을 생략하면 get방식과 post 방식을
구분하지 않고 모든 요청을 받아 처리할 수 있다.
value 속성만 남았을때, 'value=' 는 생략 가능
20 : @RequestMapping 어노테이션이 붙은 메소드는
수행후 view페이지(jsp파일)이름을 리턴시킨다.
view 페이지 이름은 문자열이므로 메소드의 리턴 타입은 String 이 되고
리턴되는 view 페이지 이름의 앞,뒤에 붙여주는 내용은 servlet-context.xml
파일에서설정한다
-MyController.java-
1
2
3
4
5
6
7
|
@Controller
public class MyController {
@RequestMapping("/view")
public String view() {
System.out.println("MyController의 view() 메소드 실행");
return "view";
}
|
cs |
일반적인 SPRING MVC 순서.
클라이언트로 부터 서비스 요청이 들어왔을 때 , 컨트롤러로 진입하게 되고
컨트롤러는 요청에 따른 작업을 실행한 후 뷰 페이지로 데이터를 전달한다.
컨트롤러 제작순서
1. base-package로 지정된 패키지에 임의의 이름으로 클래스를 만들고 @Controller 어노테이션을 붙여서
컨트롤러로 사용할 클래스임을 스프링에게 알려준다.
2. @RequestMapping어노테이션의 인수로 클라이언트에서 넘어오는 것을 지정한다.
3.요청을 처리할 임의의 이름의 메소드를 만든다.
뷰 페이지 이름은 문자열이므로 메소드의 리턴 타입은 String으로 지정한다.
4. 작성한 메소드에서 필요한 작업을 모두 완료한 후 뷰 페이지(jsp 파일)의 이름을 리턴시킨다.
-MyController.java-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@Controller
public class MyController {
~~~생략~~~
@RequestMapping("/model")
public String model(Model model) {
System.out.println("MyController의 model() 메소드 실행");
model.addAttribute("id","asdfg");
model.addAttribute("pw","12345");
model.addAttribute("name","홍길동");
return "model/model";
}
~~~생략~~~
|
cs |
7 : @RequestMapping 어노테이션이 설정된 메소드는
Model 인터페이스 객체를 인수로 가질수 있다.
Model 인터페이스 객체는 컨트롤러에서 뷰 페이지로 넘겨줄 데이터를 저장한다.
jsp 의 response객체와 같은 역할을 한다.
9~11 : Model객체변수.addAttribute(key,value) : Model 인터페이스 객체에
key에 따른 value를 넣어준다.
13 : servlet_context.xml 파일에 의해서 "/WEB-INF/views/model/model.jsp"로 변환된다.
그리고 해당파일 호출.
-MyController.java-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@Controller
public class MyController {
~~~ 생략 ~~~
@RequestMapping("/modelAndView")
public ModelAndView modelAndView(Model model) {
System.out.println("MyController의 modelAndView() 메소드 실행");
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("modelAndView/modelAndView");
modelAndView.addObject("id","qwert");
modelAndView.addObject("pw","67890");
modelAndView.addObject("name","임꺽정");
return modelAndView;
}
}
|
cs |
6 : ModelAndView 클래스 객체는 컨트롤러에서 뷰페이지로
뷰 페이지 이름과 데이터를 저장한다.
뷰 페이지 이름과 뷰페이지로 넘겨줄 데이터를 ModelAndView 클래스 객체에 저장해서
리턴 시켜야 하므로 메소드의 리턴 타입은 ModelAndView를 사용한다.
기존의 방식은 String을 리턴타입으로 하였다. 차이점 숙지.
8 : 뷰 페이지로 넘겨줄 데이터와 뷰페이지 이름을 저장할 ModelAndView 클래스 객체를 생성한다.
9 : setViewName() : 뷰 페이지 이름을 넣어준다.
10~ 12 : addObject(key,value) : 뷰 페이지로 넘겨줄 데이터를 KEY-VALUE로 저장한다.
13 : ModelAndView 객체를 리턴한다.
-YourController.java-(자주 사용되지는 않는다.)
1
2
3
4
5
6
7
8
9
10
|
@Controller
@RequestMapping("/board")
public class YourController {
@RequestMapping("/contentView")
public String contentView() {
System.out.println("YourController의 contentView() 메소드 실행");
return "board/contentView";
}
}
|
cs |
controller클래스에 @RequestMapping 어노테이션이 직접적으로 붙는다면 ,
controller에 붙은 어노테이션과 메소드에 붙은 어노테이션을 합쳐서
요청해야 뷰페이지를 제대로 찾아갈 수 있다.
이 예제에선 /board/contentView 로 요청해야한다.
-servlet-context.xml-
1
2
3
4
|
<resources mapping="/resources/**" location="/resources/" />
<resources mapping="/images/**" location="/WEB-INF/images/" />
<resources mapping="/css/**" location="/WEB-INF/css/" />
<resources mapping="/js/**" location="/WEB-INF/js/" />
|
cs |
resources 태그의 mapping 속성에 지정된 요청이 들어오면 controller클래스를 검색하지 않고
resources 태그의 location 속성에 지정된 경로를 검색한다.
위의 예에서는 image,css,js 경로를 잡아주었다.
-model.jsp-
1
2
|
<link rel="stylesheet" type="text/css" href="css/style.css" >
<script type="text/javascript" src="js/script.js"></script>
|
cs |
css폴더와 , js폴더의 경로는 servlet-context.xml에서 미리 mapping된 경로를 따라간다.
-model.jsp-
1
2
3
4
5
6
7
8
9
10
|
<body>
<h1 onclick="hello()">model.jsp 입니다<br/></h1>
id: ${id}<br/>
pw: ${pw}<br/>
name: ${name}<br/>
<img alt="아무이미지" src="./images/download.jpg"/>
</body>
</html>
|
cs |
4~6 : controller에서 Model인터페이스객체에 저장되서 넘어오는 데이터는
EL 을 사용해서 얻어오면 된다.
8 : 이미지 src 경로는 servlet-context.xml 에서 미리 정의된 resource mapping을 따라간다.
-요약-
-마침글-
인용
'21년이전 > SPRING' 카테고리의 다른 글
SPRING - (MVC) DBCP 게시글 예제 (0) | 2021.05.01 |
---|---|
SPRING - (MVC) 컨트롤러-뷰 의 데이터 흐름 (0) | 2021.04.29 |
SPRING - MVC Project 구성하기 및 파일탐색 (0) | 2021.04.29 |
SPRING - AOP 수행하기 2번째방법 (0) | 2021.04.29 |
SPRING - AOP수행하기 첫번째 방법 (0) | 2021.04.28 |