JSP & Servlet

[JSP] getParameter() / getAttribute() / setAttribute()

55yudi 2021. 8. 12. 01:00

getParameter()  vs.  getAttribute()

두 메소드는 HttpServeltRequest 클래스 내에 있음.

 

1. getParameter()

1) java.lang.String getParameter(java.lang.String name) --> String 타입으로 반환

2) 클라이언트의 HTML페이지에서 필요한 정보를 얻는 데 사용함

 

2. getAttribute()

* attribute : Servlet간 공유하는 객체

1) java.lang.Object getAttribute(java.lang.String name) --> Object 타입으로 반환

2) 이전에 다른 JSP 또는 Servelet 페이지에 설정된 매개 변수를 가져오는 데 사용함

  - 이전의 setAttribute() 속성을 통한 설정이 있어야 한다.

  - 그렇지 않다면 null값을 가져온다.

3) Controller Servlet 등에서 View로 전달할 때 사용함

 

 

3. 실습

1) String의 값을 전달 후 getParameter()는 값을 얻어오는데 성공하지만,

getAttribute()는 setAttribute()를 통한 설정이 없기 때문에 null값을 출력한다.

 

<get-test.jsp>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>

<body>
<form action="get-solution.jsp">
	입력값 : <input type="text" name="inputValue" required="required">
    <input type="submit" value="제출">
</form>
</body>
</html>

나타나는 결과창

 

<get-solution.jsp>

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>

<body>
getParameter() 입력 값 : <%=request.getParameter("inputValue") %><br><br>
getAttribute() 입력 값 : <%=request.getAttribute("inputValue") %>
</body>
</html>

나타나는 결과창

 

2) 수정한 get-solution.jsp에 setAttribute()를 추가하여 값을 설정한다.

   (원래 setAttribute 는 Servlet 페이지에서 작성해야 한다.)

   

    setAttribute()를 추가하여 값을 줬기 때문에 getAttribute()는 null값을 출력하지 않는다.

 

수정된 <get-solution.jsp>

<%@ page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>

<body>
<%
	String value = request.getParameter("inputValue");
    request.setAttribute("VALUE", value);
%>

getAttribute() 입력 값 : <%=request.getAttribute("VALUE") %>
</body>
</html>

나타나는 출력창


setAttribute()  /  getAttribute()

1. setAttribute()

- 리턴타입 : void

2. getAttribute()

- 리턴타입 : Object

 

3. Attribute의 속성 값

- 속성의 이름은 문자열을 나타내는 String타입이지만

  값은 기본 데이터 타입을 제외한 나머지 모든 클래스 타입이 올수 있다.

- setAttribute() 메소드의 value 파라미터 타입이 Object이고 getAttribute() 메소드의 리턴타입도 Object이다.

  이것은 모든 클래스 타입을 속성의 값으로 사용가능함을 의미한다.

  다양한 타입의 객체를 속성값으로 저장할 수 있다.

public void setAttribute(String name, Object value);
public Object getAttribute(String name);

- 다음 코드에서는 각각 차례대로 Date, String, File 타입의 객체를 속성의 값으로 사용하고 있는데 이렇게 다양한 타입의 값을 속성 값으로 지정할 수 있다. getAttribute() 메소드를 사용해서 속성의 값을 읽어올 때에는 속성값을 지정할 때 사용한 타입으로 알맞게 형변환을 해주어야 한다.

session.setAttribute("session_start",new java.util.Date());
session.setAttribute("memberid","madvirus");
application.setAttribute("application_temp",new File("c:\\temp"));

//형변환
Date date = (Date)session.getAttribute("session_start");
String memberID = (String)session.getAttribute("memberid");
File tempDir = (File)application.getAttribute("application_temp");

- 기본데이터 타입의 경우는 직접 사용할 수 없고 래퍼 타입을 대신 사용해야 한다.

  예를 들어 int타입의 값 속성에 넣고 싶다면 int타입의 래퍼 타입인 Integer를 사용해주어야 한다.

