티스토리 뷰

공장 (factory)/- Programming..

[Java] 자바로 외부파일 실행.

공부하는 나부랭이, 무중력고기 2013.09.10 00:30

   혼자 뻘짓하다가 해보게 됐다.


   자바로 외부파일 실행하는 코드. ㅡ.ㅡ..

Runtime rt = Runtime.getRuntime();
String exeFile = "실행할 파일의 경로";
System.out.println("exeFile: " + exeFile);
Process p;
			
try {
	p = rt.exec(exeFile);
	p.waitFor();
} catch (Exception e) {
	e.printStackTrace();
}

   이 방법의 단점은.. 파일을 로컬영역 안에서만 실행 테스트를 할 수 있다는 거다. 이걸 웹에 연결시키려고 했더니 다른 PC에서 실행 명령을 내리면 그 PC에서 파일이 실행되는 게 아니라, 서버쪽에서 실행 된다는 거..  ;;; 배포를 하고 그 주소로 경로를 써주면 실행이 되겠지..

   웹이랑 상관없이 사용한다면 괜찮다.


-------------------------------------------------------

   어떤 분의 요청으로 내용을 조금 추가한다.


   그 어떤 분의 요청이란, "웹에서 버튼을 클릭하면 서버 컴퓨터에 있는 프로그램이 실행되도록 해달라"라는 것.


   아주아주 초간단하게 만들어봤다.



   JSP페이지에 input text와 submit button을 만들어서 submit button을 클릭할 경우 execution.go를 타고 서블릿으로 향한다.



   서블릿에서는 다음과 같이 처리해준다.

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LocalFileExecutionServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		
		String fileName = req.getParameter("fileName");
		System.out.println("fileName : " + fileName);
		
		if(fileName !=null && !fileName.isEmpty()){
			 
			// 파라미터로 받은 이름을 조건으로 실행할 프로그램을 선택, 아무것도 입력하지 않을 경우 계산기가 실행 됨.
			String directory = "C://Windows//System32//calc.exe";
			
			if(fileName.equals("계산기")){
				directory = "C://Windows//System32//calc.exe";
			}else if(fileName.equals("메모장")){
				directory = "C://Windows//System32//notepad.exe";
			}else if(fileName.equals("그림판")){
				directory = "C://Windows//System32//mspaint.exe";
			}
			
			// 실제로 파일을 실행하는 구간------------------------------------
			Runtime rt = Runtime.getRuntime();
			System.out.println("directory: " + directory);
			Process p;
			
			try {
				p = rt.exec(directory);
				p.waitFor();
			} catch (Exception e) {
				e.printStackTrace();
			}
			// 실제로 파일을 실행하는 구간------------------------------------
			
		}
		
		
	}
	
}



   파라미터가 없는 경우에 대한 검증 처리 안함. <- jsp에서 자바스크립트로 할 수도 있고, 서블릿 단에서 처리할 수도 있음. 각자 알아서..



   이걸 실행할 경우, 실행한 클라이언트 측에서는 서버에서 프로그램이 실제로 실행했는지 알 수가 없다. 왜냐면, 원격조정이 아닌 이상 서버의 화면을 직접 볼 수가 없으니까.


   프로그램 실행 여부 확인을 위해서는 서블릿 단에서 성공/실패 시 리턴 페이지를 따로 만들어주는 것도 방법이다.




   근데 사실... 이렇게 웹서버 돌려가면서 하느니.. 원격조정이 제일 편하다. 뭐.. 요청하신 분의 사정이 있겠지만..;;




LocalFileTest.zip



댓글
댓글쓰기 폼
Total
1,310,586
Today
0
Yesterday
1,100
«   2019/06   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
글 보관함