티스토리 뷰

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


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

1
2
3
4
5
6
7
8
9
10
11
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를 타고 서블릿으로 향한다.

1
2
3
4
<form action="execution.go">
    <input type="text" name="fileName">
    <input type="submit" value="실행!">
</form>



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

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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
Today
Yesterday
«   2025/04   »
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
글 보관함