'JavaScript'에 해당되는 글 2건

웹소켓 연결 테스트 소스

1. pom.xml 에 웹소캣 관련 라이브러리 추가

<!--  웹소캣 관련 내용 -->
		<!-- Spring WebSocket 의존성 -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-websocket</artifactId>
		    <version>${org.springframework-version}</version>
		</dependency>
		
		<!-- Spring Messaging 의존성 -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-messaging</artifactId>
		    <version>${org.springframework-version}</version>
		</dependency>
		
		<!-- (선택 사항) STOMP 프로토콜 지원을 위한 의존성 -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-messaging</artifactId>
		    <version>${org.springframework-version}</version>
		</dependency>

2. servlet-context.xml 관련내용 추가 

<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:task="http://www.springframework.org/schema/task"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:websocket="http://www.springframework.org/schema/websocket"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd"
	>


<context:component-scan base-package="com.soft.websocket" />
	
	<websocket:handlers>
        <websocket:mapping path="/testwebsockethandler01" handler="WebSocketHandler01"/>
    </websocket:handlers>
    
    <!-- WebSocket 핸들러 Bean 등록 -->
    <beans:bean id="WebSocketHandler01" class="com.soft.websocket.Test_webSocketHandler"/>
	<!-- 스케쥴러파일이 존재하는 패키지 설정 -->

xmlns:websocket="http://www.springframework.org/schema/websocket" 웹소캣 관련 추가 잊지 말 것

3. 자바파일 추가하기 

package com.soft.websocket;

import org.springframework.web.socket.handler.TextWebSocketHandler;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Test_webSocketHandler extends TextWebSocketHandler {

    private final List<WebSocketSession> sessions = new ArrayList<>();
    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    public Test_webSocketHandler() {
        startMessageSender();
    }

    private void startMessageSender() {
        scheduler.scheduleAtFixedRate(() -> {
            String currentTime = LocalDateTime.now().format(formatter);
            String message = "서버 시간: " + currentTime;

            synchronized (sessions) {
                for (WebSocketSession session : sessions) {
                    if (session.isOpen()) {
                        try {
                            session.sendMessage(new TextMessage("서버에서 보내는 10초마다의 메시지: " + message));
                        } catch (Exception e) {
                            System.err.println("메시지 전송 오류: " + e.getMessage());
                        }
                    }
                }
            }
        }, 0, 3, TimeUnit.SECONDS);
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        synchronized (sessions) {
            sessions.add(session);
        }
        System.out.println("새로운 WebSocket 연결: " + session.getId());
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String payload = message.getPayload();
        System.out.println("수신된 메시지: " + payload);
        /*
        synchronized (sessions) {
            for (WebSocketSession webSocketSession : sessions) {
                if (webSocketSession.isOpen()) {
                    webSocketSession.sendMessage(new TextMessage("서버로부터의 응답: " + payload));
                }
            }
        }
        */
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        synchronized (sessions) {
            sessions.remove(session);
        }
        System.out.println("WebSocket 연결 종료: " + session.getId());
    }

    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        System.err.println("WebSocket 오류: " + exception.getMessage());
    }

    public void destroy() {
        scheduler.shutdown();
        try {
            if (!scheduler.awaitTermination(5, TimeUnit.SECONDS)) {
                scheduler.shutdownNow();
            }
        } catch (InterruptedException e) {
            scheduler.shutdownNow();
        }
    }
}

4. JSP파일에서 자바스크립트로 호출해서 연결 잘되었는지 확인하기 

<script>
	const host = window.location.host;  // 현재 웹 페이지의 호스트 정보 가져오기
	const protocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://'; // 현재 페이지가 HTTPS라면 wss 사용, 아니면 ws 사용
	const socket = new WebSocket(`${protocol}${host}/testwebsockethandler01`);
	//const socket = new WebSocket('ws://localhost:8080/jspculturedepot/testwebsockethandler01');
	const browserInfo = navigator.userAgent;
	socket.onopen = function() {
	    console.log('웹소켓 연결이 열렸습니다.');
	    socket.send('안녕하세요 서버!');
	    socket.send('나의정보 브라우저정보 : '+browserInfo);
	};
	
	socket.onmessage = function(event) {
	    console.log('서버로부터 메시지:', event.data);
	    //alert('서버로부터 받은 메시지: ' + event.data); // 메시지를 alert 창으로 띄우기
	    socket.send('잘받은 브라우저정보 : '+browserInfo);
	};
	
	socket.onclose = function() {
	    console.log('웹소켓 연결이 닫혔습니다.');
	};
	
	socket.onerror = function(error) {
	    console.error('웹소켓 오류:', error);
};
</script>

호출 주소를 보면 알겠지만 XML에 추가한 

<websocket:handlers>
        <websocket:mapping path="/testwebsockethandler01" handler="WebSocketHandler01"/>
    </websocket:handlers>

이 부분이 PATH로 호출합니다.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

특정일 기준으로 작동하기 

JavaScript를 사용한 날짜 비교 함수 작성하기

날짜와 시간을 다루는 JavaScript의 기능을 활용하여 특정 날짜와 현재 날짜를 비교하는 함수를 만들어 보겠습니다. 이 함수는 웹 애플리케이션에서 유용하게 사용될 수 있으며, 예를 들어 특정 이벤트나 기한이 마감되었는지 확인하는 데 도움이 됩니다.

코드 예제:

function checkDate3() {
    // 목표 날짜 설정 (여기에서는 2023년 10월 31일 00:00:00)
    var targetDate = new Date("2023-10-31T00:00:00");
    var currentDate = new Date();

    // 현재 날짜와 목표 날짜를 비교
    if (currentDate > targetDate) {
        alert("마감되었습니다.");
    } else {
        window.location.href = "${pageContext.request.contextPath}/1234/1111.do"; // 페이지 이동할 URL을 입력하세요.
    }
}

코드 설명:

targetDate 변수에는 목표 날짜 및 시간이 설정됩니다. 이 날짜는 "YYYY-MM-DDTHH:MM:SS" 형식으로 지정됩니다. 이 코드에서는 2023년 10월 31일 00:00:00을 목표 날짜로 설정했습니다.

currentDate 변수에는 현재 날짜와 시간이 저장됩니다.

if 문을 사용하여 현재 날짜와 목표 날짜를 비교합니다. 현재 날짜가 목표 날짜보다 크면 "마감되었습니다."라는 경고 메시지가 표시됩니다.

그렇지 않은 경우, 특정 페이지로 이동하도록 지정된 URL로 리디렉션됩니다.

이 함수는 현재 날짜와 목표 날짜를 비교하여 원하는 작업을 수행하는 데 사용할 수 있으며, 웹 애플리케이션에서 기한을 추적하거나 이벤트를 관리하는 데 유용합니다. JavaScript를 사용하여 날짜 및 시간을 처리하는 방법을 익혔으므로 이를 다양한 상황에 적용할 수 있을 것입니다.

이제 이 함수를 웹 애플리케이션 프로젝트에 통합하여 날짜 기반 작업을 자동화하실 수 있습니다.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,