일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |
- 광야에서
- 서호주
- 여행
- 안치환
- 전라도여행
- 서호주여행
- 웹프로그래밍
- The Frames
- wp7
- 윈폰7
- Perth
- 안치환공연
- ASP.NET
- 백스트리트보이스
- 안치환콘서트
- 닷넷공부법
- U2
- 게시판페이징
- 닷넷DB연동
- live8
- 닷넷게시판만들기
- 김광석
- swell season
- asp
- BSB
- 가족영화
- 퍼스
- 닷넷게시판리스트
- 영화
- 유용주
- Today
- Total
새로운 시작, GuyV's lIfe sTyle.
닷넷 게시판 만들기 Part 12 - 서버에서 받기 본문
2011/01/19 - [ⓟrogramming/asp.net 게시판] - 닷넷 게시판 만들기 Part 10
2011/01/20 - [ⓟrogramming/asp.net 게시판] - 닷넷 게시판 만들기 Part 11
2. 닷넷 알아보기 [7/7]
3. asp.net 컨트롤 [3/..]
이전 시간에 이어서 계속해보자.
이번 시간은 게시판 글쓰기라는 board_write.html 웹 페이지에 든 <form></form>의 핵심 부분을 알아보았다. 비록 한줄 텍스트쓰기, 여러줄 텍스트 쓰기처럼 한두개의 입력 폼을 해보았지만, 이들의 값을 넘기려면 <form action="" method="">에 어떤 방법으로 어디로 넘길건지 지정해야 하고, 각각의 태그에는 name 속성의 값을 주어야 된다는 것을 알아보았다.
이번에는 값을 넘겼으니, 받아보도록 하자.
일단, 어디에서 값을 받을 것인가 정해보자. 게시판의 글 쓰기는 내용이 길어질 수 있다. 그러므로 값은 POST로 넘기는 것이 현명하다. GET으로 넘기는 방식은 주소창에 값이 붙여 넘어가므로, 비밀번호가 "열어본 웹페이지"에 남을 수도, 사용자 등 뒤의 다른 사람의 눈에 노출될 수도 있다. 받아주는 파일명은 board_write_done.aspx 로 정하기로 한다.
잠시 asp.net 에서 우리도 모르게 가장 많이 사용하는 클래스 2개를 알아보고 넘어가자.
Request는 "읽어오기"라고 생각하면 쉽고, Response는 "출력하기"라고 생각하면 쉽겠다.
System 네임스페이스를 모든 닷넷 기반에서 기본으로 참조하듯이, asp.net 에서도 기본으로 참조하는 System.Web 네임스페이스가 있다. aspx파일에서는 기본적으로 System.Web과 System.Web.UI 의 네임스페이스를 모두 참조하고 있다.
또한 System.Web.UI 네임스페이스의 Page클래스가 있는데, 이 클래스가 aspx파일을 모두 관장한다고 보면 되겠다. 또한 이 클래스 덕분에, 다음에 소개하는 클래스를 쉽게 사용할 수 있게 된다.
1. System.Web.HttpRequest (Request)
http://msdn.microsoft.com/ko-kr/library/system.web.httprequest_members(v=VS.80).aspx (우리는 이제 MSDN 읽는 법을 알지 않는가? ^_^)
앞에서 말한것 처럼, 각종 정보들을 읽어오는 기능을 한다. 예를 들어, 웹서버에 접속한 사람의 고유 IP주소, GET/POST로 넘어온 값, 한번쯤은 들어보셨을 쿠키(Cookie) 등 웹서버에 관련한 대부분을 포함한다.
aspx 파일에서는 간단하게 Request.메서드(), Request.프로퍼티 형태로 사용가능하다.
2. System.Web.HttpResponse (Response)
http://msdn.microsoft.com/ko-kr/library/system.web.httpresponse_members(v=VS.80).aspx
Response는 출력(응답)관련 클래스라고 했다. Request 와 사용법이 동일하다고 보면된다. 예전 첫 실습때 Response.Write() 메서드를 기억하는가? Request는 쿠키를 읽어오는 반면에, Response는 쿠키를 쓰는 기능을 하며, Response.Write() 처럼 화면에 그대로 뿌려주는 기능도 한다. 그리고 일반적으로 웹 프로그래밍은 죽었다 깨어나도 HTML이라고 했었는데, 이것을 다른 형식으로 변경하여 뿌려주는 기능도 가지고 있다. (.aspx 파일을 열었지만, 이미지파일이 나온다고 보면 되겠다. 이 기능은 주로 파일 다운로드 때 실제 물리주소를 숨기기 위한 기능으로 많이 활용한다)
aspx 파일에서는 Request와 동일하게 Response.메서드(), Response.프로퍼티 형태로 바로 사용하게 된다.
정리해보면, aspx 파일에서 Request, Response 를 인스턴스화 할 필요없이 그대로 사용하며, MSDN에 나와있는 메서드, 프로퍼티를 보며 원하는 기능을 찾아쓰면 된다.
위의 설명에 따라, 우리가 board_write.html 에서 넘긴 값들은 Request, Response 둘중에 어떤 것을 이용하면 될까?
aspx 페이지를 빈 녀석으로 하나 만들어보자.
board_write_done.aspx
<%@ Page Language="C#" runat="server" %><script language="C#" runat="server">
void Page_Load()
{
}</script>
<form>값을 받는 방법은, Request 를 이용하며, 일반적으로 사용하기에는 총 3가지가 존재한다.
Request.Form["name명"]; // 1. POST받기
Request.QueryString["name명"]; // 2. GET받기
Request["name명"]; // 3. GET/POST 구분없이 받기
<form method="GET/POST">에 따라 1,2번을 이용할 수 있거나, 구분없이 그냥 3번처럼 GET/POST 신경쓰지 않고도 받을 수 있다.
여기서, 처음보는 형식이 있다. Request는 클래스인 것을 알겠는데, 클래스에는 메서드,프로퍼티 2가지가 있다고 했다. 그리고 메서드는 ()괄호가 붙고, 프로퍼티는 아무것도 붙지 않는 형식이라고 했는데, []중괄호는 처음보는 형식이다.
이게 바로 Collection 이라는 형식의 클래스인데, System.Collections 이다. 일반적으로 ArrayList 클래스라는 것으로 실제 사용하게 된다. 비슷한 형식으로 배열(System.Array)이 있다. MSDN에서 대략적으로 읽어보길 바란다.
컬렉션: http://msdn.microsoft.com/ko-kr/library/ybcx56wz(v=VS.80).aspx
배열: http://msdn.microsoft.com/ko-kr/library/system.array.aspx
배열은 "값"만 존재하는 반면,
컬렉션은, "키"와 "값"이 쌍으로 존재한다. 우리가 지금 구현하는 GET/POST 값을 받는데에 있어서, name이 "키"라고 할 수 있고, 그것의 "값"이 존재하는 것이다. 영어사전을 생각해보자. 영어사전에는 "키"라고 할 수 있는 단어가 있고, "값"이라고 할 수 있는 지문이 나와있을 것이다. 이처럼, 컬렉션에는 키/쌍이 하나가 되는 값을 하나의 Item이라고 부른다. 이 Item은 뒤에 s가 붙어, Items 라는 컬렉션으로 사용할 수 있다.
처음부터 끝까지 알아보기에는, 우리같은 초보에겐 머리아픈 일이다. (필자도 닷넷을 100%마스터 하지 못한 초보이다) 컬렉션 형식에서 가장 많이 쓰이는 프로퍼티가 Collection.Count 로, 컬렉션의 갯수를 int 로 리턴한다.
메서드로는 Add(), Remove(), RemoveAt() 등 MSDN에 나와있으니 살펴보길 바란다.
Request.Form["name명"]; // 1. POST받기
Request.QueryString["name명"]; // 2. GET받기
Request["name명"]; // 3. GET/POST 구분없이 받기
즉, 값을 받기 위해서는 사실
Request.Form
Request.QueryString
이렇게 컬렉션이 존재하는데, 이 자체가 컬렉션을 리턴한다. 즉, 현재 페이지로 넘어온 POST의 키/값의 쌍인 것(.Form)들, 그리고 GET도 마찬가지(.QueryStrings)겠다.
내부적으로는, Request.Forms 와 Request.QueryStrings 는 컬렉션 형식인 NameValueCollection 클래스를 리턴한다.
쉽게, 컬렉션은 이렇게 생각하자.
해당 컬렉션의 리턴형만 알고, 그렇게 받으면 되고. 해당 컬렉션을 이용하는 방법은 중괄호[] 로 가져오거나 할당하면 된다.
예로, POST 형식으로 2개의 값이 넘어왔다고 치자.
name=홍길동
age=50
NameValueCollection post = Request.Form;
이렇게 되면 post 는 nameValueCollection 형식이므로, NameValueCollection 클래스의 멤버에 나와있듯이 다음처럼 사용가능하겠다.
int a = post.Count; // 2개이므로 2
string name = post[0]; // 첫번째인 name
string name = post[1]; // 두번째인 age
string name = post["name"]; // name이므로, '홍길동'
string name = post["age"]; // age이므로, '50'
복잡하지 않은가? 그러므로, 간단하게 컬렉션을 바로 이용하면,
string name = Request.Form["name"];
int age = Int32.Parse(Request.Form["age"]);
이렇게 받아와서 원하는 형식으로도 얻을 수 있을 것이다.
GET방식의 값을 읽어오는 Request.Querystring 도 다를 것 없다.
int age = Int32.Parse(Request.Form["age"]);
이것을 분석해보자.
이 항목의 목적은 무엇인가?
POST방식으로 넘어오는 age 값을 얻어, int 형으로 변환해 오는 것이다.
여러분들이 복잡한 구문을 해석할 때에는, 각 구문 하나하나를 "자료형"으로 해석하면 쉽다.
1) int age = Int32.Parse(Request.Form["age"]); - 밑줄은 컬렉션
2) int age = Int32.Parse(Collection["age"]); - 컬렉션["키"]의 리턴은 string형
3) int age = Int32.Parse(String); - Int32.Parse(string)의 리턴은 int 형
4) int age = Int32;
어쩔 수 없이 설명이 길어져야 하는 파트이므로, 설명을 늘여놨는데 그냥 읽고 넘어가길 바란다.
이제 실제 값을 받아보자.
이전시간의 board_write.html 샘플이다. 4개 필드는 차례대로, name, title, content, password 4개이다. 이 값을 board_write.done.aspx 파일에서 받아서 한번 출력해보자.
1. board_write.html 에서 POST방식으로 board_write_done.aspx 파일로 넘기도록 한다.
2. 단순한 방법으로, Request[""] 를 이용해 4개의 항목을 받는다.
3. Response.Write() 로 단순하게 뿌려주자.
방법은 이미 다 나왔지 않는가? 꼭 직접 해보도록 하자.
1번은 board_write.html 파일을 열어, <form>태그를 수정한다.
<form method="post" action="board_write_done.aspx">
2,3 번은 board_write_done.aspx 파일에서 해결해야 하므로,
board_write_done.aspx
<%@ Page Language="C#" runat="server" %><script language="C#" runat="server">
void Page_Load()
{
string name = Request["name"];
string title = Request["title"];
string content = Request["content"];
string password = Request["password"];Response.Write("이름 : " + name + "<hr>");
Response.Write("제목 : " + title + "<hr>");
Response.Write("내용 : " + content + "<hr>");
Response.Write("비번 : " + password + "<hr>");}
</script>
이렇게 받고, 출력하면 되겠다.
다음은 그에 대한 결과이다.
혹시, 필자처럼 한글이 깨진다면 다음 파일(web.config)을 다운로드 받아서 홈디렉터리 폴더(c:\home)에 넣도록 하자. asp.net 이 실행될 때 가장 먼저 읽어오는 각종 설정 등을 지정하는 파일로, 해석하는 언어(Localization) 또는 인코딩(Encoding)을 제대로 못하는 경우이다.
GET방식도 별 문제 없이 같은 방법으로 이용할 수 있다.
이렇듯, 값을 받기 위해서는 Request["name명"] 을 이용하면 되고, 그것을 string 형으로 받으면 된다. 이 자료가 계산되어야 한다면 해당 자료형으로 바꾸어서 사용할 수 있을 것이다.
이번시간의 마지막으로, Request 클래스의 ServerVariables 라는 컬렉션을 사용해보겠다. 컬렉션 이름을 봐도 "서버의 변수"정도로 해석하면 될 것 같다.
컬렉션이므로, 어떤 값이 있을지는 모르겠지만, 중괄호[] 를 이용하여 값을 읽어올 수 있을 것 같다. 또한 서버 변수이므로 조작은 불가능할 것 같은 느낌이 온다. (서버 변수는 서버의 상태에 대한 값이기 때문에 조작할 필요가 없지 않을까?)
string Request.ServerVariables["읽어올키"];
그렇다면, Request.ServerVariables 컬렉션은 어떤 키를 가지고 있을까?
모든 키를 출력해보기 위해, 다음을 수행해보자.
server_val.aspx
<%@ Page Language="C#" runat="server" %><script language="C#" runat="server">
void Page_Load()
{foreach(string vals in Request.ServerVariables)
{
Response.Write( "[키이름] <font color=red>" + vals + "</font> ==> [키값] <b>" + Request.ServerVariables[vals] + "</b><hr>" );
}}
</script>
빨간색을 유의 깊게 보자.
컬렉션의 모든 키를 가져오기 위해 foreach 라는 키워드를 이용했다.
foreach (컬렉션 값의 자료형 변수명 in 컬렉션명);
{
..
}
이런 형식으로 사용가능하다.
이는 차례때로 변수명은 해당 컬렉션명의 키 값을 가져오게 된다. 그리고 HTML을 넣어서 이쁘게(?) 출력해보면 각 키/값을 하나씩 구분하며 볼 수 있을 것이다.
이번 강의는 여기까지이다.
<form> 값을 받아보았으며, 값을 받기 위해 사용하는 자료형인 컬렉션(Collection)에 대해 설명하였다. 여러가지를 생각해보고, 직접 꼭 복습하기 바란다.
'ⓟrogramming > asp.net 게시판' 카테고리의 다른 글
닷넷 게시판 만들기 Part 14 - 서버컨트롤(중요!) (0) | 2011.01.26 |
---|---|
닷넷 게시판 만들기 Part 13 - 파일 업로드 및 저장 (0) | 2011.01.25 |
닷넷 게시판 만들기 Part 11 - 서버로 보내기 (1) | 2011.01.20 |
닷넷 게시판 만들기 Part 10 - asp.net 을 시작하기 전에 - 태그 (0) | 2011.01.19 |
닷넷 게시판 만들기 Part 9 - 카운터 계속. 파일 다루기. MSDN 찾기 (3) | 2011.01.14 |