성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>WTP 내에서 서블릿을 실행하는 환경</h1> <p> 지난번 글의 마지막에서,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 이클립스에서 서블릿 디버깅하는 방법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1118'>http://www.sysnet.pe.kr/2/0/1118</a> </pre> <br /> 서블릿이 컴파일된 .class 파일이 원래의 톰캣이 설치된 "\webapps\ROOT\WEB-INF\classes" 폴더에 배포되지 않은 것에 대해 의문점을 남겼는데요. 조금 공부하다 보니 답이 나오네요. ^^<br /> <br /> 일단, IIS Express에서 비슷한 사례를 한번 볼까요?<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > IIS Express - appcmd.exe를 이용한 applicationHost.config 변경 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1033'>http://www.sysnet.pe.kr/2/0/1033</a> </pre> <br /> 위의 글에서 보면, IIS Express는 원래의 설치 폴더가 있지만 /path 옵션을 통해서 Web Application의 루트를 재설정하는 것이 가능하죠. 마찬가지로 tomcat에도 그런 기능이 있는 것 같습니다. (제가 톰캣을 잘 몰라서 '가정'입니다.)<br /> <br /> WTP에서 실행된 javaw.exe의 명령행 인자를 다시 보면 아래와 같고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > "E:\Program Files\Java\jre6\bin\javaw.exe" <span style='color: blue; font-weight: bold'>-D</span>catalina.base=D:\Interop\Java\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 <span style='color: blue; font-weight: bold'>-D</span>catalina.home=D:\servlet\tomcat <span style='color: blue; font-weight: bold'>-D</span>wtp.deploy=D:\Interop\Java\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps <span style='color: blue; font-weight: bold'>-D</span>java.endorsed.dirs=D:\servlet\tomcat\endorsed <span style='color: blue; font-weight: bold'>-D</span>file.encoding=MS949 -classpath D:\servlet\tomcat\bin\bootstrap.jar org.apache.catalina.startup.Bootstrap start </pre> <br /> "-D" 옵션은 일종의 명령행 파라미터를 전달하는 수단으로 보이고, 이를 정리하면 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <span style='color: blue; font-weight: bold'>catalina.base = D:\Interop\Java\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 catalina.home = D:\servlet\tomcat wtp.deploy = D:\Interop\Java\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps </span> java.endorsed.dirs = D:\servlet\tomcat\endorsed file.encoding = MS949 </pre> <br /> 위에서 톰캣이 설치된 폴더는 catalina.home 변수로 전달되고 있고, WTP가 구성한 본래의 tomcat 폴더를 재설정하는 임의의 폴더가 catalina.base 변수로 전달되는 것을 확인할 수 있습니다. tomcat 폴더 이외에 서블릿 컨테이너로써 서블릿들을 관리하는 폴더는 wtp.deploy로 넘어가고 있습니다.<br /> <br /> IIS Express와 다소 억지로 비교하자면 아래와 같은 정도겠죠.<br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> iisexpress.exe 가 위치한 폴더 == catalina.home 값<br /> Web Application 폴더 == catalina.base 값<br /> Web Application 폴더/bin 폴더 == wtp.deploy 값<br /> </div><br /> <br /> 참고로, catalina.base 값을 ASP.NET이라면, HttpRequest 타입의 PhysicalApplicationPath 속성값입니다.<br /> <br /> 계속해서, "D:\Interop\Java\workspace" 경로는 제가 이클립스에서 사용하도록 한 "Workspace"의 루트 경로입니다. 즉, WTP는 이클립스에 지정된 workspace 경로 하위에 '.\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps' 폴더를 만들고 그 하위에 서블릿을 배포하고 있습니다.<br /> <br /> <img alt='tomcat_override_path_1.png' src='/SysWebRes/bbs/tomcat_override_path_1.png' /><br /> <br /> 부가적으로, WTP 내에서 실행된 서블릿의 "javax.servlet.context.tempdir" 문맥 변수의 값은 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ServletContext ctx = this.getServletContext(); ctx.getAttribute("<span style='color: blue; font-weight: bold'>javax.servlet.context.tempdir</span>") // tempdir == D:\Interop\Java\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\FirstServlet\ </pre> <br /> 그런데, 상식적인 선에서 이해가 안되는 부분이 하나 있군요. 예를 들어, 서블릿에서 다음과 같이 경로를 지정하지 않고 파일을 생성하는 코드를 WTP 테스트 환경에서 실행하면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { FileWriter fileWriter = null; PrintWriter printWriter = null; try { fileWriter = <span style='color: blue; font-weight: bold'>new FileWriter("Init.log");</span> printWriter = new PrintWriter(fileWriter); printWriter.println("test"); return; } finally { if (printWriter != null) { printWriter.close(); } } } </pre> <br /> 파일이 어디 생성될까요? 제 예상은, catalina.base, wtp.deploy로 지정된 폴더이거나 tomcat의 원래 폴더라고 생각했는데, 엉뚱하게도 eclipse.exe 파일이 위치한 폴더였습니다. 이 경로는 System.getProperty("user.dir")로 구한 값과 일치하는데요. 이클립스가 톰캣 관련 EXE를 별도로 생성하는 것을 따져볼 때 환경 설정이 자식 EXE로 전달되어 이런 결과가 나오는 것 같습니다. 암튼... ^^ 자바의 개발환경을 이해하는 것이 쉽진 않은 것 같습니다. (아직 웹로직 같은 것도 들어가지 않았는데... 벌써 이 정도로 헤매고 있으니. ^^)<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1227
(왼쪽의 숫자를 입력해야 합니다.)