'Program'에 해당되는 글 8건
- 2011.01.18 ASP.NET MVC 에서 Twitter API 연계 - 비인증편 -
- 2007.06.18 ASP 페이지를 엑셀로 변환하기- ASP Convert to Excel
- 2007.04.03 웹 상의 이미지를 쉽게 서버에 올려주자 - Uptome with Firefox Extension & IE MenuExt 1
- 2007.01.12 자신의 게시판에 새 글이 올라오면 알려주는 알리미 프로그램 2
- 2006.08.01 MSSQL 테이블 정의서를 쉽게 만들어보자!! 8
- 2006.07.22 Stored Procedure(저장 프로시져) 코딩을 쉽게 하자
- 2006.07.21 프로시져를 사용하여 자바스크립트 에러 메시지 출력
- 2006.07.20 Request 개체로 넘어오는 값들을 쉽게 알아내고, 코딩하자 2
일단 참 오랜만에(?) 블로깅입니다.
다시 일 관련(?) 블로그에 손을 대기로 마음 먹은 것은 다름이 아니라 최근 ASP.NET MVC 2 Framework로 신개념 온라인 상담 전문 고객센터 커뮤니티인 HELPst.com를 만들었기 때문이랄까요? 차근차근 ASP.NET MVC Framework에 대한 이야기를 나누도록 하고, 우선은 작업에 필요하다 보니까 쓰게되는 내용을 가지고 일단 썰을 풀고자 합니다.
일단 이번에 해볼 작업은 트위터 아시죠? 트위터!! 네 저도 트위터 계정이 있습니다. @ssemi
뭐 다들 트위터니 페이스북이니 미투데이니하는 SNS 하나 정도는 가지고 있자나요?? 개발자라면 여기서 또 API라고 하는 내용을 아시리라 믿습니다. 모르신다구요? API가 무슨 약자게요?? 응용프로그램 인터페이스 (API, Application Program Interface)라고 하는데, 사실 이건 뭐 처음 시스템 프로그래밍상에 있던 내용들이었고, 그 내용이 웹으로 오면서 약간 다른 의미로 쓰이긴 했어요.
뭐 어쨋든 해당 사이트에 API가 제공된다면 어떤 개발자라도 해당 사이트에서 정보를 쉽게 가져오거나, 변경할 수 있다! 이겁니다.
앞에서부터 잡설이 기네요.
트위터랑 연동하고 싶은데 어떻게 해야 하는걸까? 고민하시는 분들. 일단 차근차근 step 1을 밟아나가시는 겁니다.
API가 뭔소리인지도 모르겠고, 인증은 어떻게 하는거며, 개발은 또 어떻게 해야 하는거야? 라고 생각하시는 분들을 위한 가장 좋은 예제가 될 수 있었으면 좋겠습니다.
Twitter Search API
ASP.NET MVC 2 + .NET Framework 3.5 + Visual Studio 2008로 작업했습니다.
Default로 제공되는 템플릿 ASP.NET MVC2 Web Application 템플릿을 생성해서 만든 내용입니다.
이번 내용은 간단하게 ASP.NET MVC로 트위터와 통신하고, 뿌려주는 식의 작업을 할 것이에요.
비인증 API를 사용하기 때문에 전혀 불편 없이 쓸 수 있어요.
비인증 API가 뭐냐고요? 쉽게 말해서 트위터에 로그인 안하고, 그냥 가져다가 쓸 수 있다는거죠.
트위터 개발자 센터에 가면 API관련 레퍼런스를 볼 수 있는데, 어떤 문서들에는 Requires Authentication - false 가 있는걸 볼 수 있습니다. 이런 속성이 들어있는 녀석들이 비인증이라는 것이죠. 물론 비인증에는 Rate Limited 즉 요청(Request)에 대한 제한(Limit)이 있죠. 뭐 그래도 어때요. 만들면 장땡이지. 후후후 s(-_-)z
여기서는 비인증 API인 search를 가지고 만들어 보겠습니다.
보통 트위터에서 검색을 하고자 할 때 쓰는 페이지인 이곳에서는 일반적인 텍스트(text), 트렌드(trend), 아이디(@twitterID), 해쉬태그(#hash) 등등을 모두 검색하는 곳입니다. 이곳의 결과를 자신의 페이지에다가 보이도록 해보겠습니다.
우선 내용은 간단하게 아래와 같습니다.
Controller 에서 Search API의 내용을 atom 포맷으로 가져와서 그 내용을 Linq로 Model에 넣어줍니다. View는 Model을 보여주는 일 밖에 없구요.
일단 아래 소스를 붙여보세요.
/Models/AccountModels.cs
/Controllers/HomeController.cs - ActionResult Index() { // 안에다가... }
/Views/Home/Index.aspx
결과 화면
이처럼 간단하게 인증 없이 트위터 검색 결과를 자신의 홈페이지에 뿌려줄 수 있습니다.
View 페이지에서는 단지 foreach로 화면에 출력만 할 뿐입니다. 수정하여 자신의 취향에 맞게 보여줄 수 있겠죠?
Model 페이지에서는 제공된 정보를 알맞게 가공하여 쓸 수 있도록 개체 클래스를 하나 생성하여 사용하였습니다.
가장 중요한 Controller 페이지에서는 왼쪽에서 보시다싶이 WebRequest로 http://search.twitter.com/search.atom 타입의 URI를 GET으로 요청하였습니다. 그 결과가 atom 타입으로 반환되었고, Controller에서는 그 결과를 Model에 가공된 데이터로 집어 넣었습니다.
트위터의 비인증 API를 사용하면 자신의 글을 이렇게 쉽게 나타낼 수 있습니다.
한번 해보세요. 뭐야? 이렇게 쉬운 것이었어? 라고 놀라실 수도 있습니다. ^^
오랜만에 글을 쓰는 것 같습니다. 물론 몇가지 개발한 결과물이 있는데, 차마 이곳에 올리기가 부끄럽기에(!) 조용히 묻어두고 있습니다만 언젠가는 이 곳에 올라오겠지요.
오래간만에 ASP작업을 했습니다.
ASP를 사용해서 페이지를 엑셀 파일로 받고자 할 때, 아래 두 줄의 소스 코드를 통해서 엑셀로 변환을 시킵니다.
페이지 헤더(Header)에 아래 소스 코드를 삽입 시켜서 엑셀파일로 attach 받는 내용이죠.
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "Content-Disposition", "attachment; filename=파일이름.xls"
일반적으로 엑셀로 받고자 하는 내용들은 보통 리스팅(Listing)된 출력 자료들이 대부분입니다.
모두 『표 형식』을 기준으로 리스트를 뿌려주게 됩니다.
표 라는 것은 HTML 에서 TABLE 태그를 통해 이뤄집니다.
일반적으로 리스팅을 위한 코드의 구성은
SQL 쿼리 -> 결과값 레코드셋으로 변환 -> 테이블안에 출력의 순서가 됩니다.
여기서 엑셀 출력을 위해서 기존 파일에 위의 두줄의 코드만 추가해도 되겠지만, 좀 더 광범위하게 쓸 수 있도록 엑셀 출력 파일을 만들고자 한번 만들어봤습니다.
여러개의 엑셀 출력을 할 때 이 소스는 큰 도움이 될 것이라고 생각합니다.
중요 포인트는 두곳입니다.
# 테이블 칼럼 타이틀은 배열을 통해 나타냅니다.
# 레코드셋의 칼럼의 갯수 만큼 나타냅니다.
2가지를 특징을 통해 이 코드는 어디에다가 써도 유동적이게 돌아간다는 것입니다.
<%
' Array 인자와 SELECT 순서가 같아야 함
Dim arrMenuName
arrMenuName = Array("아이디", "이름", "주소", "전화번호", "혈액형")
strSQL = "SELECT 아이디, 이름, 주소, 전화번호, 혈액형 FROM 테이블"
SEToRs = oCn.Execute(strSQL,,1)
%>
<html>
<head>
<title>엑셀출력</title>
<metahttp-equiv="content-type" content="text/html; charset=euc-kr" />
</head>
<body>
<table width="100%" border="1" cellspcaing="0" cellpadding="0">
<tr>
<%
' TH 로 bold 와 center를 한번에~
IF isArray(arrMenuName) Then
For i = 0 to UBound(arrMenuName)
Response.Write "<th style=""background:#EEEEEE"">"& arrMenuName(i) & "</th>" & vbCrLF
Next
End IF
%>
</tr>
<tr align="center">
<%
SET oRs = oCn.Execute(strSQL,,1)
IF oRs.State = 1 Then
IF Not oRs.EOF Then
Do While Not oRs.EOF
%>
<tr align="center">
<% For i = 0 to oRs.Fields.Count - 1 ' Recordset Column Count 만큼 TD 생성!!%>
<td><%= oRs(i)%></td>
<% Next %>
</tr>
<%
oRs.MoveNext
Loop
End IF
oRs.Close : SET oRs= Nothing
End IF
%>
</tr>
</table>
</body>
</html>
<%
IF oCn.State = 1 then
oCn.Close
SET oCn = Nothing
End IF
%>
oCn, oRs는 각자 알맞는 개체명을 사용하도록 하세요.
써 넣고 보니까, 엑셀 작업과 관련되었다기 보다는 HTML의 표(TABLE)에 들어갈 데이터 생성에 도움을 준 것 같군요.
2007. 06. 18. by Ssemi™
Written by Ssemi™(semin Seol), www.Ssemi.net
이 프로그램은 아래의 링크에서 아이디어를 얻었습니다
프로그램의 본래 목적은 불여우 부가기능(Firefox Extension)과 자신의 서버로 올리는 특징 입니다.
무화님의 『이미지를 쉽게 서버에 올려주는.. filebox』
- 무화님 본인의 서버에 올려야 하는 단점 커버
알릭님의 『외부이미지를 내계정으로 끌어오기』
- Snoopy Class를 통해 웹상의 이미지를 내 서버로 끌어올 수 있음
Upload to my Server - Firefox Extension
▶ 웹 상의 이미지를 브라우져를 통해 자신의 서버에 쉽게 올릴 수 있게 도와주는 프로그램
▶ 다운로드(Download)
▶ 인스톨(Install)
◎ 자신의 서버 세팅알릭님의 소스파일을 다운로드 후 아래와 같이 변경합니다.
getImage.php를 함께 첨부 하여 자신의 서버의 적당한 곳에 놓습니다.
자신이 올린 곳의 주소를 기억하셨다가 아래 경로를 수정합니다. (IE)
◎ 인터넷 익스플로러 aka IE (Internet Explorer)
압축파일을 다운로드 후, 압축을 해제 하면
browser 폴더 아래에 IE 폴더 안의 ie-install.bat 배치 파일을 실행합니다.
◎ 파이어폭스 aka 불여우 (FireFox)
Firefox Extensions 불여우 부가기능을 설치 합니다.
동봉된 uptome.xpi를 불여우에 설치 합니다.
▶ 사용법(How to use)
브라우져를 통해 웹서핑 중에 그림 파일에 마우스 오른쪽 버튼을 클릭하면[그림 - 내 서버로 보내기] 메뉴가 있는 것을 발견하실 수 있습니다.
▶ 당부사항
자신의 서버로 올린 파일을 정확하게 알 수 있게 갤러리 소스를 활용하시면 좀 더 멋지게 파일들을 관리 하실 수 있으실 것입니다.좀 더 보완하거나 더 좋은 아이디어가 있으신 분들은 언제든지 컨택해주세요!
2007. 04. 03. by Ssemi™
예전에 미니위니에서 무화님의 『자신의 게시판에 새 글이 올라오면 알려주는...』 이라는 게시물로 프로그램 하나가 올라온 적이 있습니다.
당시에는 오우!! 괜찮다!!! 라고 생각해서 써먹어봤는데, 좀 애로사항이 꽃피더군요. 가장 큰 문제는 역시 ASP로의 변환 문제였었죠. check.php 안에서 해결해볼려니 여간 어려운게 아니더라구요. Source Code가 있는게 아니니까요~
그래서 직접 만들어봤습니다. 사실 필요에 의해서 만들게 되었어요. 고객의 요구랄까요? 제가 있는 곳에서 정말로 필요한 프로그램이었거든요.
사실 웹 프로그래밍은 어느정도 하겠는데, 시스템 프로그래밍은 경험이 없어서 꽤나 고전했습니다. 거의 소스도 악전고투 후의 느낌이네요. ^^;
간신히 asp, php에 돌아가게 만들고, JSP는 음.. asp랑 php만 보면 형식은 같으니 하나 그대로 만들어 쓰시면 되겠네요;; (나몰라라 배째모드)
이 프로그램은 무화님의 프로그램을 좀 더 업데이트 정도 라고 생각하시면 될것 같아요. 거의 모방 수준이죠. 하핫 그래도 모방은...창조의 어머니(??) 일까요? ^^;
Tell me the Article!!! - with C#.NET
▶ 자신의 게시판에 새 글이 올라오면 알려주는 알리미 프로그램
▶ 다운로드(Download)
프로그램 파일 및 setup 파일, music 파일, check 파일 및 설명서가 함께 동봉되어져 있습니다.▶ 미리보기(Preview)
업데이트 되었을 때
마우스 왼쪽 클릭시 서버 시간 보여줌
서버에서 파일이 바뀌거나 하게 되면 [그림1] 과 같이 알려주는 프로그램입니다.
DB에 직접 요청을 해서 알려주는게 아니라, 파일을 이용해서 하기 때문에 asp나 php가 돌아가는 계정이면 됩니다.
타이머를 이용해서 계속 확인하는 방법입니다.
프로그램을 실행 하게 된 후 오른쪽 트레이에 그림과 같은 아이콘이 하나 생기게 됩니다.
▶ 사용법(How to use)
# 파일 다운로드 후 적당한 곳에 압축을 풉니다.총 4개의 파일이 필요합니다. (*필수 파일)
* setup.txt : 설정 파일
* check.asp / check.php : 서버에서 check를 해줄 파일
* sound.wav : 노래 파일 - 업데이트가 되었을 시에 파일이 있다면 재생함
- 무조건 이름은 sound.wav 입니다.
# Check 파일 설정
일단 각 플랫폼에 맞는 Check파일을 선택하신 후, 서버로 파일을 올려줍니다.
파일은 퍼미션을 777로 바꿔줍니다. Windows 서버라면 IUSER_Machine 사용자에게 수정권한을 줘야 합니다.
해당 파일을 문서 편집기로 열어보면, 아래쪽에 현재 파일을 업데이트 할 수 있는 코드가 있습니다. 해당 코드를 가지고 글이 등록되거나 하는 부분에 추가합니다.
제로보드(php)를 예를 들자면
1. check.php를 data 폴더에 복사
2. write_ok.php 64번째 줄쯤에 touch(경로/check.php); 추가
하시면 됩니다.
asp를 예로 들자면
1. check.asp를 복사
2. insert into 쿼리가 실행되는 부분 다음에 Call CheckFileUpdate 프로시져 실행
(프로시져는 check.asp 안에 들어있음)
# Setup 파일을 설정합니다.
60
2
http://www.ssemi.net/check.php
http://www.ssemi.net
IE
1 : 서버에 접근하는 시간 (단위 : 초[second]) - 60초가 기본으로 1분당 1번씩 확인함
2 : 몇 분까지 알려줌 / 단위 : 분[Minute] - Default 2분으로...
새 게시물이 올라왔으면 2분(설정값)이내에 서버 접근을 시도(1번째 값) 하게 되면 알려주게 됩니다.
본디 이 프로그램은 게시물을 봤는지, 안봤는지 확인 할 수 있는 신호가 없기 때문에 (DB에 직접 접근하지 않음)
게시물이 올라왔을 시에는 주구장창!! 알려주게 됨을 방지하고자 시간을 설정해 둠
3 : 서버에 접근하는 주소의 경로 (check 파일이 있는 경로)
4 : 더블클릭시에 이동하고자 하는 주소 (게시판 주소 등등)
5 : 브라우져 설정 - 선택 값 (2종류) : IE, FF | 기본 : IE (인터넷 익스플로러)
# 트레이 아이콘 사용 방법
* 왼쪽 마우스 : [그림2]처럼 서버 시간을 알려줍니다.
* 더블 클릭 : setup에 넣은 주소로 브라우져 이동합니다
* 오른쪽 마우스 : 종료
▶ 필수조건(Important)
C#.NET으로 만들어서 .NET Framework 2.0 이 꼭 필요합니다.▶ 당부사항
딱 적당히 만들었습니다;; 아이디어 있으시면 받겠습니다.작년에 만들어 놓은 것을 좀 더 보기좋게 손 본 이후 버젼 업시킨후 공개합니다 ^-^)//
2007. 01. 12. by Ssemi™
개발자의 필요 덕목 중 개발능력도 물론 중요하지만, 문서화는 매우 중요한 요소입니다.
문서화 능력 하나로 인해 같은 개발능력을 갖고 있는 개발자라 할 지라도, 차이점이 존재하게 만들 수 있기 때문이지요.
Stored Procedure(저장 프로시져) 코딩을 쉽게 하자에 이은 2탄은 바로 테이블 정의서를 쉽게 만들어 보는 것입니다.
사수에게 테이블 정보를 전달 받을 때, 혹은 부사수에게 테이블에 대한 내용을 알려줄때 유용하게 사용하실 수 있습니다.
Document Table List
MSSQL Eterprise Manager의 다이어그램을 출력하기 용의하게 변경한 ASP 스크립트 파일입니다.
▶ 미리보기(Preview)
▶ 다운로드(Download)
▶ 사용법(How to use)
파일을 열어보시면 아래와 같은 부분이 있습니다. 해당 정보를 입력해주세요.'--------------------------------------------------------------------------
' // 사용자 지정 사항
'--------------------------------------------------------------------------
' 디비 연결 - DB Connect
'--------------------------------------------------------------------------
Dim DBSRV, DBName, DBID, DBPW
DBSRV = ""
DBName = ""
DBID = ""
DBPW = ""
'--------------------------------------------------------------------------
' 개인 정보 - Personal Info
'--------------------------------------------------------------------------
ProjectName = "TABLE INFOMATION"
YourName = "Your Name"
'--------------------------------------------------------------------------
' 종이 픽셀 설정 (Default : A4)
PaperHeight = "1010" ' A4용지에 맞는 종이 높이값
'--------------------------------------------------------------------------
▶ 주의사항
- 이 스크립트의 실행은 DBMS가 MSSQL임에 한해 실행되고 보여집니다.
- 인터넷 익스플로러(Internet Explorer) + A4용지에 최적화 되어있습니다
- 파이어폭스(Firefox)에서는 용지 중앙에 아주 알맞게 출력됩니다. (단 테이블이 이쁘질 않음 ㅜ_ㅜ)
- 출력 용지를 변경하실 때에는 IE메뉴 - 파일 - 인쇄 미리보기를 통해 PaperHeight 의 값을 설정해주시고 출력한다면 좀 더 멋진 결과물을 받으실 수 있습니다.
귀차니즘에 빠진 Ssemi™의 Library 제 3탄 - SP_CodingMaker를 소개합니다.
제가 쓰는 에디터 프로그램은 EditPlus입니다.
그러다 보니 모두 하드코딩(Hard Coding)을 하게 되는데요
ASP작업시에 Command 개체를 통해서 Stored Procedure를 사용하는 코드를 작성할 때, Parameter 값을 입력하게 됩니다.
With oCmd
.ActiveConnection = strConnect
.CommandType = 4
.CommandText = "sp_Login"
.Parameters.Append .CreateParameter("@UserID", 200, &H0001, 16, UserID)
.Parameters.Append .CreateParameter("@Password", 200, &H0001, 20, Password)
.Parameters.Append .CreateParameter("@OutError", 3, &H0002, 0)
.Execute, , 128
OutError = .Parameters("@OutError").Value
IF isNull(OutError) OR Len(OutError) = 0 Then OutError = 0 ELSE OutError = CLng(OutError) End IF
SET oRs = .Execute
.Parameters.Delete "@UserID"
.Parameters.Delete "@Password"
.Parameters.Delete "@OutError"
End With
이부분은 거의 뭐 직접 작성하기 보단, Ctrl + C (복사하기) 와 Ctrl + V (붙이기)로 작성을 해나가는데요.
이게 나름대로 귀찮은 작업니다. 이걸 간편히 하고자 부분 수정만 하면 편하게 사용할 수 있게 하나 만들어 놓았었습니다.
나름대로 지저분하게 만들어 놓았던 것을 약간 스타일링(!) 하고, 코드 좀 수정(!)해서 배포합니다.
Store Procedure Coding Maker
귀차니즘의 ASPer에게 이것이 아주 도움이 되기를 희망하면서..... ^_^
▶ 다운로드(Download)
▶ 사용법
파일을 열어보시면 아래와 같은 부분이 있습니다. 해당 정보를 입력해주세요.'-----------------------------------------------------------
' // 디비 연결
'-----------------------------------------------------------
Dim DBSrv, DBName, DBID, DBPW
DBSrv = ""
DBName = ""
DBID = ""
DBPW = ""
'-----------------------------------------------------------
' // 객체 이름 지정
'-----------------------------------------------------------
Dim RecordSetObjectName, CommandObjectName
RecordSetObjectName = "oRs"
CommandObjectName = "oCmd"
'-----------------------------------------------------------
후에 ASP를 실행하시면 아래와 같은 결과창이 뜨게 됩니다.
파일 실행한 화면
▶ 주의사항
@RETURN_VALUE를 안쓴다는 가정하에 진행된 스크립트 파일입니다.파일안에서 @RETURN_VALUE에 대한 내용을 아예 삭제시켰거든요 ^_^;
MSSQL2000에서는 @RETURN_VALUE가 제대로 안먹어서 @변수 하나 만들어서 OUTPUT으로 빼서 사용하는편이 훨씬 좋아서요!
데이터타입을 Decimal 혹은 Numeric 값을 쓸 경우 Precision 과 NumericScale 을 정의해야 하는데,
이 부분을 제가 사용한 적이 없어서 코드에 넣어두지 않았습니다.
앞으로 업데이트 할 예정이니 ^_^ 일단은 사용해주시기 바랍니다.
Written by Ssemi™(semin Seol), www.Ssemi.net
Request개체로 넘어온 Form-Data 쉽게 알아내기에 이어진 라이브러리 2탄!!
웹개발을 하다보면 서버스크립트인 ASP 이외에도 클라이언트 스크립트인 Javascript의 사용은 필수입니다.
아래와 같은 코드를 보십시오.
<%위와 같이 서버/클라이언트의 구분이 있을 경우에는 코딩이 지저분해지고, 중간중간마다 <% %> 구분을 해주면서 Javascript도 함께 써야 하는 불편함이 있습니다.
'작업 끝! - 커넥션 풀링
IF oCn.State = 1 Then oCn.Close
%>
<script type="text/javascript">
<!--
window.alert('확인 테스트');
document.location.href = '/test.asp';
// -->
</script>
<%
Response.End
%>
바로 이와 같은 코드의 불편함을 줄여주고자 프로시져를 사용하여 에러 메시지를 출력합니다.
아래는 프로시져를 사용하여 변경한 코드입니다.
<%더욱 깔끔한 코드로 만들 수 있습니다. 가독성이 더욱 뛰어나집니다. ^_^
'작업 끝! - 커넥션 풀링
IF oCn.State = 1 Then oCn.Close
FlushError "확인 테스트", "Location", null, "/test.asp"
%>
물론 이와 같은 코드를 모두들 사용하고 계실 것이라 생각합니다.
하지만 선물세트 같이 다용도로 쓰일 수 있게 만든 프로시져라 공개해봅니다 :)
FlushError Procedure
이 프로시져는 서버/클라이언트간에 Javascript 에러 메시지 사용에 있어서 유연한 코딩을 제공해줍니다.
프로시져를 사용함으로서 얻어지는 가독성과 편리함을 느껴보세요 ^_^
▶ 사용법
FlushError 프로시져에는 4가지의 인자(Argument)가 존재합니다.- ErrorText : 에러메시지 출력
- 인자의 값이 Null 이거나 길이가 0 일때는 에러메시지가 나오지 않음
- nOption : 에러메시지 이후의 행동을 명령
- Default Value : Default // history.back() or document.location.href 의 기능을 수행
- Back // history.go(nGo)을 통해 history 이동 가능(일반적으로 history.back()의 기능의 명령)
- Location // document.location.href 를 통해 페이지 이동을 위한 명령
- Close // 현재 창을 닫고 싶을 때 사용
- Opener // 부모창을 이동시키고, 현재 창을 닫는데 사용
- Stop // 아무 반응 없음
- nGo : history.go(#) 안의 인수(#)
- Default Value : -1 // history.back()과 같은 기능
- nPlace : Location.href 를 통해 페이지 이동시에 이동할 위치를 지정
- Default Value : / // Rootpage
▶ 코드
Sub FlushError(ErrorText, nOption, nGo, nPlace)
Response.Write "<script type=""text/javascript"">" & chr(13)
Response.Write "<!-- " & chr(13)
IF Not isNull(ErrorText) And Len(ErrorText) > 0 Then
Response.Write "window.alert('"& ErrorText &"');" & chr(13)
End IF
IF isNull(nOption) OR Len(nOption) = 0 Then nOption = "default"
IF isNull(nGo) OR Not isNumeric(nGo) OR Len(nGo) > 2 OR nGo = 0 Then nGo = "-1"
IF isNull(nPlace) OR Len(nPlace) = 0 OR isNumeric(nPlace) Then nPlace = "/"
Select Case LCase(CSTR(nOption))
Case "back"
Response.Write "history.go("& nGo &");" & chr(13)
Case "location"
Response.Write "document.location.href='"& nPlace &"';" & chr(13)
Case "close"
Response.Write "self.opener = self;" & chr(13)
Response.Write "self.close();" & chr(13)
Case "opener"
Response.Write "if (window.opener && window.opener != null) { " & chr(13)
Response.Write "window.opener.location.href='"& nPlace &"';" & chr(13)
Response.Write "window.close();" & chr(13)
Response.Write "} else { " & chr(13)
Response.Write "window.close();" & chr(13)
Response.Write "}" & chr(13)
Case "default"
Response.Write "if (history.length>0) history.go("& nGo &");" & chr(13)
Response.Write "else document.location.href='"& nPlace &"';" & chr(13)
Case Else
End Select
Response.Write "// --> " & chr(13)
Response.Write "</script>" & chr(13)
Response.End
End Sub
▶ 예제코드
' 테스트1 이라는 에러메시지 출력 후 history.back()기능 수행* nGo, nPlcae 인자는 nOption 에 따라 쓰일 수도, 쓰이지 않을 수도 있음에 유의하여
FlushError "테스트1", "back", -1, 1
' 테스트2 이라는 에러메시지 출력 후 /test.asp 로 이동
FlushError "테스트2", "location", -1, "/test.asp"
' 테스트3 이라는 에러메시지 출력 후 현재 창을 닫음
FlushError "테스트3", "close", -1, 1
' 테스트4 이라는 에러메시지 출력 후 부모창을 /test.asp 로 옮긴 후 현재 창을 닫음
FlushError "테스트4", "opener", -1, "/test.asp"
' 테스트5 이라는 에러메시지 출력 후 멈춤
FlushError "테스트5", "stop", -1, 1
' 에러메시지 없이 /test.asp 로 이동
FlushError "", "Location", -1, "/test.asp"
실제 코딩시에는 FlushError "테스트", "stop", null, null 이라는 명령이 아닌
FlushError "테스트5", "stop", -1, 1 로 쓰게 되면 훨씬 코딩의 이로움이 생깁니다.
도움이 되었길 바라면서 이만 ^_^
Written by Ssemi™(semin Seol), www.Ssemi.net
개발자는 코드를 짜면서 재사용이 많은 코드들은 라이브러리로 모아두고 사용하게 됩니다.
지금부터 소개하려는 코드는 ASP를 해오면서 가장 타이핑하기 귀찮았던 form.submit() 시켰을 당시에 Request 개체로 반환되는 Form Data들을 일목요연하게 보여주는 코드가 되겠습니다. ^_^
ASP(Active Server Pages) 웹 개발에서 가장 일반적으로 수행되는 작업 중 하나는 처리를 위해 페이지 간에 데이터를 전달하는 것입니다.
FormData가 보내지는 방식에는 POST, GET의 2가지의 방식이 존재합니다.
Request 개체는 각각의 방식에 따라 Form, QueryString 이라는 컬렉션(Collection)이 존재합니다.
POST 방식으로 보냈을 시에는 Request.Form 을 통해 받게 됩니다.
GET 방식으로 보냈을 시에는 Request.QueryString 을 통해 받게 됩니다.
물론 Request 개체만을 통해서 POST, GET의 구분 없이 받을 수도 있습니다.
다음 예제를 살펴보기로 합시다.- ex1.htmForm, QueryString 으로 구분해 받는 이유중 가장 중요한 2가지는 보안과 구분입니다.
<html>
<head>
<title>FormData GET / POST Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
</head>
<body>
<form action="getData.asp" method="GET" id="form1" name="form1">
Name : <input type="text" id="firstName" name="firstName" size="10">
<br>
<input type="submit" value="Submit">
</form>
</body>
</html>
- getData.asp
<%
' method="GET" 방식일 경우
Response.Write Request.QueryString("firstName")
' method="POST" 방식일 경우
Response.Write Request.Form("firstName")
' GET, POST 구분 없이 받을 경우- 컬렉션을 사용안함
Response.Write Request("firstName")
%>
아래 예제는 구분을 보여줍니다- ex2.htm
<html>
<head>
<title>FormData GET / POST Example</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
</head>
<body>
<form action="getData.asp?firstName=test" method="POST" id="form1" name="form1">
Name : <input type="text" id="firstName" name="firstName" size="10">
<br>
<input type="submit" value="Submit">
</form>
</body>
</html>
- getData.asp
<%
Response.Write Request.QueryString("firstName") ' test가 출력
Response.Write "<br />"
Response.Write Request.Form("firstName") ' input text에 입력한 값이 출력
%>
어떤가요? 이해가 조금은 가시는지요? 막간을 이용한 FORM-Data에 대한 설명이었습니다.
자~ 위의 예제에서 느끼게 되는 포스를 느끼게 되었는지요?
<input> 태그를 통해 Form-data로 넘기는 값을 모두 getData.asp 라는 소스파일에서 각각 Request("넘어오는값") 으로 받게 됩니다.
그런데 만약 <input>태그가 10개가 넘어간다면? 혹은 20개, 30개, .......가 된다면??
그럴때 지금부터 설명하는 코드 생성 프로시져가 빛을 발하게 됩니다.
Form-Data Check Procedure
지금부터 설명하는 프로시져는 여러분들의 반복되는 Form-data를 넘기는 과정의 ASP코딩을 한결 쉽고 편하게 도와드릴 것입니다.
본 프로시져는 3개로 구성되어져 있습니다.
- Request.Form Check Procedure
- Request.QueryString Check Procedure
- Request.Cookies Check Procedure
▶ 사용법
아래 코드를 적당한 곳(라이브러리 파일 / 공통 include 함수 파일 등)에 넣어주시고, Request를 써야만 하는 곳.즉, Form-data를 받는 파일(FORM Action="파일이름")에다가 아래 코드를 넣으면 됩니다.
- formchk()
- Response.End
▶ 코드
' Request.Form Check
Sub Formchk()
Dim key
For Each key in Request.Form
Response.Write " Dim " & key & "<BR>"
Next
For Each key in Request.Form
Response.Write key & " = " & "Trim(Request.Form("""& key &""")) " & "<BR>"
Next
Response.Write "<HR>"
For Each key in Request.Form
Response.Write key & " = " & Request.Form(key) & "<BR>"
Next
Response.Write "<HR>"
For Each key in Request.Form
Response.Write key & " = CheckWord(" & key & ")<BR>"
Next
End Sub
' Request.QueryString Check
Sub Querychk()
Dim key
For Each key in Request.QueryString
Response.Write " Dim " & key & "<BR>"
Next
For Each key in Request.QueryString
Response.Write key & " = " & "Trim(Request.QueryString("""& key &""")) " & "<BR>"
Next
Response.Write "<HR>"
For Each key in Request.QueryString
Response.Write key & " = " & Request.QueryString(key) & "<BR>"
Next
Response.Write "<HR>"
For Each key in Request.QueryString
Response.Write key & " = CheckWord(" & key & ")<BR>"
Next
End Sub
' Request.Cookies Check
Sub Cookiechk()
Dim key, dickey
For Each key in Request.Cookies
Response.Write " Dim " & key & "<BR>"
Next
For Each key in Request.Cookies
IF Request.Cookies(key).HasKeys Then
For Each dickey in Request.Cookies(key) '딕셔너리에 있는 모든 키들을 검색하기 위해 또 다른 For Each 를 사용
Response.Write "(" & key & ")(" & dickey & ") = " & Request.Cookies(key)(dickey) & "<BR>"
Next
ELSE
Response.Write key & " = " & Request.Cookies(key) & "<BR>"
End IF
Next
Response.WRite "<HR>"
For Each key in Request.Cookies
IF Request.Cookies(key).HasKeys Then
For Each dickey in Request.Cookies(key)
Response.Write dickey & " = Request.Cookies("""& key &""")("""& dickey &""") " & "<BR>"
Next
ELSE
Response.Write key & " = Request.Cookies("""& key &""")" & "<BR>"
End IF
Next
End Sub
▶ 추가 코드
아래 코드는 문자열 Replace코드입니다. Check Procedure와 같이 쓰입니다Request로 받은 Form-data를 Replace처리합니다.
'CheckWord
Function CheckWord(str)
str = Replace(str, "<", "<")
str = Replace(str, ">", ">")
str = Replace(str, "'", "''")
str = Replace(str, """", Chr(34))
str = Replace(str, "|", Chr(124))
CheckWord = str
End Function
▶ 출력 결과
' Request.Form Check Procedure Execute
Dim userid
Dim password
Dim username
Dim birth_year
Dim birth_month
Dim birth_day
Dim birth_solar
userid = Trim(Request.Form("userid"))
password = Trim(Request.Form("password"))
username = Trim(Request.Form("username"))
birth_year = Trim(Request.Form("birth_year"))
birth_month = Trim(Request.Form("birth_month"))
birth_day = Trim(Request.Form("birth_day"))
birth_solar = Trim(Request.Form("birth_solar"))
userid = ssemi
password = 1234
username = 쎄미
birth_year = 1983
birth_month = 10
birth_day = 6
birth_solar = y
userid = CheckWord(userid)
password = CheckWord(password)
username = CheckWord(username)
birth_year = CheckWord(birth_year)
birth_month = CheckWord(birth_month)
birth_day = CheckWord(birth_day)
birth_solar = CheckWord(birth_solar)
▶ 마치며
어떻습니까? 좀 더 수월하게 좀 더 편하게 코드를 만들 수 있었습니다.물론 이 코드와 비슷한 기능을 하는 프로시져 또는 함수를 구현하신 분이 많으셨으리라 생각합니다.
필요한 부분은 여러분들에 맞게 적절하게 조정해서 써야 하겠습니다.
이 코드들은 실제로 제가 가장 많이 쓰는 프로시져들 중에 하나입니다.
웹개발을 일을 하면서 가장 중요한 것은 시간과의 싸움입니다. ^_^
시스템 프로그램 개발에서 각 코드들을 컴포넌트화 시켜 개발시간을 단축시키는 것과 같이,
웹 개발도 시간을 단축시킬 수 있는 방법을 많이 찾아서 알게 되면 좋겠습니다.
Recent comment