ASP Syntax

ASP는 VBScript를 사용함.

ASP의 기본 스크립팅 언어는 VBScript임.
스크립팅 언어는 경량 프로그래밍 언어임.
VBScript는 MS Visual Basic의 라이트 버젼임.

 

ASP 파일

ASP 파일은 일반적인 HTML 파일일 수 있음.
또한 ASP 파일에는 서버 스크립트도 포함될 수 있음.
<% %>로 둘러 싸인 스크립트는 서버에서 실행됨.
Response.Write() 메소드는 ASP에 의해 HTML로 출력됨.
다음 코드는 "Hello World"를 출력함.

  <!DOCTYPE html>
  <html>
  <head></head>
  <body>
    <%
      response.write("Hello World!")
    %>
  </body>
  </html>

VBScript는 대소문자를 구분하지 않음.
Response.Write()response.write()와 같음.

 

ASP에서 JavaScript 사용

JS를 웹페이지의 스크립팅 언어로 설정하려면 페이지 상단에 언어 사양을 삽입해야 함.

  <%@ language="javascript" %>
  <!DOCTYPE html>
  <html>
  <head></head>
  <body>
    <%
      Response.Write("Hello World!")
    %>
  </body>
  </html>

javascript는 Response.Write()의 대소문자를 구분함.
앞으로의 ASP 튜토리얼은 VBScript를 사용함.

 

그 외

EX 03

Response.Write()=로 대치될 수 있음.

  <%="reponse.write() can replaced by `=`"%>

EX 04

HTML 태그역시 출력 가능함.

  <%="<h2>Using HTML tags to format the TEXT is available, FUCK!</h2>"%>

EX 04

HTML 태그 속성역시 출력 가능.

  <%="<p style='color: #0000FF;'>This text is styled.</p>"%>

 

 


VBScript 예제와 레퍼런스

 


출처 : https://www.w3schools.com/asp/asp_syntax.asp

728x90
반응형

'WEB > ASP' 카테고리의 다른 글

[ASP] 조건문  (0) 2021.08.26
[ASP] Procedure  (0) 2021.08.26
[ASP] 변수  (0) 2021.08.26
[ASP] Intro  (0) 2021.08.25
[ASP] Classic ASP 입문  (1) 2021.08.25

ASP Intro

ASP는 동적 웹 페이지를 만들기 위한 오래된 기술임.
ASP는 PHP 처럼 웹 서버에서 script를 실행하기 위한 기술임.

Show Example

  • ex :
      <!DOCTYPE html>
      <html>
      <body>
        <%
          response.write("My First ASP Script!")
        %>
      </body>
      </html>

ASP 란

  • Active Server Pages의 약자
  • MS의 기술
  • 웹 서버 내부에서 실행되는 프로그램

ASP 파일이란

  • .asp 확장자를 갖는 파일
  • HTML 파일과 비슷
  • HTML 외에 서버 스크립트를 포함하고 있음.
  • ASP 파일의 서버 스크립트는 서버에서 실행 됨.

ASP가 할 수 있는 것

  • 웹 페이지 편집, 변경, 콘텐츠 추가 또는 사용자 지정
  • HTML form에서 제출된 사용자 쿼리 또는 데이터에 응답
  • DB 또는 기타 서버 데이터에 엑세스하고 결과를 응답
  • 브라우져에서 ASP 코드를 볼 수 없으므로 웹 보안 제공
  • 빠르고 단순함

작동 원리

일반 HTML 파일을 요청하면 서버는 파일을 변환,
브라우져가 ASP 파일을 요청하면 ASP 파일을 읽고 파일에서 서버 스크립트를 실행하는 ASP 엔진에 요청을 전달.
ASP파일은 HTML로 응답됨.

reference and example

