티스토리 뷰
Annotations
- @RequestMapping : URL과 controller의 메소드를 mapping(매칭해주는, 연결해주는)할 때 사용하는 annotation이다.
Spring에서 작업을 하면서 url 부분을 보면 꼭 특정 폴더에 들어있는 파일이 아니어도 url 상에서는 "/"로 구분되면서 마치 오느 폴더에 속해 있는 것 처럼 보이게 된다.
이렇게 URL을 처리하는 방식은 controller에서 정의해놓은 형식을 통해서 요청된 페이지에 따라 특정 페이지를 나타내주는 방법이다. 따라서 /board/list 라는 url이 있다고 하더라고 list가 꼭 board 폴더 안에 있다는 것을 의미하지 않는다.
아래의 사진을 참고해보면 controller에서 @RequestMapping이라는 annotation을 사용함으로써 /board/list이라는 url이 요청 되었을때 list.jsp 페이지를 찾아서 view로 나타내는 메소드가 설정되어 있다는 것을 볼 수 있다.
이런 점에선 Spring을 이용하면 back-end에서 어떤 작업이 이뤄지는지 노출이 많이 되지 않는다는 장점이 있다.
@RequestMapping에서는 value, method, params, consumes, produces등의 속성이 있는데 그중에서 value는 String 타입으로 URL 값으로 매핑 조건을 부여하는 defualt 속성이다.
-
@GetMapping 와 @PostMapping : HTTP get 요청/post 요청을 처리하는 매소드를 mappping하는 어노테이션이다. 다시 말해 @RequestMapping을 맵핑하는 어노테이션인 것이다. URL에 따라 어떤 페이지를 보여줄지 결정하는 역할을 한다.
RequestMappping에 속성을 지정해서 사용하지 않고 간단하게 사용할 수 있도록 나온 annotation이다. 이 annotation으로는 특히 다중 맵핑이 가능하다.
하나만 맵핑 할 경우:
@GetMapping("/main")
다중 맵핑 할 경우:
@GetMapping(value = {"/", "/index", "/main"})
간단한 사용 예시:
@GetMapping("/onlyGet")
public void onlyGet(){
}
@PostMappping("/onlyPost")
public void onlyPost(){
}
-
@RequestParam : HTTP request 파라미터를 받아 올 수 있는 annotation. 받아온 요청의 데이터를 읽어서 parameter 부분에, 주어진 method에 따라서 자동으로 binding 해준다. Edit이나 Delete 처리를 해서 특정 객체의 일ㄹ련 번호에 따라 어떤 작업을 처리해주고 싶을 때 유용하게 사용할 수 있다.
-
@PathVariable : URL 경로에 변수를 넣는 annotation. {}를 사용해 변수를 넣는다.
-
@RequestBody : HTTP 요청을 자바 객체로 변환해주는 annotation이다.
-
@ModelAttribute : VO객체를 만들어서 데이터를 한번에 보낼 수 있도록 해주는 annotation이다.
@Controller
Controller 파라미터 종류:
- HttpServletRequest/HttpServletResponse/ServletRequest/ServletResponse: 각 오브젝트를 파라미터로 사용하는 경우.
- HttpSession: HTTP 세션만 필요할 경우에 사용한는 파라미터. 서버에 따라서 multithread 환경에서 보안이 보장되지는 않는다. 서버에 상관없이 안전하게 사용하기 위해서는 어댑터의 synchronizeOnSession 속성을 true로 설정해줘야 한다.
- WebRequest/NativeWebRequest: WebRequest 또는 HttpServletRequest 의 요청 정보를 그대로 갖고 있고, servlet API 에 종속되어 있지 않는 오브젝트 타입이다.
- Locale: java.util.Locale 타입으로 Dispatcher Servlet의 지역정보 resolver가 결정한 locale 오브젝트를 제공 받을 수 있다.
- InputStream/Reader: HttpServletRequest의 getInputStran()을 통해서 받을 수 있는 콘텍트 스트림 또는 리더 타입 오브젝트를 받아올 수 있다.
- OutputStream/Writer: HttpServeltResponse의 getOutputStream() 으로 가져올 수 있는 출력하기 위한 컨텍스트 스ㅡ림 또는 "쓰기" 타입 오브젝느를 받을 수 있다.
Controller의 리턴타입 종류
아래의 모든 코드 출처: sambalim.tistory.com/69
1. ModelAndView
[public ModelAndView]
return "jsp파일 이름" 을 리턴해 해당하는 jsp 페이지를 찾아서 View로 나타낸다
@Controller
public class HelloController {
@RequestMapping("/hello")
public ModelAndView hello() {
ModelAndView view = new ModelAndView();
view.setViewName("hello");
view.addObject("name", "HarryPotter");
return view;
}
}
2. String
[public String]
String type으로 리턴하는 방식
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "hello";
}
}
3. void
리턴 값이 없는 경우도 있다
@Controller
public class HelloController {
@RequestMapping("/hello")
public void hello() {
}
}
4.Object
다음과 같이 VO 객체를 리턴할 수도 있다
5.@ResponseBody
이 어노테이션을 사용할 경우 리턴 값이 View를 통해서 출력되지 않고 HTTP response body에 직접 쓰인다.
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "<html><body><h1>Hello, ResponseBody!</h1></body></html>";
}
}
6. List
다음과 같이 list 타입으로도 리턴할 수 있다
참고:
'2020_실전프로젝트1' 카테고리의 다른 글
MyBatis CRUD 프로젝트 + 로그인 기능 추가 (0) | 2020.12.10 |
---|---|
MyBatis CRUD 프로젝트 (1) | 2020.12.10 |
Spring CRUD project - Annotation 이용해서 만들기 실습 (1) | 2020.11.26 |
Spring MVC framework 개념 정리 (0) | 2020.11.22 |
JSP CRUD 프로젝트 제작하기 #3 (0) | 2020.11.01 |
- Total
- Today
- Yesterday
- JSP환경구축
- Mavenproject
- HTML_Forms
- head #title #style
- UserBean
- HTML #id #iframe
- annotation
- 2020Camp
- HTML_Formatting
- HTML #Headings #Paragraph #Styles
- HTML #media #video #YouTube
- HTML #class
- links lists tables display
- text_shadow
- HTML #Tables
- fontstyle
- HTML #Canvas #SVG
- html
- STS4
- box_model
- javascript #datatype
- Block_element #inline_element
- jsp
- 인용문 #주석
- css
- meta #link #script #base #HTML
- DB4free
- JSP_CRUD
- HTML #CSS
- DynamicWebProject
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |