728x90
반응형

response.getOutputStream()은 HTTP 응답의 바디에 데이터를 쓰는 단계를 훨씬 간단하게 구현한 것입니다.

HTTP 응답을 처리할 때에는 웹 서버는 클라이언트로 응답을 보내기 위해 HttpServletResponse 객체를 사용합니다. response.getOutputStream()은 이 HttpServletResponse 객체를 통해 HTTP 응답의 바디에 데이터를 쓸 수 있는 스트림을 얻어옵니다. 이후에 데이터를 이 스트림에 쓰면, 해당 데이터가 HTTP 응답의 바디로 전송됩니다.

일반적으로 파일 다운로드를 위해서는 생성된 파일을 스트림으로 변환한 후, response.getOutputStream()으로 얻은 스트림에 파일 데이터를 쓰면 됩니다. 이렇게 하면 생성된 파일이 HTTP 응답의 바디로 전달되어 브라우저 다운로드를 유발합니다.

간단히 말해서, response.getOutputStream()을 사용하면 파일의 데이터를 HTTP 응답의 바디에 쓸 수 있으며, 브라우저는 해당 응답을 받아 파일을 다운로드합니다. 따라서 이를 통해 파일 다운로드 매커니즘을 간단히 구현할 수 있습니다.

728x90
반응형
728x90
반응형

HTTP 프로토콜은 클라이언트(예: 웹 브라우저)와 서버 간의 통신을 위한 규칙과 규약을 정의하는 프로토콜입니다. 클라이언트는 HTTP 요청을 보내고, 서버는 HTTP 응답을 반환하여 이러한 요청에 응답합니다. 파일 다운로드는 이러한 HTTP 응답의 일부로 처리됩니다.

파일 다운로드 매커니즘은 다음과 같은 순서(8가지)로 동작합니다:

1. 클라이언트(브라우저)는 HTTP 요청을 생성하여 서버에 보냅니다. 이 요청은 특정 URL에 대한 것이며, 파일을 다운로드하는 경우 해당 파일을 제공하는 URL을 호출합니다.

2. 서버는 요청을 받고 요청에 맞는 처리를 수행합니다. 엑셀 파일을 생성하는 등의 작업을 수행한 후, 이 파일의 내용을 HTTP 응답으로 보내기 위해 데이터를 준비합니다.

3. 서버는 HTTP 응답을 생성하여 클라이언트로 보냅니다. 이 때 HTTP 응답은 상태 코드, 헤더(Headers), 그리고 바디(Body)로 구성됩니다.

4. 클라이언트(브라우저)는 HTTP 응답을 받아서 처리합니다. 상태 코드는 요청이 성공적으로 처리되었는지, 오류가 발생했는지 등의 정보를 나타냅니다.

5. 바디(Body)에는 서버가 보낸 데이터가 들어있습니다. 파일 다운로드의 경우, 엑셀 파일의 데이터가 바디에 들어가게 됩니다.

6. 브라우저는 HTTP 응답의 Content-Type 헤더를 확인하여 파일 다운로드가 필요한지 판단합니다. 엑셀 파일을 다운로드하려면 Content-Type이 "application/vnd.ms-excel" 또는 "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"와 같은 엑셀 파일 형식으로 설정되어야 합니다.

7. 브라우저가 Content-Type과 함께 파일의 이름을 결정하는 데 사용하는 Content-Disposition 헤더도 확인합니다. 이 헤더에는 파일의 이름과 함께 "attachment"라는 값이 설정되어야 합니다. 이로 인해 브라우저는 파일을 다운로드하는 것으로 인식합니다.

8. 브라우저는 파일 다운로드를 시작하고, 다운로드가 완료되면 해당 파일이 사용자의 컴퓨터에 저장됩니다.

요약하면, 파일 다운로드 매커니즘은 HTTP 응답을 통해 엑셀 파일과 파일의 MIME 타입(Content-Type)을 브라우저에게 전달하고, 브라우저는 이 정보를 활용하여 파일을 다운로드하는 것입니다. 이로 인해 서버에서 생성된 파일을 클라이언트(브라우저)로 전달하여 사용자가 파일을 다운로드할 수 있게 됩니다.

728x90
반응형
728x90
반응형