W3School에서 ASP의 기본 제공 개체 및 구성요소, 해당 속성 및 메소드에 대한 ASP reference를 제공함.
ASP 스크립트는 서버에서 실행되기 때문에 브라우져에서 ASP 코드를 볼 수 없음.
W3School에서 ASP 예제를 살펴볼 수 있음.

 

 

출처 : https://www.w3schools.com/asp/asp_introduction.asp

 

728x90
반응형

'WEB > ASP' 카테고리의 다른 글

[ASP] 조건문  (0) 2021.08.26
[ASP] Procedure  (0) 2021.08.26
[ASP] 변수  (0) 2021.08.26
[ASP] 문법  (0) 2021.08.25
[ASP] Classic ASP 입문  (1) 2021.08.25

Classic ASP 입문

ASP -> Spring 프로젝트에 투입되게 되었다.
프로젝트 진행 전 대략적으로 classic asp를 학습한다.
w3school의 튜토리얼을 대충 살펴보며,
개발 환경 셋팅과 기초 문법, DB 연결 프로젝트 구조 그리고 간단한 게시판 까지만 만들어 보도록 한다.


ASP and ASP.NET Tutorials

ASP는 Active Server Pages의 약자.
ASP 는 웹페이지 구축하기 위한 개발 프레임워크임.

ASP는 다양한 개발 모델을 지원함 :

  • classic asp
  • ASP.NET Web Form
  • ASP.NET MVC
  • ASP.NET WebPage
  • ASP.NET API
  • ASP.NET Core

ASP 기술

ASP와 ASP.NET은 서버사이드 기술임.
두 기술 모두 인터넷 서버에서 컴퓨터 코드를 실행할 수 있도록 함.
브라우져가 ASP / ASP.NET 파일을 요청하면 ASP 엔진은 파일을 읽고 파일의 코드를 실행한 다음 결과를 브라우져에 반환함.


classic ASP - Active Server Pages

ASP (Classic ASP 라고도 함)는 MS의 첫 서버사이트 스크립팅 언어로 도입됨.
클래식 ASP 페이지는 파일 확장자가 .asp 이고 일반적으로 VBScript로 작성됨.

 


기타 ASP 기술

  • ASP.NET :
    ASP.NET은 Classic ASP의 후속으로 2002년에 나옴.
    .aspx 확장자를 사용하며 일반적으로 C# 언어를 사용함.
    ASP.NET Core를 위해 ASP.NET 4 이후로 업데이트는 없음.
  • ASP.NET Web Pages :
    ASP.NET Web Pages는 SPA임.
    PHP와 Classic ASP와 매우 유사함.
    ASP.NET Core에 기본 스펙으로 들어가고 있음.
  • ASP.NET MVC :
    MVC 패턴의 ASP.NET
    ASP.NET Core에 기본 스펙으로 들어가고 있음.
  • ASP.NET Web API :
    API 어플리케이션 모델임.
    ASP.NET Core에 기본 스펙으로 들어가고 있음.
  • ASP.NET Web Form :
    이벤트 기반 응용 프로그램 모델임.
  • ASP.NET Core :
    2016년 출시.
    ASP.NET MVC, Web API, Web Pages를 하나의 프레임워크로 병합함.

출처 : https://www.w3schools.com/asp

728x90
반응형

'WEB > ASP' 카테고리의 다른 글

[ASP] 조건문  (0) 2021.08.26
[ASP] Procedure  (0) 2021.08.26
[ASP] 변수  (0) 2021.08.26
[ASP] 문법  (0) 2021.08.25
[ASP] Intro  (0) 2021.08.25

세션 유져 카운터 클래스

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SessionUserCounter implements HttpSessionListener {
  private static Logger logger = LoggerFactory.getLogger(SessionUserCounter.class);
  
  //  총 접속자 수
  public static int count;
  
  public static int getCount() {
    return count;
  }

  @Override
  public void sessionCreated(HttpSessionEvent event) {
    //  세션이 생성될 때 세션객체를 꺼내옴.
    HttpSession session = event.getSession();
    count ++;
    logger.error("\n\tSESSION CREATED : {}, TOTAL ACCESSER : {}", session.getId(), count);
  }

  @Override
  public void sessionDestroyed(HttpSessionEvent event) {
    // 세션이 소멸될 때
    count--;
    if( count < 0 ) count = 0;
    
    HttpSession session = event.getSession();
    logger.error("\n\tSESSION DESTROYED : {}, TOTAL ACCESSER : {}", session.getId(), count);
  }
  
}

 

web.xml 설정

  <listener>
    <listener-class>{패키지 경로}.SessionUserCounter</listener-class>
  </listener>

 

Java 소스에서 클래스를 불러와서 사용해도 되고, JSP에서 class를 import 해서 사용해도 된다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" trimDirectiveWhitespaces="true"
	import ="{패키지 경로}.SessionUserCounter"
%>
현재 접속자 수 : <%=SessionUserCounter.getCount()%>

 

 

스프링 허접이라 Lazy-Init SingleTon Pattern을 사용해야 하는지, 아니면 Listener에 등록된 객체이기 때문에 필요 없는지는 잘 모르겠다.

728x90
반응형

egovframework의 EgovHttpSessionBindingListener 클래스와 EgovMultiLoginPreventor 클래스로 중복 로그인 방지를 구현하던 중,
java.lang.illegalargumentexception setattribute non-serializable attribute ***에러가 발생했다.

session에 저장하기 위해선 해당 클래스 Serializable 클래스를 상속해 줘야 하는데, VO는 이미 상속이 되어 있었다.

VO 말고도 EgovHttpSessionBindingListener, EgovMultiLoginPreventor역시 Serializable 클래스를 상속해줘야 한다.

egov도 버젼 코드에 실수가 존재하나보다.

 

EgovHttpSessionBindingListener.java

package egovframework.com.utl.slm;

import java.io.Serializable;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Class Name : EgovHttpSessionBindingListener.java
 * @Description : 중복 로그인 방지를 위해 사용자의 로그인 아이디와 세션을 제어하는 구현 클래스
 * @Modification Information
 *
 *               수정일 수정자 수정내용 ------- ------- ------------------- 2014.09.30 표준프레임워크 최초생성
 * @author YJ Kwon
 * @since 2014.09.30
 * @version 3.5
 */
public class EgovHttpSessionBindingListener implements HttpSessionBindingListener, Serializable {

  private static final long serialVersionUID = -6535453381287200501L;
  private static Logger logger = LoggerFactory.getLogger(EgovMultiLoginPreventor.class);

  /**
   * 사용자의 로그인 세션에 EgovHttpSessionBindingListener가 바인딩될 때 자동 호출되는 메소드로, 사용자 세션이 이미 존재하는지를 검사하여 하나의
   * 어플리케이션 내에서 하나의 세션만 유지되도록 한다
   */
  public void valueBound(HttpSessionBindingEvent event) {
    logger.error("\n\t!! VALUE BOUND !!");
    if (EgovMultiLoginPreventor.findByLoginId(event.getName())) {
      EgovMultiLoginPreventor.invalidateByLoginId(event.getName());
    }

    EgovMultiLoginPreventor.loginUsers.put(event.getName(), event.getSession());
  }


  /**
   * 
   * 로그아웃 혹은 세션타임아웃 설정에 따라 사용자 세션으로부터 EgovHttpSessionBindingListener가 제거될 때 자동 호출되는 메소드로, 사용자의 로그인
   * 아이디에 해당하는 세션을 ConcurrentHashMap에서 모두 제거한다
   */
  @Override
  public void valueUnbound(HttpSessionBindingEvent event) {
    logger.error("\n\t!! VALUE UNBOUND !!");
    EgovMultiLoginPreventor.loginUsers.remove(event.getName(), event.getSession());
  }

}

 

 

EgovMultiLoginPreventor.java

