[Spring] Controller, web parameter, RequestParam, HttpServletRequest

*Controller

 - 웹에 요청처리, 파라메터 처리, 관계유지객체사용,  scope객체 사용, view페이지명 설정,

   service 클래스를 사용.

 -웹의 요청 하나를 method하나로 처리한다.

작성법)

 1. 클래스의 위에 @Controller annotation 선언.( HandlerMappercomponent-scan 수행 )

  @Controller

   public class TestController{

  2. method위에 요청URL을 처리할 수 있도록 annotation선언

    @RequestMapping, @GetMapping, @PostMapping

     @RequestMapping( value=“/요청URL”, method=요청방식 ) 

     public String method( 매개변수,,,, ){

  return “응답할JSP”;

      }

*POJO( Plain Old Java Object)지원

  -특정외부기술을 포함하지 않고, 순수하게 자바의 데이터 형이나 기능만으로 제작되는 클래스.

  - 실행과 테스트의 용이성 향상

      (별도의 Container가 존재하지 않아도, 실행 및 테스트를 손쉽게 할 수 있다.)

      

*상위 경로 설정

 -상위경로가 설정된 Controller는 의  XxxMapping 들의 상위경로 붙여져서 하위경로가 사용된다.

 

 

*Web  요청

-GET방식

  직접요청, <a>, <form method=“get”>, location

 

   =>Controller 에서는

     @GetMapping(“/요청URI”)

     @RequestMapping( value=“/요청URI”, method= RequestMethod.GET );

-
-POST

  <form method=“post”>

    =>Controller 에서는

     @PostMapping(“/요청URI”)

     @RequestMapping( value=“/요청URI”, method= RequestMethod.POST );

-GET방식, POST방식 모두 호출

  method 속성에 값을 배열로 처리

@RequestMapping( value=“/요청URI”,method={RequestMethod.GET,RequestMethod.POST});

 

*Controller 에서 web parameter 받기

 - boot에서는 한글 처리를 하지 않아도 된다.

 - spring legacy에서는 DD<filter>, <filter-mapping>으로 CharacterEncodingFilter

    등록하여 한글을 처리.

 - HttpServletRequest, 단일형, DTOparameter를 처리 할 수 있다.

- 단일형 ( int, String,, ) : HTML Form Control명과  methodparameter명을 일치.

 

 <input type=“text”  name=“name”/>

 <input type=“text”  name=“age”/>

  public class TestController{

   @GetMapping(“/URI”)

    public String param( String name, int age ){

    }

-DTO : HTML Form Control명과  class instance 변수명을 일치

<input type=“text”  name=“name”/>

 <input type=“text”  name=“age”/>

 public class TestController{

   @GetMapping(“/URI”)

    public String param( DataDTO dd ){

    }

 

*ModelAndView사용

 -데이터와 view페이지를 모두 가지고 있는 클래스.

 - org.springframework.web.servlet.ModelAndView 클래스를 사용

 - 객체화를 개발자가 해야한다. (생명주기 관리를 개발자가 한다. )

 - @ExceptionHandler를 사용하여 예외처리할 때 주로 사용.

사용법)

 1. Controler method에서 반환형을 ModelAndView 설정

 

   public ModelAndView method( 매개변수,,,, ){

   2.생성

     ModelAndView mav=new ModelAndView();

    3.view명을 설정

    mav.setViewName(“뷰명”);

   4.데이터 설정

    mav.addObject(“이름”,  );

   5. mav를 반환

    return mav;

 *HttpServletRequest사용.

   - web parameter 이외에 접속자의 정보를 함께 사용해야 하는 경우.

   - 순수 자바 기술로만 만들어지는 POJO와는 다르게 외부 클래스가 사용되므로 WAS

    의존성 있다.( Test가 불편 )

  @GetMapping(“/URI”)

    public String method( HttpServletRequest reqeust ){

       reqeust.getParameter(“이름”);

       reqeust.getParameterValues(“이름”);

       request가 제공하는 접속자의 정보를 얻을 수 있다.

    }

 

사용법)

 1. Controller method에서 HttpServletRequest를 매개변수로 설정

 

   public String method(HttpServletRequest  request ){

   2.값 할당

    request.setAttribute(“이름”,)

   3. view명을 반환

    return “view”;

 

*redirect이동

*@RequestParam

 - Controllere method 매개변수 앞에 선언하는 annotation.

 - defaultValue처리와 HTML Form Controlparameter가 이름이 달랐을 때 사용.

 - 단일형에만 사용할 수 있다. DTO에서는 사용할 수 없다.

사용법)

 @RequestParam(value=“Form Control”,defaultValue=“empty였을때 설정된 기본값”,

    required=true|false)

@GetMapping(“…”)

Public String method( @RequestParam(value=“”,defaultValue=“”)데이터형 변수명 ,

@RequestParam(value=“”,defaultValue=“”)데이터형 변수명 );

)

  <input type=“text” name=“age”>

  public String method(@RequestParam(value=“age”,default=“0”) int myAge){

사용법)

 1.Model interface를 요청처리 methodparameter로 선언

  

  @GetMapping(“”)

  public String useModel( Model model ){

   2. Model interface에 값 설정

     model.addAttribute(“이름”, );

   }

 

*view로 데이터를 전달

 - HttpServletRequest, Model interface, ModelAndView class 사용하면 업무처리한 결과를

    view에 전달할 수 있다.

 

 *Model ineterface사용.

  -view 와 데이터를 구분하여 처리할 수 있다.

  - org.springframework.ui 패키지에서 제공.

  - model.addAttribute(“이름”,  ); => request scope객체에 값 설정되므로 JSP에서는

     ${ requestScope.이름 }으로 값을 얻을 수 있다.

  -@SessionAttributes 클래스위에 선언하면session scope reqeust scope 객체에 값이

      동시에 할당된다.