Controller작성 실습 1/3

    1. 웹 브라우저에서 http://localhost:8080/mvcexam/plusform 이라고 요청을 보 내면 서버는 웹 브라우저에게 2개의 값을 입력받을 수 있는 입력 창과 버튼이 있는 화면을 출력한다.
    2. 웹 브라우저에 2개의 값을 입력하고 버튼을 클릭하면 http://localhost:8080/mvcexam/plus URL로 2개의 입력값이 POST방식으로 서버에게 전달한다. 서버는 2개의 값을 더한 후, 그 결과 값을 JSP에게 request scope으로 전달하여 출력한다.

     

    Spring MVC가 지원하는 Controller메소드 인수 타입

    • javax.servlet.ServletRequest
    • javax.servlet.http.HttpServletRequest
    • org.springframework.web.multipart.MultipartRequest
    • org.springframework.web.multipart.MultipartHttpServletRequest
    • javax.servlet.ServletResponse
    • javax.servlet.http.HttpServletResponse
    • javax.servlet.http.HttpSession
    • org.springframework.web.context.request.WebRequest
    • org.springframework.web.context.request.NativeWebRequest
    • java.util.Locale
    • java.io.InputStream
    • java.io.Reader
    • java.io.OutputStream
    • java.io.Writer
    • javax.security.Principal
    • java.util.Map
    • org.springframework.ui.Model
    • org.springframework.ui.ModelMap
    • org.springframework.web.multipart.MultipartFile
    • javax.servlet.http.Part
    • org.springframework.web.servlet.mvc.support.RedirectAttributes
    • org.springframework.validation.Errors
    • org.springframework.validation.BindingResult
    • org.springframework.web.bind.support.SessionStatus
    • org.springframework.web.util.UriComponentsBuilder
    • org.springframework.http.HttpEntity<?>
    • Command 또는 Form 객체

     

    Spring MVC가 지원하는 메소드 인수 애노테이션

    • @RequestParam
    • @RequestHeader
    • @RequestBody
    • @RequestPart
    • @ModelAttribute
    • @PathVariable
    • @CookieValue

     

    @RequestParam

    • Mapping된 메소드의 Argument에 붙일 수 있는 어노테이션
    • @RequestParam의 name에는 http parameter의 name과 멥핑
    • @RequestParam의 required는 필수인지 아닌지 판단

     

    @PathVariable

    • @RequestMapping의 path에 변수명을 입력받기 위한 place holder가 필요함
    • place holder의 이름과 PathVariable의 name 값과 같으면 mapping 됨
    • required 속성은 default true 임

     

    @RequestHeader

    • 요청 정보의 헤더 정보를 읽어들 일 때 사용
    • @RequestHeader(name="헤더명") String 변수명

     

    Spring MVC가 지원하는 메소드 리턴 값

    • org.springframework.web.servlet.ModelAndView
    • org.springframework.ui.Model
    • java.util.Map
    • org.springframework.ui.ModelMap
    • org.springframework.web.servlet.View
    • java.lang.String
    • java.lang.Void
    • org.springframework.http.HttpEntity<?>
    • org.springframework.http.ResponseEntity<?>
    • 기타 리턴 타입

    실습 코드

     

    plusForm.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 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>
    <form method="post" action="plus">  
    value1 : <input type="text" name="value1"><br>
    value2 : <input type="text" name="value2"><br>
    <input type="submit" value="확인">  
    </form>  
    </body>
    </html>

    plusResult.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 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>
    ${value1} 더하기 ${value2} (은/는) ${result} 입니다.
    </body>
    </html>

    PlusController.java

    package kr.or.connect.mvcexam.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @Controller
    public class PlusController {
    	@GetMapping(path = "/plusform")
    	public String plusform() {
    		return "plusForm";
    	}
    
    	@PostMapping(path = "/plus")
    	public String plus(@RequestParam(name = "value1", required = true) int value1,
    			@RequestParam(name = "value2", required = true) int value2, ModelMap modelMap) {
    		int result = value1 + value2;
    
    		modelMap.addAttribute("value1", value1);
    		modelMap.addAttribute("value2", value2);
    		modelMap.addAttribute("result", result);
    		return "plusResult";
    	}
    }

    ModelMap modelMap 

    Spring이 알아서 request scope에 mapping 해준다.

     

    return "plusResult"

    veiw name이 된다. -> veiw resolver 를 통해서  plusResult.jsp라는 veiw를 찾아낸다.

     

    plusResult.jsp라는 veiw는 request scope에서 해당 값들을 꺼내서 화면에 출력을 해준다.

     


    El이 동작하지 않을 경우 

    servlet 버전 2.5 이전에서는 El이 필수가 아니였다.

    web.xml 수정이 필요

    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
     

    에서

    <?xml version="1.0" encoding="UTF-8"?>

    변경하고 

     

    severs 텝에 프로젝트명 삭제 

    다시 run server실행


    Spring MVC를 이용한 웹 페이지 작성 실습(3) 에서 계속 

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading