웹 & 프레임워크

톰캣에서 JavaBridge를 통해 PHP이용하기

늘근이 2014. 5. 12. 08:30


참고한곳

http://www.thomasknierim.com/140/java/serve-php-with-tomcat/ (태그에 문제있음 <linstener>가 빠져있음)

http://php-java-bridge.sourceforge.net/pjb/

 

참고한곳은 모두 영문사이트로, PHP를 톰캣에서 이용하는 방법에 대해, 아파치를 연동하는 방법을 제외하고는 국내에 전무하다.

자바브릿지는 PHP를 읽을수 있는 프로그램을 war파일로 올려 사용하는것으로, 경우에 따라서는 아파치를 톰캣과 연동하는 방법에 비해 번거로울수도 있다. 

 

사실 자바브릿지를 쓰기전에, 아파치와 톰캣을 연동하는 방법이 있다.

아파치와 톰캣을 연동해서는 속도상에서 이점이 있다는점은, 사실 예전이야기이고, 여러 형식을 지원할수 있고, 아파치에서 지원하는 부가기능을 이용하는 것이 있겠다.

대략적인 개요도는 다음과 같다





이것 말고도 이제 자바브릿지를 이용하는 방법이 있다





앞의 포스트나 php가 깔려있으면 이제는 쉽다.

그냥 이클립스에 JavaBridge와 JavaBridgeTemplate의 war파일을 import한다. 

 

그리고 난 다음, javabridge를 한번 틀어본다. php만 문제없이 깔았으면 돌아갈것이다. 이상하게 깔았는데 인식이 잘 안된다 싶으면 깔끔하게 리붓해서 php등의 서비스가 윈도우가 켜질때 세팅되게 한다. 

 

이제 중요한것은 일반 어플리케이션이 구동될때 *.php인 형식을 가지는 놈들은 자바브릿지로 보내버려야 한다는 것이다.

일종의 url패턴을 이용한 서블릿형태라 web.xml을 수정해서, 해당 놈들은 몽땅 자바브릿지로 보내버리도록 해야한다.

 

만약 어플리케이션 하나만 php를 인식해서 보내버리도록 한다면 그 어플 하나의 web.xml만 고치면 되겠지만, 우리가 원하는것은 어떠한 어플리케이션이 오든 *.php를 가지고 있으면 해당하는놈들은 자바브릿지가 해석하게 만들어줘야 하는것이다.

 

따라서, 서버를 세팅할때 참조하게되는 순수한 상태의 톰캣 web.xml과 shared library에 해당하는 것들은 좀 추가해주어야 한다.

 

1. 일단 톰캣폴더/lib (공용라이브러리임!)에 JavaBridge.jar / php-script.jar / php-servlet.jar를 추가해준다.

2. 톰캣폴더/conf/web.xml 에가서



<!-- Attach the JSR223 script factory to the servlet context -->    

<listener><listener-class>php.java.servlet.ContextLoaderListener</listener-class></listener>

 

    <!-- PHP Servlet: back-end for Apache or IIS -->

    <servlet><servlet-name>PhpJavaServlet</servlet-name><servlet-class>php.java.servlet.PhpJavaServlet</servlet-class></servlet>

 

    <!-- PHP CGI servlet: when IIS or Apache are not available -->

    <servlet><servlet-name>PhpCGIServlet</servlet-name><servlet-class>php.java.servlet.fastcgi.FastCGIServlet</servlet-class></servlet>

 

    <!-- PHP Servlet Mapping -->

    <servlet-mapping><servlet-name>PhpJavaServlet</servlet-name><url-pattern>*.phpjavabridge</url-pattern></servlet-mapping>

 

    <!-- PHP CGI Servlet Mapping -->

 

    <servlet-mapping><servlet-name>PhpCGIServlet</servlet-name><url-pattern>*.php</url-pattern></servlet-mapping>


 


 

적당한 위치에 위의 문장을 추가해준다. php로끝나면 자바브릿지로 보내버리라는것이다.

 

물론 한방에 성공하기는 어렵다. 별 짜잘한  PHP에러도 날것이고 동작도 안할것이다. 그럴때는 리붓하도록 한다.

리부팅은 만병통치약이다. 해당하는 파일들을 첨부한다.