티스토리 뷰

반응형

* 페이지 이동

 

웹 브라우저는 get 방식과 post 방식의 두가지 방식 중 한가지를 이용해서 파라미터를 전송한다. 입력 요소의 이름은 웹 브라우저가 서버에 전송하는 요청 파라미터의 이름으로 사용된다. <input> 에 값을 입력한뒤 웹 서버에 전송하면 웹 브라우저는 파라미터 이름 형식으로 파라미터 목록을 웹 서버에 전송한다.

 

파라미터를 전송하면 그 파라미터를 받아줄 request 와 response 객체 등이 필요한데, 전송 방식에 따라서 객체를 사용하는 법과 파라미터를 받는 법이 다르다.

 

 

 

 

 

 

* sendRedireect 방식

response 기본 객체에서 많이 사용되는 기능 중 하나는 리다이렉트 기능이다. 리다이렉트는 웹 서버가 웹 브라우저에게 다른 페이지로 이동하라고 응답하는 기능이다. 예를 들어, 사용자가 로그인에 성공한 후 메인 페이지로 자동으로 이동하는 사이트가 많은데 이렇게 특정 페이지를 실행한 후 지정한 페이지로 이동하길 원할 때 리다이렉트 기능을 사용한다.

 

 

즉, 리다이렉트는 웹 서버 측에서 웹 브라우저에게 어떤 페이지로 이동하라고 지정하는 것이다. 리다이렉트는 아래 모양으로 사용할 수있다.

 

 

1
response.sendRedirect("이동할 jsp 페이지");
cs

 

 

웹 서버에 전송할 파라미터 값은 알맞게 인코딩해서 보내줘야하는데, 리다이렉트를 사용할때도 인코딩이 필수이다. 인코딩할 때 사용할 캐릭터 셋은 UTF-8 이다.

 

인코딩 문자열을 개발자가 직접 변형하기 어렵기 때문에 URLEncoder.endode() 메소드를 사용해서 파라미터 값으로 사용될 문자열을 UTF-8로 인코딩 해줘야한다.

 

 

 

 

 

 

 

 

* Post 방식

Post 방식은 주로 form 태그를 이용하여 전송을 한다. Post 방식은 전송할때 값을 인코딩 하지 않고 보내기 때문에 받는 쪽에서 인코딩을 해서 값을 받아야한다. 

 

 

인코딩한 데이터 값을 스코프 공간에 저장하여 받는 쪽에서 스코프 공간에서 데이터를 가져온다. 데이터를 직접 가져오는게 아니라 한번 은닉 처리를 했기 때문에 보안에 뛰어난 페이지 이동 방식이다.

 

 

아래 코드를 보고 post 를 이해해 보자.

 

 

* page_control.jsp

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>page_control 페이지</title>
</head>
<body>
 
    <!--  post  -->
    <form method="post" action="response_sendPost.jsp">
        response.sendRePost 이름 : <input type=text name="name3">
        <input type=submit value="확인">
    </form>
</body>
</html>
cs

 

 

 

* response_sendPost.jsp

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>response_sendPost 페이지</title>
</head>
<body>
 
Post 부분 입니다.
 
<% request.setCharacterEncoding("UTF-8"); %>
 
<%
String user = (String)request.getParameter("name3");
request.getSession().setAttribute("userName", user);
response.sendRedirect("page_control_end.jsp");
%>
 
</body>
</html>
cs

 

 

* page_control_end.jsp

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>page_control_end 페이지</title>
</head>
<body>
 
    <h1>forward action 및 sendRedirect()</h1>
    <hr>
    지금 보이는 화면은 page_control_end.jsp 에서 출력한 결과입니다.
    <hr>
 
    이름:<%=request.getParameter("name")%>
    전화번호:<%=request.getParameter("tel")%>
 
</body>
</html>
cs

 

 

 

 

 

 

 

* Get 방식

Get 방식은 요청 URL에 파라미터를 붙여서 전송한다. 위 form 태그에서 method 방식을 post에서 get 방식으로 변경한뒤 데이터를 전송해보자.

 

Get 방식은 URL의 경로 뒤에 물음표(?)와 함께 파라미터를 붙여 전송하는데, 이를 쿼리 문자열이라고 한다. 쿼리 문자열의 형식은 다음과 같다.

 

이름1=값&이름2=값2&.%이름n=값n

 

각각의 파라미터는 앰퍼샌드(&) 기호로 구분하며, 파라미터의 이름과 값은 등호기호(=)로 구분한다. 웹 브라우저에서 검색을 했을때 URL에 이상한 문자가 뜬다면 검색 정보값을 RFC 2396 규약에 정의된 규칙에 따라 인코딩해서 전송하기 때문에 내 검색 정보가 문자로 변환되어 있다고 생각하자.

 

 

get 방식은 페이지를 이동할때 들고갈 데이터들을 전부 가지고 이동하기 때문에 은닉 처리가 되지 않아 Post 방식보다 보안에 약하다.

 

 

아래를 코드를 보고 get 방식을 이해해보자.

 

 

 

* page_control.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>page_control 페이지</title>
</head>
<body>
    <!-- get  -->
    <form method="get" action="response_sendRedirect.jsp">
        response.sendRedirect 이름 : <input type=text name="name2">
        <input type=submit value="확인">
    </form>
    
</body>
</html>
cs

 

 

* response_sendRedirect.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>response_sendRedirect 페이지</title>
</head>
<body>
 
<!-- get을 보내는 방법은 보내는 데이터를 UTF-8로 인코딩해서 보낼 필요가 있음 -->
<!-- 보내는 파일의 name을 n 객체에 넣고 다시 n을 인코딩해서 한글깨짐을 방지한다 -->
 
Get 부분 입니다.
 
<% String n = request.getParameter("name2"); %>
<% String encodeName = URLEncoder.encode(n,"UTF-8"); %>
 
<% response.sendRedirect("page_control_end.jsp?name="+encodeName); %> 
<!-- page_control_end.jsp?name=enc&tel=tel -->
 
 
</body>
</html>
cs

 

 

 

* page_conrtol_end.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>page_control_end 페이지</title>
</head>
<body>
 
    <h1>forward action 및 sendRedirect()</h1>
    <hr>
    지금 보이는 화면은 page_control_end.jsp 에서 출력한 결과입니다.
    <hr>
 
    이름:<%=request.getParameter("name")%>
    전화번호:<%=request.getParameter("tel")%>
 
</body>
</html>
cs

 

 

 

반응형
댓글
공지사항