2009-03-09 9 views
11

몇 가지 명령 줄 인수를 취하고 일부 하드 코어 계산을 수행 한 다음 그 결과를 일부 파일과 함께 파일에 기록하는 jar 파일로 패키지 된 독립 실행 형 Java 응용 프로그램을 작성했습니다 결과가있는 파일의 위치를 ​​나타내는 기본 출력 스트림으로 출력합니다.웹 서버에서 Java 실행

이제이 기술을 중심으로 웹 사이트를 만들고 싶습니다. 사용자가 HTML 양식을 작성하여 웹 페이지에 게시하면 Java 응용 프로그램을 호출하고 Java 응용 프로그램의 결과를 구문 분석하여 사용자에게 표시 할 수 있습니다.

현재, 전 POST 요청에서 데이터를 수집하기 위해 PHP의 작은 비트를 사용하고 다음 단지 간부 인 전화 사용 :이 나쁜

java -jar -Xmx128m myapplication.jar command-line-arguments

를?

매일 내 웹 사이트를 수천 번 방문하고 Java 응용 프로그램을 실행할 때마다 30 초에서 1 분 정도 걸릴 수 있으므로 지나치게 비효율적으로되고 싶지 않습니다. 모든 요청에 ​​대해 Java를 직접 호출하는 것보다 더 나은 솔루션이있는 것처럼 보입니다.

자바 서블릿, 콩, 바람둥이, 글래스 피시 등과 같은 것들을 계속 들었지만, 나는 그들이 무엇인지, 그리고 그들이 나에게 어떻게 도움이되는지 이해하지 못합니다. 이 사람들이 나를 어떻게할까요? 애플리케이션을 실행할 때마다 자바 JVM을 생성 할 필요가 없기 때문에 결과가 빨라 집니까? 적은 메모리 사용량? 가능한 한 적은 메모리 사용 공간으로 최대한 빨리 실행되기를 바랍니다.

그래서 여기서는 어떤 방법을 택할 수 있습니까? 나는 많은 코드가 있으므로 (즉, C 또는 C++로 다시 작성하는 것은 문제가되지 않으므로) 애플리케이션의 심각한 재 작성을 원하지 않습니다.


감사합니다.

답변

12

서블릿은 컨테이너 내부에서 실행되도록 설계된 희미한 응용 프로그램입니다. 그들은 자바 코드를 Tomcat과 같은 간단한 서블릿 컨테이너 나 글래스 피쉬와 같이 더 완벽한 기능을 갖춘 애플리케이션 서버에 삽입 할 수있는 확장 포인트를 제공합니다.응용 프로그램 서버가 HTTP 상호 작용을 처리하는 데 어려움을 겪고 보안, 로깅, 세션 관리, 오류 처리 등의 다른 기능을 제공하므로이 작업을 수행하려고합니다 (servlet specification 참조).

응용 프로그램을 다른 응용 프로그램과 함께 사용하면 웹 응용 프로그램의 수명주기를 더 잘 관리 할 수 ​​있습니다. 웹 서버를 종료하거나 재배포하거나 더 많은 인스턴스를 시작하지 않고도 응용 프로그램을 시작하고 중지 할 수 있습니다. 또한 훌륭한 응용 프로그램을 만들 때 첫 번째 응용 프로그램 바로 옆에 놓을 수 있습니다 . 또는 여러 대의 시스템을 클러스터링하여 응용 프로그램 서버의 기능을 쉽게 사용할 수 있습니다.

이것은 시작에 불과합니다. 컨테이너 기반 응용 프로그램을 만드는 데 도움이되는 더 많은 기능, 기술 및 프레임 워크가 있습니다. Servlet tutorial.

0

아마 웹 사이트에서 자바 응용 프로그램을 직접 호출하고 싶지 않을 것입니다. 자바 프로세스가 실행되는 데 30 초가 걸리면 웹 서버가 막히게 될 것입니다. 특히 사이트가 두려워하는 경우 특히 그렇습니다.

백엔드 처리 요청을 전달하기위한 웹 서비스 (및 가능한 메시지 대기열)를 조사 할 수 있습니다. PHP 페이지는 서버에서 웹 서비스를 호출 할 수 있습니다. 그러면 처리 요청을 대기열에 넣거나 비동기식으로 java 앱을 시작할 수 있습니다. 자바 애플리케이션이 끝나기를 기다리는 HTTP 요청을 원하지 않는다. 왜냐하면 처리하는 동안 사용자는 멈춘 브라우저 만 갖고 HTTP 요청은 시간 초과 될 수 있기 때문이다.

일단 Java 응용 프로그램이 끝나면 사용자가 웹 사이트에서 액세스 할 수있는 데이터베이스 테이블을 업데이트 할 수 있습니다.

2

[내가 할 수있는 일] "응용 프로그램을 실행할 때마다 Java JVM을 만들 필요가 없기 때문에"더 빠른 결과를 얻을 수 있습니까? "

예.

그리고 보너스 - 전체 사이트가 단일 언어 (Java)가되도록 PHP를 대체 할 수 있습니다.

또한 한 번에 30-60 초 정도의 유스 케이스가 발생하지 않도록 유스 케이스를 수정할 수도 있지만 일련의 빠른 단계는 사용자와 대화식으로 실행해야합니다.

2

서블릿 컨테이너에서 코드를 실행하십시오.

웹 사이트를 PHP로 유지해야하고 이미 컴퓨터에 Java가 설치되어있는 경우 무료 서블릿 컨테이너 (예 : Apache Tomcat 또는 Jetty)를 설치하기 만하면됩니다. 사용되지 않는 포트에서 서블릿 컨테이너를 실행하도록 구성하십시오. (8080)가 기본값입니다.

이 서블릿 컨테이너는 Apache와 마찬가지로 실제로 자바 기반 웹 서버이지만 Java 코드를 제공하는 데 특화되어 있습니다.

각 요청에 대해 새로운 java.exe 호출 대신 Java 웹 서버를 사용할 때의 가장 분명한 이점은 Java 가상 시스템 (jvm)이 항상 "핫"상태로 실행되고 실행된다는 것입니다. java.exe (jvm)를 새로 시작할 때마다 여분의 시간을 낭비하게됩니다.

서블릿 컨테이너를 사용하는 두 번째 이점은 컨테이너가 새로운 요청마다 jvm 내부의 새 스레드에서 코드를 실행할 수 있다는 점입니다. 하루에도 수천 명의 사용자에게 서비스를 제공하는 데 아무런 문제가 없습니다. 대부분의 경우, 하나가 아닌 수백 개의 Java 인스턴스를 시작한다면 시스템이 중단됩니다.

코드를 서블릿 안에 넣습니다. 초보자도 정말 쉽습니다. HTTP (서블릿의 doGet 또는 doPost 메소드)를 통해 서블릿과 대화한다. PHP 요청 양식을이 서블릿에 전달하고 서블릿에서 페이지, json 객체, xml 또는 일반 텍스트를 제공하도록합니다.

0

가장 쉬운 방법은 응용 프로그램에 웹 서버를 포함시키는 것입니다. Jetty을보십시오.

관련 문제