웹 페이지 상태유지 기법


하나의 JSP 페이지에서 정의한 변수는 링크를 통해 페이지가 이동된 후에는 유실된다.


페이지가 이동되는 과정에서 변수의 값을 그대로 다음 페이지에서 인식할 수 있도록


처리하는 기법을 상태유지 기법이라고 한다.


주요 상태유지 기법


* get


* post


* cookie


* session


HTTP GET 방식의 데이터 전송


데이터를 URL에 포함하여 링크를 통해 값을 전달하는 방식


- URL의 총 길이가 1024bytes로 제한되기 때문에 전송할 수 있는 데이터에 한계가 있다.


- 모든 데이터가 URL에 그대로 노출되기 때문에 보안이 필요한 경우 적용하지 않는 것이 좋다.


- 한글이나 공백은 URLEncoding 처리를 해야만 전송할 수 있다.



데이터 전송 방법


URL 뒤에 ?를 명시하고 "이름=값&이름=값"의 형태로 설정한다.


1
2
3
4
5
6
7
<%
    String name = "개발자";
    int w = 72;
    int h = 175;
%>
 
<a href="hello.jsp?name=<%=URLEncoder.encode(name)%>&width=<%=W%>&height=<%=h%>">click</a>



데이터 수신 방법


데이터가 전송된 페이지에서는 request 내장객체에 이전 페이지로부터 전송된 변수가 저장된다.


URL에 명시한 변수이름을 getParameter() 메서드에 전달하여 값을 리턴받는다.



1
2
3
4
5
6
7
8
9
<%
    // 모든 페이지에서 파라미터 수신 전 1회 수행해야 함.
    request.setCharacterEncoding("UTF-8");
 
    // 전달한 값의 형식에 상관없이 모두 String으로 리턴된다.
    String name = request.getParameter("name");
    String w = request.getParameter("weight");
    String h = request.getParameter("height");
%>



HTTP POST 방식의 데이터 전송


HTML의 <form> 태그 내에 포함되어 있는 <input> 태그에 입력한 내용을 전송하기 위한 방법


- 전송할 수 있는 데이터에 한계가 없다


- 전송하는 내용이 URL에 노출되지 않기 때문에 GET방식에 비해서 상대적으로 보안에 유리하다. (매우 안전하다는 의미는 아님)


- 한글이나 공백에 대한 URLEncoding 처리가 필요 없다.


데이터 전송 방법


1. <form> 태그의 method 속성에 post라고 명시


2. action 속성에 데이터를 수신할 jsp 페이지의 URL(경로)를 지정


3. 이 <form> 내의 submit 버튼이 눌러졌을 때

모든 input 요소에 대한 입력값(value속성의 값)이 전송된다.

1
2
3
4
5
    <form method="post" action="post.jsp">
        <input type="text" name="hello" />
        <input type="text" name="world" />
        <button type="submit">click</button>
    </form>



데이터 수신 방법

- 데이터가 전송된 페이지에서는 get방식과 동일하게 처리한다.


- <input> 태그에 명시한 name 속성의 값을 request.getParameter()에 파라미터로 전달하여 입력값을 리턴받는다.


1
2
3
4
5
6
7
8
<%
    // 모든 페이지에서 파라미터 수신 전 1회 수행해야 함.
    request.setCharacterEncoding("UTF-8");
 
    // <input> 태그의 name 속성값을 사용하여 사용자의 입력값을 신
    String name = request.getParameter("hello");
    String w = request.getParameter("world");
%>




GET/POST 파라미터 수신시 주의사항


1. 전송된 값이 null일 수 있다.


2. null이 아니더라도 빈 문자열("")일 수 있다.



위의 두 가지 상황에 대한 예외처리를 if문으로 먼저 처리한 후 필요한 로직을 구현한다.


ex) 원하는 형태의 값이 전달되지 않은 경우 임의의 기본값으로 처리하기


1
2
3
4
5
6
7
<%
    String hello = request.getParameter("hello");
 
    if (hello == null || hello.equals("")) {
        hello == "안녕하세요";
    }
%>




페이지 상태 유지

페이지가 연속적으로 이동할 때 이전 페이지의 변수를 유지해야 할 경우 사용할 수 있는 기법


GET방식의 경우


이전 페이지에서 전달된 파라미터를 URL에 누적시켜 전달한다.


1
2
3
4
5
6
<%
    String w = request.getParameter("w");
    String h = request.getParameter("h");
%>
 
<a href="hello.jsp?w=<%=w%>&h=<%=h%>&name=helloworld">click</a>




POST방식의 경우


이전 페이지에서 전달된 파라미터를 hidden field에 포함시켜 submit 처리한다.


1
2
3
4
5
6
7
8
9
<%
    String w = request.getParameter("w");
    String h = request.getParameter("h");
%>
 
<form method="post" action="foo.jsp">
    <input type="hidden" name="w" value="<%=w%>" />
    <input type="hidden" name="h" value="<%=h%>" />
</form>




WebHelper에 적용된 기능


메서드명 

설명 

 String getString(String field, String defaultValue)


 field를 이름으로 하는 HTTP GET, POST 파라미터를 수신하고 값이 없


을 경우 defaultValue를 대신 리턴한다. 


 int getInt(String field, int defaultValue)


 field를 이름으로 하는 HTTP GET, POST 파라미터를 수신하여 정수 형


태로 변환한 결과를 리턴하고, 값이 없을 경우 defaultValue를 대신 리


턴한다.




+ Recent posts