순수 HTML을 사용한 범용 데이터 관리 및 제공. 그러나 데이터를 수집하려면 데이터 저장소가 필요합니다. 데이터베이스 서버 사용 시 발생하는 많은 문제를 방지하기 위해 이 데이터를 XML로 수집할 수 있습니다. 우리 프로젝트의 기본 구조는 다음과 같습니다.
<사용자>
<이름/>
<성 이름/>
<mi/>
</user>
처음에는 데이터를 이름, 성, 중간 이름으로 제한했습니다. 이 페이지의 기본 아이디어는 이 페이지에서 사용자 정보를 얻는다는 것입니다. 사용자 정보 요구 사항이 충족되면 프로세스는 다음 논리적 수집 단계로 이동해야 합니다. 작업을 단순하게 유지하기 위해 사용자 기능을 ASP 클래스로 래핑하겠습니다.
함수 병합(vVar, vAlt)
vVal = "" 또는 VarType(vVal) = 1 또는 VarType(vVal) = 0인 경우
병합 = vAlt
또 다른
병합 = vVal
종료 조건
종료 함수
클래스 CUser
비공개 m_SQL, m_DOM
공개 속성 DOM 가져오기()
DOM = m_DOM으로 설정
끝 속성
Public Sub saveUser()
m_SQL.save "save_user", m_DOM
End Sub
공용 함수 verify()
m_DOM.loadXML "<root>" & m_SQL.validateUser(m_DOM) & "</root>"
m_DOM.selectSingleNode("//error")가 아무것도 아닌 경우
검증=거짓
또 다른
검증=참
종료 조건
종료 함수
Private Sub CollectData(dom, oCollection)
Dim nItem, 노드, parent_node, n, sKey
nItem = 1의 경우 oCollection.Count로
sKey = oCollection.Key(nItem)
parent_node = dom.selectSingleNode("//" & sKey & "s") 설정
parent_node가 아니면 아무것도 아닌 경우
n = 1인 경우 oCollection(sKey).Count로
노드 설정 = parent_node.selectSingleNode(sKey & _
"[문자열(.)='" &
oCollection(sKey)(n) & "']")
노드가 아무것도 아닌 경우
노드 설정 = dom.createNode(1, sKey, "")
노드 설정 = parent_node.appendChild(노드)
종료 조건
node.text = Coalesce(oCollection(sKey)(n), "")
다음
또 다른
노드 설정 = dom.selectSingleNode("//" & sKey)
노드가 아닌 경우 아무것도 아닌 경우 _
node.text = Coalesce(oCollection(sKey), "")
종료 조건
다음
End Sub
Private Sub Class_Initialize()
m_SQL = 새 CSQL 설정
m_DOM = Server.CreateObject("MSXML2.DOMDocument") 설정
m_DOM.async = 거짓
VarType(Request ("txtUserXML")) = 0 또는 Request ("txtUserXML") = ""인 경우
m_DOM.loadXML 요청("txtUserXML")
또 다른
m_DOM.load "<root>" & Server.MapPath("user.xml") & "</root>"
종료 조건
CollectData m_DOM, Request.Form
CollectData m_DOM, Request.QueryString
End Sub
Private Sub Class_Terminate()
m_SQL = 없음으로 설정
m_DOM = 없음으로 설정
End Sub
End 클래스
클래스 CSQL
비공개 m_DAL, m_Stream
공개 함수 save(sStoredProc, oDOM)
'adVarChar = 200
m_DAL.RunSP 배열(m_DAL.mp("@xml_param", 200, 8000, oDOM.xml))
종료 함수
공용 함수 verifyUser(oDOM)
m_Stream = m_DAL.RunSPReturnStream("validate_user", Array(_) 설정
m_DAL.mp("@xml_param", 200, 8000, oDOM.xml)))
verifyUser = m_Stream.ReadText(-1)
m_Stream.Close
종료 함수
Private Sub Class_Initialize()
m_DAL = Server.CreateObject("MyPkg.MyDAL") 설정
m_DAL.GetConnection "일부 연결 문자열"
m_Stream = Server.CreateObject("ADODB.Stream") 설정
End Sub
Private Sub Class_Terminate()
m_DAL = 없음 설정
m_Stream = 없음으로 설정
종료 하위
종료 클래스
CSQL 클래스는 데이터 액세스 계층(m_DAL) 구성 요소 MyPkg.MyDAL을 기반으로 구축되었습니다. 이 구성 요소는 MSDN에서 찾을 수 있는 Fitch 및 Mather DAL 구성 요소를 기반으로 구축되었습니다. 이런 방식으로 SQL Server와 코드 사이에 브리지를 구축합니다.
CUser 개체가 초기화되면 요청 데이터를 수집하고 CollectData() 하위 함수를 사용하여 수집된 데이터를 UserDOM의 해당 노드에 넣습니다. (코드 자체는 이해하기 쉽기 때문에 설명하지 않겠습니다.) 데이터를 수집한 후(또는 수집하지 않은) XSL을 사용하여 데이터 콘텐츠를 레이아웃으로 변환합니다.
<?xml 버전="1.0"?>
<xsl:스타일시트 xmlns:xsl=http://www.w3.org/1999/XSL/Transform
버전="1.0">
<xsl:output method="html"/>
<xsl:template match="/">
<xsl:if test="//오류">
<font color="red">*빨간색으로 표시된 정보는 필수입니다.<br/></font>
</xsl:if>
<xsl:적용-템플릿 선택="//사용자"/>
</xsl:template>
<xsl:template match="사용자">
<글꼴>
<xsl:속성 이름="색상">
<xsl:선택>
<xsl:when test="//error[.='first name']">빨간색</xsl:when>
<xsl:그렇지 않으면>검은색</xsl:그렇지 않으면>
</xsl:선택>
</xsl:속성>
이름:
</font>
<input type="text" name="first_name">
<xsl:속성 이름="값"><xsl:값-의
select="first_name"/></xsl:속성>
</input><br/>
<글꼴>
<xsl:속성 이름="색상">
<xsl:선택>
<xsl:when test="//error[.='mi']">빨간색</xsl:when>
<xsl:그렇지 않으면>검은색</xsl:그렇지 않으면>
</xsl:선택>
</xsl:속성>
미:
</font>
<입력 유형="텍스트" 이름="mi">
<xsl:속성 이름="값"><xsl:value-of select="mi"/></xsl:속성>
</input><br/>
<글꼴>
<xsl:속성 이름="색상">
<xsl:선택>
<xsl:when test="//error[.='last_name']">빨간색</xsl:when>
<xsl:그렇지 않으면>검은색</xsl:그렇지 않으면>
</xsl:선택>
</xsl:속성>
성:
</font>
<input type="text" name="last_name">
<xsl:속성 이름="값"><xsl:값-의
select="last_name"/></xsl:속성>
</input><br/>
</xsl:template>
</xsl:stylesheet>
이 스타일시트는 콘텐츠를 레이아웃으로 변환합니다. 오류 검사는 중요하며 저장 프로시저는 처리가 필요한지 여부를 결정하여 데이터를 검사합니다. 비워둘 수 없지만 데이터가 채워지지 않은 각 필드에 대해 "오류" 노드를 반환합니다. 이 XML의 출력은 대략 다음과 같습니다:
.</user><errors><error>first_name</errors>.
이 스타일시트는 콘텐츠를 레이아웃으로 변환합니다. 오류 검사는 중요하며 저장 프로시저는 처리가 필요한지 여부를 결정하여 데이터를 검사합니다. 비워둘 수 없지만 데이터가 채워지지 않은 각 필드에 대해 "오류" 노드를 반환합니다. 이 XML의 출력은 대략 다음과 같습니다.
.</user><errors><error>first_name</error>
. 생성된 출력은 빨간색이 됩니다. 이전 항목을 모두 결합하려면 다음 ASP가 필요합니다.
<%@ 언어=VBScript %>
<%
옵션 명시적
희미한 사용자
oUser = NewCUser 설정
oUser.validate()이면
oUser = 없음으로 설정
Server.Transfer "NextPage.asp"
종료 조건
%>
<html>
<본문>
<form method="POST" action="GetUser.asp" name="thisForm" id="thisForm">
<%
응답.쓰기 xslTransform(oUser.DOM, "user.xsl")
%>
<input type="hidden" name="txtUserXML" id="txtUserXML"
value="<%=oUser.DOM.xml%>">
<입력 유형="제출" 값="제출">
</form>
</body>
</html>
<%
oUser = Nothing
함수 xslTransform(vXML, XSLFileName)
설정
희미한 m_xml, m_xsl
VarType(vXML) = 8인 경우
m_xml = m_dom 설정
m_xml.loadXML vXML
ElseIf VarType(vXML) = 9 그러면
m_xml = vXML로 설정
종료 조건
m_xml.parseError.errorCode <> 0이면 _
Err.Raise vbObjectError, "XMLTransform(...)", m_xml.parseError.reason
m_xsl = Server.CreateObject("MSXML2.DOMDocument") 설정
m_xsl.async = 거짓
m_xsl.load 서버.MapPath(XSL파일 이름)
m_xsl.parseError.errorCode <> 0이면 _
Err.Raise vbObjectError, "XMLTransform(...)", m_xsl.parseError.reason
xslTransform = m_xml.transformNode(m_xsl)
m_xsl = 없음 설정
기능 종료
%>
<!--#include file="CUser.asp"-->
ASP 코드는 CUser 개체를 만들고 데이터가 있으면 데이터를 채웁니다. 그런 다음 결과 HTML은 CUser의 DOM을 사용하는 XSL 변환을 통해 생성됩니다. 변환은 xslTransform이라는 함수로 래핑됩니다. 또한 결과 CUser DOM을 숨겨진 <INPUT> 요소에 저장해야 합니다. 또는 CUser DOM을 세션 변수에 저장하고 초기화 중에 꺼낼 수 있습니다.
이 페이지를 완료한 후 이전 스켈레톤 코드를 기반으로 다른 페이지를 생성할 수 있습니다. 이제 데이터 수집을 위한 복사하여 붙여넣기 시나리오를 만들었습니다. 이 솔루션의 가장 아름다운 부분은 모든 출력이 브라우저별 속성이나 스타일시트 없이 순수한 HTML이라는 것입니다. 기능이 클래스로 래핑되므로 XSLT를 사용하여 레이아웃을 생성할 수 있으며 코드가 매우 빠르게 실행됩니다.
------------------------------------- ----------------------------------
이 기사의 저자: Phillip Perkins는 Ajilon Consulting의 계약자입니다. 그의 경험은 기계 제어, 클라이언트/서버부터 인트라넷 애플리케이션까지 다양합니다.