2010-07-15 4 views
1

이유는 내 서블릿과 동일한 클래스 경로를 사용하여 Runtime.exec()를 사용하기 때문입니다. 실행하려는 클래스는 WEB-INF/classes/my/package/내에 있습니다.서블릿 내에서 웹 애플리케이션 클래스 경로 가져 오기

그래서 String [] { "java", "- cp", my_servlet_classpatch, "my.package.myclass"}로 cmdarray를 빌드하려고합니다. 실행중인 서블릿 클래스 경로를 얻는 방법을 찾지 못했습니다. .

NB : Tomcat 또는 Jetty (또는 알맞은 서블릿 컨테이너)에서 작동해야합니다.

+0

서블릿에서 직접 "my.package.myclass"를 호출 할 수 있습니까? 그것은 별도의 프로세스에서 실행해야합니까? –

+0

@Brad, 별도의 프로세스를 실행하려는 이유에 대한 아래 내 의견을 참조하십시오. – alci

답변

1

getServletContext().getRealPath(...) 무엇입니까?

예를 들어 웹 응용 프로그램이 Linux에 있고 ImageMagick 도구를 사용할 수 있으면 이미지 처리가 필요합니다 (Java ImageMagick 래퍼를 사용하고 싶지 않습니다). 내 webapp에는 모든 이미지가있는 "이미지"저장소가 있습니다. 나는 실행하여 실제 배포 된 디렉토리를 얻을 수 : 귀하의 경우에는 당신이 필요 모르겠어요 것을

/home/tomcat/apache-tomcat-6.0.26/webapps/mywebapp/download 

참고 : 제공

getServletContext().getRealPath("images") 

당신이 정말로 새로운를 생성 싶어 Java 프로세스 Runtime.exec 사용하여?

+1

네, 그게 내가 찾고 있던거야! 새 프로세스를 생성하려는 이유는 다소 구체적입니다.이 새로운 프로세스 자체는 "원격 프로세스 서버"가됩니다. fork() 리소스 할당 문제를 일으키지 않고 oom 오류를 일으키지 않고, 특히 메모리 오버 커밋을 false로 설정 한 Linux에서 새 프로세스를 시작할 수 있습니다. 더 자세한 설명은 http://mail.openjdk.java.net/pipermail/core-libs-dev/2009-May/001644.html을 참조하십시오. 따라서 "원격 서버"는 최대 힙 공간이 작을 것이며,이를 포크 화하면 내 주 서블릿의 경우와 같이 많은 자원을 할당한다는 의미는 아닙니다. – alci

관련 문제