※ JSmooth 0.9.9-7 사용법

            1. Eclipse 환경에서 jar 파일 생성



                  프로젝트 우클릭 → Export 클릭 → Runnable JAR  file 선택 → 

                   

               

 

                 Lunch Configuration 해당 어플리케이션 Main Java  및 프로젝트 선택 

(주의 : 어플리케이션 실행한 적 없다면 목록에 나타나지 않음) 

                 →  jar 파일 생성 완료 후 →  cmd 실행 → 해당 jar 파일 정상 수행되는지 확인

                 → 정상 수행 확인 후 JSmooth 사용 

             2. JSmooth 를 통해 JAR → exe 실행파일로 변환

                  프로그램 실행

                         

                   해당 jar 파일 열기

                        

                     Skeleton 클릭 후 Windowed Wrapper 선택
                           # Console Wrapper : 콘솔모드로 실행되는 프로그램
                           # Windowed Wrapper  : Swing , SWT, AWT 등 GUI 프로그램
                           # Message : java 설치안되어있을경우 메시지 표시 및 다운로드 

                            exe파일이라면 Launch java app in the exe process 클릭)   출처: http://jedagi.tistory.com/86 [그냥 웃지요!~]
                         

                     executable 클릭  exe 파일명 결정
                       

                         

 

                       Application 클릭 → embedded jar (Use an embedded jar) 선택 후 만들어 놓은 jar 선택 → Main class 선택

                        



                      JVM Selection 최소 JVM SELECTION Version 필요시 선택 → 상단 톱니바퀴 클릭 후 exe파일 생성

                         



728x90
반응형
728x90
반응형

1. pom.xml에 dependencies 에 추가 

<dependencies>

    <dependency>

        <groupId>org.quartz-scheduler</groupId>

        <artifactId>quartz</artifactId>

        <version>2.2.1</version>

    </dependency>

</dependencies>   


2. web.xml


<context-param>

<param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/config/context-quartz.xml</param-value>

</context-param>


3. context-quartz.xml


<?xml version="1.0" encoding="UTF-8"?>

 

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xmlns:batch="http://www.springframework.org/schema/batch"

       xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"

       xmlns:jdbc="http://www.springframework.org/schema/jdbc"

       xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd

        http://www.springframework.org/schema/batch     http://www.springframework.org/schema/batch/spring-batch.xsd

        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd

        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

 

 

    <bean id="testTask" class="test.batch.testTask"/>

 

    <bean name="testJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"

          p:jobClass="test.batch.TestJobBean"

          p:durability="true">

        <property name="jobDataAsMap">

            <map>

                <entry key="testTask" value-ref="testTask"/>

            </map>

        </property>

    </bean>


    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"

          p:jobDetail-ref="testJob"

          p:startDelay="1000"

          p:cronExpression="0 5 0 * * ? *"/>

 

    <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

        <property name="triggers">

            <list>

                <ref bean="cronTrigger"/>

            </list>

        </property>

    </bean>

 

</beans>





1.초(Seconds) 0 ~ 59 

2.분(Minutes) 0 ~ 59 

3.시간(Hours) 0 ~ 23

4.달의 날짜(Day-of-month) 1 ~ 31

5.달(Month)  1 ~ 12 or JAN ~ DEC

6.주의 날짜(Day-of-week) 1 ~ 7 or SUN-SAT

7.년도(Year) (선택가능)  빈값


* 모든 수를 나타냄   

- 값의 사이를 의미

, 특정값 지칭

/ 값의 증가를 표현

? 특별한 값이 없음을 나타냄(day-of-month, day-of-week 필드만 사용)  

L 마지막 날을 나타냄(day-of-month, day-of-week 필드만 사용)


4. TestJobBean.java


package test.batch;


import org.quartz.DisallowConcurrentExecution;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.springframework.scheduling.quartz.QuartzJobBean;

import org.springframework.stereotype.Component;


@Component

@DisallowConcurrentExecution

public class TestJobBean extends QuartzJobBean {

private TestTask testTask;

 

    protected void executeInternal(JobExecutionContext context)

            throws JobExecutionException {

 

        testTask.print();

 

    }

 

 

    public void setDummyTask(TestTask testTask) {

        this.testTask = testTask;

    }

}


5. TestTask.java


package test.batch;


public class TestTask{

public void print() {

System.out.println("batch Test");

}

}






728x90
반응형

+ Recent posts