//int의 래퍼 타입인 Integer를 이용해서 값을 설정
request.setAttribute("age", new Integer(20));
Integer ageAttr = (Integer)request.getAttribute("age");
int ageValue=ageAttr.intValue();

- 자바 5버전부터 기본 데이터 타입과 래퍼 타입 간의 변환을 자동으로 처리해주는 오토박싱/오토 언방식 기능이 추가되었기 때문에, setAttribute() 메소드에 기본 데이터 타입의 값을 전달하거나 getAttribute()에서 래퍼 타입으로 읽어온 값을 기본 데이터 타입에 할당 할수 있다.

//int 값 20이 자동으로 Integer로 변환되어 속성 값으로 저장
request.setAttribute("age",20);
//Integer 타입의 값이 자동으로 int타입으로 변환됨
int age= (Integer)request.getAttribute("age");

* 각 기본 데이터 타입에 대한 래퍼타입

   * int - java.lang.Integer

   * long - java.lang.Long

   * short - java.lang.Short

   * byte - java.lang.Byte

   * float - java.lang.Float

   * double - java.lang.Double

   * boolean - java.lang.Boolean

 

- 오토박싱/언박싱 기능을 사용하지 않고 래퍼 타입에서 직접 값을 가져올 경우에는

  래퍼 클래스가 제공하는 메소드를 사용해서 기본 데이터 타입에 해당하는 값을 가져 올 수 있다.

  Integer, Long, Double과 같이 숫자와 관련된 래퍼클래스들은 메소드를 사용해서

  래퍼 클래스가 저장한 값을 알맞은 기본 데이터 타입의 값으로 읽어올 수 있다.

 

* 숫자 관련 래퍼클래스 제공하는 기본 데이터 타입 읽기 메소드

 메소드 리턴타입  설명 
 intValue()  int  래퍼클래스가 저장한 값을 int타입으로 구함
 longValue()  long  래퍼클래스가 저장한 값을 long타입으로 구함
 floatValue()  float  래퍼클래스가 저장한 값을 float타입으로 구함
 doubleValue()  double  래퍼클래스가 저장한 값을 double타입으로 구함
 shortValue()  short  래퍼클래스가 저장한 값을 short타입으로 구함
 byteValue()  byte  래퍼클래스가 저장한 값을 byte타입으로 구함

 

- Boolean래퍼클래스는 boolean데이터 타입으로 값을 리턴하는 메소드를 제공한다.

  * public boolean booleanValue()

  이 메소드를 사용하면 Boolean 객체에 저장된 값을 boolean으로 읽어올 수 있다.

 

4. 속성의 활용 방법

- 속성은 기본 객체에 따라서 쓰임새가 다르다.

 기본객체 영역  쓰임새 
 pageContext  PAGE  (한번의 요청을 처리하는) 하나의 JSP페이지 내에서 공유될 값을 저장
 주로 커스텀 태그에서 새로운 변수를 추가할때 사용
 request  REQUEST  한번의 요청을 처리하는데 사용되는 모든 JSP페이지에서 공유될 값을 저장
 주로 하나의 요청을 처리하는데 사용되는 JSP페이지 사이에서 정보를 전달하기 위해 사용
 session  SESSION  한 사용자와 관련된 정보를 JSP들이 공유하기 위해서 사용
 사용자의 로그인 정보와 같은 것들을 저장
 application  APPLICATION  모든 사용자와 관련해서 공유할 정보를 저장
 임시 디렉터리 경로와 같은 웹 어플리케이션의 설정 정보를 주로 저장

- 속성을 저장하기 위해 가장 많이 사용 되는 기본객체는 request기본 객체와 session기본 객체이다.

  request 기본 객체의 속성을 사용하는 방법은 오늘날 널리 사용되고 있는 MVC(Model-View-Controller)패턴에 기반해서 웹 어플리케이션을 구축할때 많이 사용되며, session기본객체의 속성을 사용하는 방법은 로그인, 로그아웃과 같이 사용자의 인증 정보를 저장할때 많이 사용된다.