package egovframework.com.utl.slm;

import java.io.Serializable;
import java.util.Enumeration;
import java.util.concurrent.ConcurrentHashMap;

import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Class Name : EgovMultiLoginPreventor.java
 * @Description : 중복 로그인 방지를 위해 사용자의 로그인 아이디와 세션 아이디를 관리하는 구현 클래스
 * @Modification Information
 *
 *               수정일 수정자 수정내용 ------- ------- ------------------- 2014.09.30 표준프레임워크 최초생성
 * @author YJ Kwon
 * @since 2014.09.30
 * @version 3.5
 */
public class EgovMultiLoginPreventor implements Serializable {

  private static final long serialVersionUID = 4012190701164146206L;

  private static Logger logger = LoggerFactory.getLogger(EgovMultiLoginPreventor.class);

  public static ConcurrentHashMap<String, HttpSession> loginUsers =
      new ConcurrentHashMap<String, HttpSession>();

  /**
   * 사용자의 로그인 아이디로 생성된 세션이 있는지를 확인한다
   */
  public static boolean findByLoginId(String loginId) {
    logger.error("\n\t>> loginUsers id : {} <<", loginId);
    return loginUsers.containsKey(loginId);
  }


  /**
   * 사용자의 로그인 아이디로 이미 존재하는 세션을 무효화한다
   */
  public static void invalidateByLoginId(String loginId) {
    Enumeration<String> e = loginUsers.keys();

    while (e.hasMoreElements()) {
      String key = (String) e.nextElement();

      logger.error("\n\t>> session key : {} <<", e.toString());
      if (key.equals(loginId)) {
        logger.error("\n\t:: SESSION INVALIDATE {} <<", loginId);
        loginUsers.get(key).invalidate();
      }
    }
  }

}
728x90
반응형

Linux에서 라인 수 카운트 하기.

  wc -l

해당 명령을 |와 함께 사용하면 됨.

EX

localhost_access_log.2021-06-22.txt 파일의 총 라인 수 카운트

  $ cat localhost_access_log.2021-06-22.txt |  wc -l
  90916

localhost_access_log.2021-06-22.txt 파일에서 특정 문자열이 포함된 라인 수 카운트

  # cat localhost_access_log.2021-06-22.txt | grep contractList.do | wc -l
  82
728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Raspberry PI] 초기 셋팅  (0) 2022.03.07
[Linux] There are stopped jobs  (0) 2021.05.28
[Linux] 인터넷 속도 확인  (0) 2021.05.28
[Linux] top  (0) 2021.05.06
[Linux] 리눅스 서버 60초 안에 상황 파악하기  (0) 2021.05.06

페이지 리로드 하는 방법이 필요해서 찾아보다 기록할 할 필요성있는 문제인거 같아서 남겨본다.

일반적인 js로 페이지 리로드 하기

일반적인 html을 리로드 할 때는 location.reload(); 하나면 된다.

frameset reload 하기

삽질은 여기서 시작 됬다.

    <!DOCTYPE HTML>
    <html>
      <head>생략</head>
      <body>
        <frameset>
            <frame name="top" src="~~"/>
            <frame name="sidebar" src="~~"/>
              <frame name="content" src="~~"/>
              <frame name="footer" src="~~"/>
        </frameset>
      </body>
    </html>

frameset 으로 된 페이지의 리로드는 location.reload()로는 가능하지 않다.
각각의 프레임당 location이 다르기 때문.
사실 이 명령도 DOM 구조를 파악하면 쉬운 문제인데, parent.frames.location.reload(); 명령이면 모든 프레임이 리로드 된다.

728x90
반응형

SMTP 오류 코드 및 내용에 관한 표준 설명임.
대략적인 표준은 존재하나, 대부분의 메일 서버들이 표준적인 의미를 준수하지 않음으로 참고만 하고, 해당 메일의 서버 담당자에게 문의 하도록 하자.

