제어 등록은 @Register 지시문에 의해 수행되며, 이를 통해 특수 구문(선언적 사용자 정의 서버 제어 구문)을 사용하여 페이지의 HTML 코드에서 사용자 제어 및 서버 제어를 사용할 수 있습니다. 이러한 지시문에 대한 분석을 기반으로 페이지 파서는 태그를 지정된 유형과 연관시킬 수 있으며 페이지를 생성할 때 이미 사용자 정의 유형의 컨테이너로 제어를 포함할 수 있습니다(페이지 제어 트리의 분기).
지시문은 선언된 태그의 첫 번째 사용보다 먼저 사용해야 하며 더 자주 페이지 시작 부분에 배치되고 여러 컨트롤을 등록하는 경우 모듈식 구조의 사이트에서 이러한 선언의 수가 많은 줄을 차지할 수 있습니다. . 컨트롤의 위치를 변경할 때 등록된 모든 페이지와 사용자 컨트롤의 코드를 변경해야 하는 행을 찾아야 하므로 다소 불편합니다.
이 문서에서는 컨트롤 등록을 단순화하는 방법을 설명합니다.
등록 지시문에 대해 모든 @ Register 지시문을 수집하는 일반 텍스트 파일을 사용합니다. 가상 경로를 사용하여 사용자 컨트롤을 선언할 수 있고 서버 컨트롤에 대해 네임스페이스만 지정되므로 이 파일에서 필요한 모든 링크를 수집할 수 있으며 ascx 파일에 대한 링크는 프로젝트의 모든 폴더에 대해 정확합니다. 다음은 프로젝트 중 하나에서 이 파일의 모양입니다.
<%@ Register TagPrefix="ch" Namespace="ControlsSharp.HtmlControls" Assembly="ControlsSharp"%> <%@ Register TagPrefix="cw" Namespace="ControlsSharp.WebControls" Assembly="ControlsSharp"%> <%@ Register TagPrefix="c" Namespace="ControlsSharp.CustomControls" Assembly="ControlsSharp"%> <%@ Register TagPrefix="b" Namespace="ControlsBasic.CustomControls" Assembly="ControlsBasic"%> <%@ Register TagPrefix="cu" TagName="bottommenu" Src="~/UserControls/Menu/cu_menu_bottom.ascx" %> <%@ Register TagPrefix="cu" TagName="leftmenu" Src="~/UserControls/Menu/cu_menu_left.ascx" %> <%@ Register TagPrefix="cu" TagName="topmenu" Src="~/UserControls/Menu/cu_menu_top.ascx" %> |
파일 이름을 register.inc로 지정하고 웹 프로젝트의 /inc 폴더에 넣습니다.
이 파일에는 필요한 모든 링크가 포함되어 있으며 사용자 또는 서버 컨트롤의 등록을 추가하거나 변경할 것입니다.
이제 생성된 파일이 페이지 코드에 어떻게든 포함되어야 합니다. SSI(서버 측 포함) #include 지시문을 사용하여 이 작업을 수행합니다. 이 지시문을 사용하면 페이지 코드에 정적 및 동적 파일을 포함하여 IIS 매핑을 기반으로 처리할 수 있습니다. asp 또는 aspx 파일을 소스로 지정하면 파일이 적절한 프로세스에 의해 처리되고 이 처리 결과가 출력 페이지에 복사됩니다. ASP에서 #include 지시문은 사이트의 모듈화를 위해 매우 널리 사용되었으며 허용되었습니다. ASP.NET의 출현으로 사용자 컨트롤을 사용하는 것과 같은 다른 방법으로 이 작업을 수행하는 것이 더 편리해졌습니다. ASP.NET의 향후 버전은 마스터 페이지를 사용하여 모듈성을 구현할 것입니다. 일반적으로 #include 지시문은 의미를 잃었고 주로 이전 버전과의 호환성을 위해 유지되었으며 ASP 프로젝트를 .Net으로 마이그레이션하는 작업을 단순화했습니다.
간단한 텍스트 파일이 있으므로 처리가 수행되지 않으며 동적 콘텐츠가 실행되기 전에 파일의 전체 콘텐츠가 페이지 코드에 복사됩니다. 저것들. 예를 들어 register.inc 파일을 페이지 상단에 추가하는 것은 모든 @Register 지시문을 거기에 작성하는 것과 거의 같습니다.
파일의 물리적 위치에 의존하지 않기 위해 가상 경로 구문을 다시 사용하고 aspx 파일 코드에 다음 줄을 추가합니다.
모든 것이 작동하는지 확인하고 작동하지 않는 경우 잘못된 경로를 수정하십시오.
한 번 더 작업을 수행해야 합니다. 이제 브라우저의 링크에서 /inc/register.inc 파일을 얻으려고 하면 쉽게 할 수 있습니다. IIS는 사이트의 물리적 구조에 대한 경로를 포함하고 있지만 완전히 무료인 공격자의 손뿐 아니라 귀하의 손에도 이를 제공합니다.
이러한 일이 발생하지 않도록 하기 위해 동기 HttpForbiddenHandler 핸들러의 기능을 사용하여 특정 유형의 파일이 사용자의 요청에 따라 발행되지 않도록 보호할 수 있습니다. 이 접근 방식은 편리하며 예를 들어 프로젝트에서 사용되는 MS Access 데이터베이스 파일을 보호하는 데 자주 사용됩니다. 이 처리기를 사용하여 확장명이 *.inc인 파일을 보호하려면 이러한 파일이 ASP.NET 프로세스에서 처리될 것임을 IIS에 알려야 합니다. 즉, 이 유형의 파일에 매핑하도록 IIS를 구성해야 합니다.
IIS의 구성 프로세스에 대한 자세한 설명은 HOW TO: ASP.NET을 사용하여 파일 형식 보호(http://support.microsoft.com/kb/815152/EN-US/)를 참조하십시오. *.inc 파일에 대해서만 매핑을 생성해야 합니다. 여기에 설명된 단계를 완료하면 이 확장자를 가진 파일에 대한 모든 요청이 ASP.NET 프로세스에서 처리되며 web.config 파일을 다음과 같이 편집해야 합니다.
|
이제 직접 링크를 통해 /inc/register.inc 파일을 가져오려고 하면 사용자에게 오류 B가 표시됩니다.
예를 들어 aspnet_isapi.dll을 등록하지 않으려면 공급자가 이를 원하지 않으면 SSI 기능을 사용하여 모든 유형의 파일을 지정하고 기본적으로 IIS에 이미 매핑된 유형 중 하나의 확장명을 사용하여 치트할 수 있습니다. @Register 지시문이 있는 파일의 경우. *.cs 또는 *.vb 확장자가 이를 위해 편리합니다. 이러한 파일에는 소스 코드가 포함되어 있으며 일반적으로 서버에 복사되지 않습니다. 갑자기 실수하여 복사한 경우 브라우저의 요청에 따라 이를 가져올 수 없습니다. 이 작업을 시도하면 사용자에게 오류 B가 표시됩니다. 이것은 IIS의 매핑이 기본적으로 구성되어 있기 때문에 발생합니다. 이 유형의 파일에 대해 해당 확장자는 이미 섹션에 등록되어 있습니다.
결론
설명된 방법을 사용하면 전체 프로젝트에 대해 한 곳에서 컨트롤을 등록할 수 있습니다. 이 파일의 후속 수정은 일반적인 방식으로 수행해야 하는 경우보다 적은 노력이 필요합니다. 삽입한 파일 내부에 SSI #include를 사용해 보십시오. 이렇게 하면 일종의 계층 구조 및 상속을 구성할 수 있으므로 대규모 프로젝트에 편리할 수 있습니다.
방명록이란?
물론 여기에서는 가장 대표적인 방명록에 대해 이야기하고 있습니다. 우선, 이것은 사용자에게 텍스트를 입력하고, 특정 사이트에 대한 평가를 선택하고, 자신의 데이터(이름, 이메일, http 등)를 지정하는 기능을 제공하는 시스템입니다. 또한 탐색 기능과 함께 다양한 사용자가 입력한 데이터를 표시하고 메시지 작성자에게 이메일을 보낼 수 있는 시스템입니다. 다른 설정과 규범 어휘의 통제에 따른 변형도 있습니다.
우리는 무엇이 필요한가
물론 독자가 ASP 및 SQL 프로그래밍의 기본 사항에 익숙하다고 가정합니다. 또한 Microsoft SQL Server 7.0 또는 2000, HTML 또는 텍스트 편집기(Macromedia Dreamweaver UltraDev 4.0 사용 권장) 및 약간의 인내심이 필요합니다.
데이터베이스 생성 및 준비
사용자가 입력한 데이터의 저장을 구성하려면 사용자 이름, 이메일 주소, 거주 국가, 사이트 주소, IP 주소, 사이트 사용자 평가 값을 5점 척도로 저장하기 위한 필드를 만들 수 있는 하나의 테이블이 필요합니다. 등.:
시스템을 기존 사이트에 쉽게 통합하려면 색상 및 기타 설정을 저장할 다른 테이블을 계획하는 것이 좋습니다. 이렇게 하면 방명록 응용 프로그램 모듈의 소스 텍스트에서 해당 매개변수를 변경하지 않고 나중에 지정된 설정을 변경할 수 있습니다.
- 데이터 원본 ODBC 구성기 - 시작->설정->제어판->관리 도구->데이터 원본 ODBC를 실행합니다.
- 시스템 DSN 탭으로 이동하고 추가…를 클릭하여 새 데이터 소스를 생성합니다.
- 나타나는 드라이버 목록에서 데이터베이스 드라이버 - Microsoft SQL Server를 선택하고 다음을 클릭합니다.
- 데이터 소스 이름 행에 데이터베이스 이름을 지정하십시오(설명된 예에서 Gustbook은 향후 참조할 이름입니다).
- 서버 라인에서 연결할 서버를 지정하고 다음을 클릭합니다.
- 인증 모드 선택 With SQL Server…, 사용자 이름과 암호를 설정하여 SQL 서버에 연결합니다. 서버 통신 프로토콜(클라이언트 구성 - TCP/IP 버튼)을 정의하고 다음을 두 번 클릭한 후 마침을 클릭합니다.
- 취한 조치에 대한 통계를 볼 수 있으며 데이터 소스 테스트 버튼을 사용하여 데이터 소스를 확인할 수 있습니다.
- 결과적으로 시스템의 데이터 소스 목록에 줄이 표시됩니다.
데이터베이스가 준비되었으므로 바로 방명록 작성을 진행할 수 있습니다.
기성품 웹사이트에 시스템 통합
방명록 자체가 말이 안 되는 게 분명하다. 스스로 판단하세요: 독자의 의견을 수집하기 위해 설계된 사이트가 필요한 사람. 결국 어떤 것에 대한 의견을 수렴하기 위해서는 먼저 이것을 그들의 판단에 제시해야 합니다. 따라서 기성 사이트에 시스템을 임베딩하는 단순화와 관련된 문제에 특별한주의를 기울일 필요가 있습니다.
특히, 특정 사이트의 특성에 맞게 시스템을 쉽게 사용자 정의할 수 있도록 하기 위해 (위에서 언급한 바와 같이) 귀하의 사이트에 특정한 특정 값을 입력하기 위해 이러한 모든 기본 설정을 저장하는 특수 테이블을 만드는 것이 좋습니다. 그것에. 이 접근 방식의 명백한 이점은 시스템을 이미 완성된 사이트에 포함하기 위해 모듈의 소스 코드를 변경할 필요가 없으며 해당 데이터베이스 테이블의 설정만 변경하면 된다는 것입니다.
다음과 같은 테이블 구현의 예를 상상해 보십시오.
보시다시피 시스템 설정 모드에 접근하기 위한 이름과 비밀번호, 사용자 메시지의 주요 배경색, 상단 및 하단 프레임에 대한 정보를 저장하는 필드가 있습니다(각각 Mid_Color, Top_Color, Bot_Color 필드) , 사용자 데이터 입력에 사용되는 양식 헤더의 색상 및 크기(각각 Form_Color 및 FormTitleSize 필드), 메시지 자체 텍스트의 색상, 크기 및 글꼴 스타일, 정보 필드 및 방명록 페이지 자체(각각 MessageFontColor, MessageFontSize, MessageFontFace, InfoFontColor, InfoFontSize, InfoFontFace, PageFontColor, PageFontSize 및 PageFontFace), 필드를 전환하여 담당자에게 전자 메일로 새 메시지 알림을 자동으로 보낼 수 있도록 합니다(예: 관리자 또는 사이트 관리자), 담당자의 이메일 주소 저장 필드, 사용자가 남긴 메시지에 대한 감사 메시지 텍스트, 목록 포함 불가 x 단어 및 해당 필터링 모드에 대한 스위치(후자가 활성화된 경우 잘못된 단어 목록의 단어는 메시지 텍스트에서 자동으로 별표로 대체되므로 사이트 텍스트의 어휘 규범성을 제어할 수 있습니다. 운동).
방명록 통합 시스템의 개발은 우리가 고려한 모든 매개변수(관리 테이블의 필드)를 설정하기 위한 웹 인터페이스의 구성을 의미합니다.
시스템을 순수한 형태로 이미 완성된 사이트에 통합하면 예를 들어 특정 사이트에서 방명록을 일시적으로 비활성화해야 하는 경우 소스 텍스트의 인식과 미래에 약간의 어려움이 발생할 수 있습니다. 따라서 우리는 완성된 사이트에 통합이 어렵지 않은 방식으로 시스템을 개발하려고 노력할 것입니다. 이를 위해서는 시스템의 독립적인 모듈을 구성하여 필요한 경우 메인 사이트의 텍스트에 포함시켜야 합니다. 예를 들어 웹사이트 페이지의 텍스트는 다음과 같을 수 있습니다.