본문 바로가기

Language/Java

[JAVA/JSP] getAttribute()와 getParameter()의 차이점

반응형

안녕하세요! Plitche(플리체)입니다.
이번 포스팅의 주제는 [JAVA/JSP] getAttribute()와 getParameter()의 차이점입니다.

intro

jsp에서 데이터를 보내서 컨트롤러로 받는 방법은 여러가지가 있다.

  • 대표적으로 HttpServletRequest 클래스를 통하여 name을 꺼내는 방법
  • DTO(Data Transfer Object)로 데이터를 오브젝트로 받는 방법
  • VO(Value Object)로 이름에서 유추가 가능하듯이 값 오브젝트로 받는 방법
  • 어노테이션을 활용한 @RequestParam으로 값 받아오는 방법
  • 어노테이션을 활용한 @Pathvariable로 url 경로의 변수를 가져오는 방법

 

등 위의 여러방법 중 오늘은 HttpServletRequest을 통해 값을 가져오는 방법을 알아보려 한다.

 

Servlet

  • WAS가 웹브라우져(view)로부터 Servlet요청을 받으면
  • 요청을 받을 때 전달 받은 정보를 HttpServletRequest객체를 생성하여 저장
  • 웹브라우져에게 응답을 돌려줄 HttpServletResponse객체를 생성(빈 객체)
  • 생성된 HttpServletRequest(정보가 저장된)와 HttpServletResponse(비어 있는)를 Servlet에게 전달

 

HttpServletRequest

  1. Http프로토콜의 request 정보를 서블릿에게 전달하기 위한 목적으로 사용
  2. Header정보, Parameter, Cookie, URI, URL 등의 정보를 읽어들이는 메소드를 가진 클래스
  3. Body의 Stream을 읽어들이는 메소드를 가지고 있음

위의 설명이 다소 어려울 수 있으나, 그냥 jsp(view단)로 부터 Controller로 데이터를 보냈을 때, HttpServletRequest 객체안에 데이터들이 들어가게 된다는 것이다.

 

이 객체의 메소드를 통해 값을 반환받아 back단에서 처리하는 것이다.

 

메소드는 대표적으로 getAttribute()getParameter()가 있다.

 

차이점

  • 먼저 가장 큰 차이점은 두 메소드의 리턴 타입이다.
  • getAttribute()Object타입을 리턴하고, getParameter()String타입을 리턴한다.

쉬운 설명을 위해서 아래와 같은 간단한 회원가입페이지를 작성하였다.

jsp

<form action="signUp.do">
    <input type="text" name="id" placeholder="아이디"/><br/>
    <input type="text" name="password" placeholder="비밀번호"/><br/>
    <input type="text" name="name" placeholder="이름"/><br/>
    <input type="text" name="email" placeholder="이메일"/><br/>
    <button>Sign Up</button>
</form>

Controller

1. getParameter()

(컨트롤러는 바로 확인 할수 있도록 추가처리를 하지않고, 바로 출력하여 결과를 확인하였다.)

  • String타입을 리턴한다.
  • 클라이언트의 HTML 페이지로부터 전송받은 request영역의 값을 읽어온다.
@RequestMapping(value = "signUp.do", method = RequestMethod.GET)
public String home(HttpServletRequest request) {
    String id = request.getParameter("id");
    String password = request.getParameter("password");
    String name = request.getParameter("name");
    String email = request.getParameter("email");

    System.out.println("아이디 : " + id);
    System.out.println("비밀번호 : " + password);
    System.out.println("이름 : " + name);
    System.out.println("이메일 : " + email);

    return "loginPage";
}

당연하지만 입력 태그에 값을 작성하여서 버튼을 누르면 console창에 아래 사진과 같은 결과를 볼수 있을 것이다.

Parameter값을 제대로 가져온다.

입력 태그 속성 name으로 HttpServletRequest클래스의 getParameter()메소드를 이용하여 값을 얻어내는 것이다.

 

2. getAttribute()

  • Object 타입을 리턴한다.
  • setAttribute()속성을 통한 설정이 없으면 무조건 null값을 리턴한다.
@RequestMapping(value = "signUp.do", method = RequestMethod.GET)
public String home(HttpServletRequest request) {
    String id = (String) request.getAttribute("id");
    String password = (String) request.getAttribute("password");
    String name = (String) request.getAttribute("name");
    String email = (String) request.getAttribute("email");

    System.out.println("아이디 : " + id);
    System.out.println("비밀번호 : " + password);
    System.out.println("이름 : " + name);
    System.out.println("이메일 : " + email);

    return "loginPage";
}

(Object타입을 리턴하기 떄문에 원하는 타입으로 캐스팅해줘야 한다.)


메소드만 다르고 똑같이 입력하였지만 아래 사진과 같이 모두 null값을 리턴하는 것을 볼 수 있다.

parameter를 가져오지 못한다

원하는 값을 얻어내기 위해서는 request.setAttribute("name", "plitche"); 처럼 설정해줘야 하는데, 사실 그럼 굳이 쓸 이유가 없다.

 

  • getAttribute()는 이전에 다른 JSP 또는 Servlet 페이지에 설정된 매개 변수를 가져 오는데 사용된다.
  • getAttribute()는 request.setAttribute()를 사용하여 정보를 추가하고, 현재 요청을 다른 자원으로 전달/redirection 할 수 있다.

review

  • 아직 저도 getAttribute()의 필수적인 용도나 자세한 사용법에 대해서는 잘 알지 못하지만, 위의 내용으로 현재는 이해하고 있습니다.
  • 추가적인 예시나 보다 더 이해하기 쉬운 예제가 있다면, 바로 추가 포스팅하여 공유하겠습니다!^^
    오늘도 감사합니다.
반응형