SMTP 4XX

메일 교환시에 발생하는 4XX 오류들은 수신 서버의 오류 및 발송 서버의 잘못된 요청 작없 혹은 수신 서버의 스팸정책에 의한 메일 수신 거절, 또는 수신 서버의 일시적인 장애 때문에 발생할 수 있는 일시적인 오류임.

SMTP 421

Service Not Abailable, closing transmission channel.
해당 서버가 정상 작동하지 않기 때문에, 요청한 연결을 거절한다는 내용.

  • 서버가 클라이언트의 접속 자체를 거부하는 경우.
  • 서버가 비정상적인 상황인 경우.
  • 서버에 많은 부하가 있어 일시적으로 접속을 거절한 경우.
  • 서버에서 알 수 없는 오류 발생시.

SMTP 450

Requested action aborted: local error in processing.
수신측 메일 서버의 내부적인 이유로 메일 교환 작업 거절.
대부분 스팸 설정 때문에 거절하는 경우.

  • 제한된 크기보다 메일이 큰 경우.
  • 첨부 파일이 많은 경우.
  • 수신측 서버의 알 수 없는 오류

SMTP 451

Requested action aborted: local error in processing.
수신측 메일 서버의 내부적인 이유로 메일 교환 작업을 거절하는 경우.

  • 수신측 메일 서버의 내부적인 이유노 메일 수신 작업을 거절하는 경우
  • 대부분의 경우는 수신측의 스팸 설정때문에 거절하는 경우
  • 제한된 크기보다 메일이 큰 경우, 첨부 파일가 많은 경우.
  • 수신측 서버의 알수 없는 오류.

SMTP 451

Resources temporarily unavailable. Please try again later.
수신측 메일 서버의 부하로 메일 교환 작업을 일시적으로 거절.

SMTP 452

Requested action not taken: insufficient system storage.
수신측 메일 서버의 내부적인 이유로 메일 교환 작업을 거절.

  • 수신측 메일 서버의 내부적인 이유 때문에, 메일 수신 작업을 거절하는 경우.
  • 수신측의 스팸 설정 때문에 거절하는 경우
  • 한개의 연결에서 너무 많은 RCTP 반복이 수행된 경우
  • 수신측 서버의 알수 없는 오류.
728x90
반응형

'ETC' 카테고리의 다른 글

mixin  (0) 2024.01.10
[PowerShell] 텍스트파일 분리  (0) 2022.03.29
[ETC TIP] Windows 환경에서 Tomcat Log 실시간 보기  (0) 2021.03.15
[조달청/나라장터] iframe 링크 생성  (0) 2021.02.04
대용량 텍스트 파일 읽기  (0) 2020.07.01
There are stopped jobs.

리눅스에서 이렇게 에러가 나면서 로그아웃이나 접속 종료가 되지 않는 경우가 있음.

fg %1

fg는 foreground의 약자로 위의 명령어는 포그라운드 프로세스로 복귀한는 명령어임.

해달 프로세스로 복귀해서 종료 시켜준뒤 로그아웃 또는 접속 종료하면 됨.

728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Raspberry PI] 초기 셋팅  (0) 2022.03.07
[Linux] 라인 수 카운트 하기  (0) 2021.06.23
[Linux] 인터넷 속도 확인  (0) 2021.05.28
[Linux] top  (0) 2021.05.06
[Linux] 리눅스 서버 60초 안에 상황 파악하기  (0) 2021.05.06
  wget --no-check-certificate -O /dev/null  http://www.naver.com

 

728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 라인 수 카운트 하기  (0) 2021.06.23
[Linux] There are stopped jobs  (0) 2021.05.28
[Linux] top  (0) 2021.05.06
[Linux] 리눅스 서버 60초 안에 상황 파악하기  (0) 2021.05.06
[Linux] 리눅스 버전 확인하기  (0) 2021.05.06

+ Recent posts