[JSP] getParameter() / getAttribute() / setAttribute()
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기본객체의 속성을 사용하는 방법은 로그인, 로그아웃과 같이 사용자의 인증 정보를 저장할때 많이 사용된다.