페이코인 Classic ASP 연동 모듈 만들면서 느낀 점 몇가지 정리
1. JSON 라이브러리 "숨 쉰채" 발견
https://webdevbros.net/2007/04/26/generate-json-from-asp-datatypes.html?redirect=true
https://github.com/tugrul/aspjson
인터넷 찾아보면 아무도 없다고 하는데, 놀랍게도 있었다.
2. DLL 추가하는 법
아주 잘 정리되어있다.
경우에 따라 Classic ASP 도 DLL 사용 가능하다.
Set abc = Server.CreateObject("추가할때쓴이름.해당모듈펑션네임")
형태로 호출한다.
3. JScript 가 뭐하는 놈이야
Classic ASP 는 딱 2가지 언어를 지원한다. VBScript, JScript. (Default = VBScript)
JScript 는 Javascript 의 Windows 쪽 명칭이다.... 뭐 그런 말들이 많다.
ECMAScript = Javascript = JScript 다 라는 말이 있는데,
옛날엔 맞는 말이었으나 현재는 아니다.
현재는 ECMAScript 해마다 재정이 계속 되고, 신기능 추가가 많이 되어서, Javascript 생김세가 많이 달렸다.
기본적인 예로 ()=>{} 와 같이 화살표=>표시로 함수 간단하게 쓰기 등등
최신 문법들은 지원하지 않는다. 더불어 JSON.stringify 같은 것들도 지원 안함.
한 2008년 쯤에 머물러 있는 Javascript = JScript 정도로 이해할 수 있겠다.
혹시 아니라면 알려주세요
4. JScript 와 VBScript 는 혼용할 수 없다.
VBScript 는 <% %> 태그
JScript 는 <script runat="server" language="jscript"> ... </script> 태그
를 사용한다.
하지만 <% %> 태그가 먼저 실행되고, <script> 태그가 나중에 실행된다.
그래서 의도한대로 실행이 안되는 경우가 종종 발생한다.
가장 좋은 해결 방법은 둘 중 하나만 사용하는 것이다.
출처: http://www.roblocher.com/technotes/ssjscript.html
5. Java 모듈을 많이 사용한다.
수많은 언어들이 리눅스 OS 를 위해 존재하기 때문에,
윈도우 기반의 ASP는 .NET 없이 할 수 있는게 정말정말정말 적다. 거의 손수 구현해야한다.
따라서 Java 모듈 사용하는 경우가 많다고 들었다. (OS를 타지 않아서)
public class Simple
{
public int SimpleFn ( int x )
{
return x * 2;
}
}
위와 같은 간단한 java 코드가 있다면, class 파일로 컴파일 해준다.
class파일을 적당한 디렉터리에 옮겨주고, JavaReg Utility 를 사용하여 COM 파일로 만들어준다. (Visual J++ 혹은 Microsoft SDK for Java 사용)
<html><body>
<h1>Simple Test
</h1>
The result from SIMPLE is: <% Set SimpleObj = Server.CreateObject("Simple") %>
<% = SimpleObj.SimpleFn(5) %>
<hr>
</body></html>
이렇게 Server.CreateObject 로 호출하면 된다.
출처 : http://gnujava.com/board/article_view.jsp?article_no=676&board_no=11&table_cd=EPAR04&table_no=04
6. Base64 인코딩
기록용으로 남긴다.
<%
'''''''''''''''''''''''''/
''/ 어떤분이 외국소스에서 구해 인터넷에 올려놓은 소스입니다.
''/ 쿠키에 많이 사용하더군요.
'''''''''''''''''''''''''/
const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
dim nl
' zero based arrays
dim Base64EncMap(63)
dim Base64DecMap(127)
'''''''''''''''''''''''''/
''/ must be called before using anything else
''/ 다른 작업이전에 먼저 호출해야하는 함수입니다.
'''''''''''''''''''''''''/
PUBLIC SUB initCodecs()
' init vars
nl = "<P>" & chr(13) & chr(10)
' setup base 64
dim max, idx
max = len(BASE_64_MAP_INIT)
for idx = 0 to max - 1
' one based string
Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
next
for idx = 0 to max - 1
Base64DecMap(ASC(Base64EncMap(idx))) = idx
next
END SUB
'''''''''''''''''''''''''/
''/ encode base 64 encoded string
''/ Base64로 인코딩하는 함수입니다.
'''''''''''''''''''''''''/
PUBLIC FUNCTION base64Encode(plain)
if len(plain) = 0 then
base64Encode = ""
exit function
end if
dim ret, ndx, by3, first, second, third
by3 = (len(plain) \ 3) * 3
ndx = 1
do while ndx <= by3
first = asc(mid(plain, ndx+0, 1))
second = asc(mid(plain, ndx+1, 1))
third = asc(mid(plain, ndx+2, 1))
ret = ret & Base64EncMap( (first \ 4) AND 63 )
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third \ 64) AND 3 ) )
ret = ret & Base64EncMap( third AND 63)
ndx = ndx + 3
loop
' check for stragglers
if by3 < len(plain) then
first = asc(mid(plain, ndx+0, 1))
ret = ret & Base64EncMap( (first \ 4) AND 63 )
if (len(plain) MOD 3 ) = 2 then
second = asc(mid(plain, ndx+1, 1))
ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second \ 16) AND 15 ) )
ret = ret & Base64EncMap( ((second * 4) AND 60) )
else
ret = ret & Base64EncMap( (first * 16) AND 48)
ret = ret & "="
end if
ret = ret & "="
end if
base64Encode = ret
END FUNCTION
'''''''''''''''''''''''''/
''/ decode base 64 encoded string
''/ Base64로 디코딩하는 함수 입니다.
'''''''''''''''''''''''''/
PUBLIC FUNCTION base64Decode(scrambled)
if len(scrambled) = 0 then
base64Decode = ""
exit function
end if
' ignore padding
dim realLen
realLen = len(scrambled)
do while mid(scrambled, realLen, 1) = "="
realLen = realLen - 1
loop
dim ret, ndx, by4, first, second, third, fourth
ret = ""
by4 = (realLen \ 4) * 4
ndx = 1
do while ndx <= by4
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
third = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15) )
ret = ret & chr( ((third * 64) AND 255) + (fourth AND 63) )
ndx = ndx + 4
loop
' check for stragglers, will be 2 or 3 characters
if ndx < realLen then
first = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
ret = ret & chr( ((first * 4) AND 255) + ((second \ 16) AND 3))
if realLen MOD 4 = 3 then
third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
ret = ret & chr( ((second * 16) AND 255) + ((third \ 4) AND 15) )
end if
end if
base64Decode = ret
END FUNCTION
'''''''''''''''''''''''''/
''/ initialize
''/ 초기화
'''''''''''''''''''''''''/
call initCodecs
'''''''''''''''''''''''''/
''/ Testing code
''/ 테스트 코딩
'''''''''''''''''''''''''/
' dim inp, encode
' inp = request.QueryString("input")
' encode = base64Encode(inp)
' response.write "Encoded value = " & encode & nl
' response.write "Decoded value = " & base64Decode(encode) & nl
%>
'개발' 카테고리의 다른 글
llama2, ollama, LLM on device 간단 리뷰, 장단점 (0) | 2024.02.05 |
---|---|
One-to-many 관계에서 누가 주인 테이블이 될까 (chat gpt) (0) | 2023.01.29 |
Classic ASP 개발환경 세팅 (include, import, 디버깅) (3) | 2022.06.17 |
DFS, BFS를 아무리 공부해도 이해되지 않을 때 (0) | 2020.08.11 |
리플릿(Repl.it)에서 .replit 파일 RUN 설정하는 방법!!! (4) | 2020.04.21 |