Java Spring Boot - Spring Controller

3 분 소요

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 응답하기

  1. 데이터 응답하기
    • @RequestMapping
    • @ResponseBody
    • String, int, double, boolean
    • Domain, List, Map
  2. JSP 페이지 이동 응답하기

Spring Start Project 생성하기

  • 의존관계: Spring Web, Spring Boot DevTools, Lombok

Spring Boot JSP 사용하기

  1. 추가 tools 설치 : Marketplace → jsNature
  2. 의존관계 라이브러리 추가 설정 : 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>
  1. JSP 파일 위치 생성

    → 기본 루트 폴더 : /src/main/webapp>

    → 폴더 생성 : WEB-INF/jsp (또는 views)

    → /src/main/webapp/WEB-INF/jsp>

  2. 환경설정: 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]) {}

응답 하기

  1. text 데이터 응답하기
@RequestMapping("/")	// 요청 매핑하는 어노테이션 <url-pattern>
@ResponseBody	// 데이터 응답하기 위한 어노테이션: 응답데이터타입(String, int, Object, Collection)
public String home() {
	return "회원관리 메인화면";
}
  1. 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]

댓글남기기