Java Spring Boot - Spring Controller
Spring Boot Controller
클래스 작성하기
-
요청 ~ 응답 처리:
@Controller
-
요청 파악 :
// servlet2.x: web.xml 설정 <url-pattern>/login</url-pattern> // servlet3.x: web.xml, 서블릿 어노테이션 설정 @WebServlet(url-patterns = {"/login", "/member/login"})
-
요청 http 메서드 재정의 서비스
doGet(HttpServletRequest, HttpServletResponse) doPost(HttpServletRequest, HttpServletResponse)
-
요청데이터 한글 인코딩설정하기
request.setCharacterEncoding("utf-8");
-
요청데이터 가져오기
String memberId = request.getParameter("memberId"); String data = request.getParameter("data"); int dataInt = Integer.pareseInt(data); Member dto = new Member(memberId, memberPw, .....);
-
요청처리를 Service 객체 의뢰
// 의존관계 객체 생성 MemberService service = new MemberService();
-
Service 요청처리 결과를 받아서 응답을 위한 설정
request.setAttribute("key", Object); session.setAttribute("key", Object); application.setAttribute("key", Object);
-
응답 이동
PrintWriger out = response.getWriter(); out.println("<h3>....</h3>"); // jsp 이동: redirect, forward
요청 매핑하기
@RequestMapping
Spring Boot 응답하기
- 데이터 응답하기
- @RequestMapping
- @ResponseBody
- String, int, double, boolean
- Domain, List, Map
- JSP 페이지 이동 응답하기
Spring Start Project 생성하기
- 의존관계: Spring Web, Spring Boot DevTools, Lombok
Spring Boot JSP 사용하기
- 추가 tools 설치 : Marketplace → jsNature
- 의존관계 라이브러리 추가 설정 : pom.xml (프로젝트 생성 후 jsp, jstl 라이브러리 추가)
<!-- jsp 라이브러리 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- jstl 라이브러리 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
-
JSP 파일 위치 생성
→ 기본 루트 폴더 : /src/main/webapp>
→ 폴더 생성 : WEB-INF/jsp (또는 views)
→ /src/main/webapp/WEB-INF/jsp>
-
환경설정: application.properties 파일 ⇒ jsp 폴더 위치 지정
— server port 설정 : 기본 8080
jsp view resolver
— jsp 페이지 처리위한 경로 및 확장자 지정
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
server auto reload
spring.devtools.livereload.enabled=true
MyBatis FrameWork
Servlet/JSP Web Application 배포구조(spec)
- 운영(서비스제공) 환경 폴더 구조
tomcat\\webapps\\프로젝트명> static 파일 위치
tomcat\\webapps\\프로젝트명\\sub-folder> static html 파일 sub 폴더 위치
tomcat\\webapps\\프로젝트명\\css> static css 파일 sub 폴더 위치
tomcat\\webapps\\프로젝트명\\js> static js 파일 sub 폴더 위치
tomcat\\webapps\\프로젝트명\\img> static img 파일 sub 폴더 위치
tomcat\\webapps\\프로젝트명> dynamic jsp 파일 sub 폴더 위치 => spring f/w 서버단에 위치
tomcat\\webapps\\프로젝트명\\WEB-INF> web.xml
tomcat\\webapps\\프로젝트명\\WEB-INF\\classes> package *.class
tomcat\\webapps\\프로젝트명\\WEB-INF\\lib> *.jar
tomcat\\webapps\\프로젝트명\\WEB-INF\\views | jsp> dynamic jsp 파일 sub 폴더 위치 => spring f/w 서버단에 위치
=> tomcat\\webapps\\프로젝트명\\WEB-INF> 폴더는 외부(사용자)에서 직접 접근 불가 폴더(서버에서 보안적용된 폴더)
controller 클래스에서 요청 매핑하기
- controller 클래스 작성하기
@Controller
public class HomeController {}
- 요청서비스 메서드 및 요청 매핑하기
// 기본형식
@RequestMapping("url-pattern");
public 반환타입 메서드명([args]) {}
응답 하기
- text 데이터 응답하기
@RequestMapping("/") // 요청 매핑하는 어노테이션 <url-pattern>
@ResponseBody // 데이터 응답하기 위한 어노테이션: 응답데이터타입(String, int, Object, Collection)
public String home() {
return "회원관리 메인화면";
}
- jsp 페이지 응답하기
@RequestMapping("/")
public String home() {
return "view-url"; // application.properties 설정 기반으로 응답 view 객체 생성
}
@GetMapping("/loginForm")
public String loginForm() {
return "login"; // /WEB-INF/jsp/login.jsp
}
요청 데이터 가져오기
@RequestMapping("/url-pattern")
public String serviceMethod(String varName, String varName, int qty) {}
@RequestMapping("/url-pattern")
public String serviceMethod(DomainClass domain) {}
@RequestMapping("/url-pattern")
public String serviceMethod(HttpServletRequest request) {}
-
login.jsp
<form > <input type="text" name="memberId"> </form>
@RequestMapping("/url-pattern") public String serviceMethod(String memberId) {}
-
parameter name 다른 경우
@RequestMapping("/userInput") public void userInput(@RequestParam(value = "userid") String memberId, @RequestParam(value="userpw") String memberPw, @RequestParam String name) { System.out.println(memberId + ", " + memberPw + ", " + name); }
-
필수입력항목, 미입력시 기본값 설정
@RequestMapping("/memberInputRequired") public String memberInputRequired(@RequestParam(required = true, defaultValue = "guest99") String memberId, @RequestParam(required = true, defaultValue = "password99") String memberPw) { System.out.println(">> parameter: " + memberId + ", " + memberPw); return "result"; // result.jsp }
응답결과 설정하기
-
Model API → addAttribute(key, value); → return “view-url-name”;
public String doService(Model model) { model.addAttribute(key, value); return "view-url-name"; }
-
ModelAndView API → addObject(key, value); → setViewName(“view-url-name”); → return ModelAndView객체;
public ModelAndView doService() { ModelAndView mv = new ModelAndView(); mv.addObject(key, value); mv.setViewName("view-url-name"); return mv; } public ModelAndView doService(ModelAndView mv) { //ModelAndView mv = new ModelAndView(); mv.addObject(key, value); mv.setViewName("view-url-name"); return mv; }
Static 파일 사용하기
— html, css, js, image 등
- 위치:
- 기본폴더: src/main/resources/static
- 서브폴더 생성 관리
- src/main/resources/static/css> common.css
- src/main/resources/static/img> logo.png
<!-- css 외부파일 :
기본폴더(개발): src/main/resources/static>
서브폴더(운영): 기본폴더/css/common.css
-->
<link type="text/css" rel="stylesheet" href="/css/common.css">
<img src="/img/logo.png" alt="logo" />
view ⇒ controller
- 요청view → controller 요청
- controller → 응답설정 → 응답페이지 이동
— view ⇒ controller [⇒ service ⇒ dao ⇒ dto ⇒ dbms]
댓글남기기