Tomcat

Tomcat 6.0 서블릿 로딩 설정

우혁이 아빠 2010. 4. 12. 17:52

 

Tomcat의 버전이 올라가면서 보안상의 이유로 기본적으로는 서블릿을 실행하 

지 못하도록 설정이 되어있다. 

  

그래서 다음과 같이 설정해 주면 Tomcat에서 서블릿을 실행할 수 있다. 

  

톰캣은 환경설정과 관련된 내용을 web.xml 파일에 담고 있다. 톰캣을 설치한  

디렉터리의 conf 디렉터리에 있는 web.xml 파일을 수정함으로써 톰캣을 실행하 

는데 필요한 환경설정 정보를 변경할 수 있다.  

 

□ 톰캣의 환경설정 파일  

◇ %CATALINA_HOME%\conf\web.xml  

 

web.xml 파일에서 서블릿을 실행할 수 있도록 서블릿의 접근 방법을 지정해 줌 

으로써 서블릿 서비스를 제공할 수 있다.  

 

서블릿을 실행하기 위한 환경설정 파일을 수정해 보자. 다음의 위치에 설정되어 있는 주석을 해제하면 된다.  

 

□ web.xml 파일의 변경  

◇ 99번째 ~ 109번째 줄 주석 해제  

    <servlet> 

        <servlet-name>invoker</servlet-name> 

        <servlet-class> 

          org.apache.catalina.servlets.InvokerServlet 

        </servlet-class> 

        <init-param> 

            <param-name>debug</param-name> 

            <param-value>0</param-value> 

        </init-param> 

        <load-on-startup>2</load-on-startup> 

    </servlet> 

◇ 348번째 ~ 351번째 줄 주석 해제  

 

    <servlet-mapping> 

        <servlet-name>invoker</servlet-name> 

        <url-pattern>/servlet/*</url-pattern> 

    </servlet-mapping> 

 

□ XML 문서의 주석문 기호  

◇ 주석문의 시작 : <!--  

◇ 주석문의 끝 : -->  

 

위의 위치에 설정되어 있는 주석 기호를 삭제하면 서블릿을 실행할 수 있다. 

 

그런데 Tomcat 6.0에서는 위와 같이 주석을 풀고 실행해도 Tomcat 시작시 다음과 같은 Exception이 발생한다. 

 

java.lang.SecurityException: Servlet of class org.apache.catalina.servlets.InvokerServlet is privileged and cannot be 

 loaded by this web application 

 at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1134) 

 at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981) 

 at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4045) 

 at org.apache.catalina.core.StandardContext.start(StandardContext.java:4351) 

 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) 

 at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 

 at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) 

 at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920) 

 at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883) 

 at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492) 

 at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138) 

 at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) 

 at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 

 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 

 at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) 

 at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 

 at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 

 at org.apache.catalina.core.StandardService.start(StandardService.java:516) 

 at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 

 at org.apache.catalina.startup.Catalina.start(Catalina.java:566) 

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 

 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 

 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 

 at java.lang.reflect.Method.invoke(Unknown Source) 

 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) 

 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 

 

 

톰캣 6.x 버전부터는 다음과 같이 서블릿 리로딩에 관련된 추가적인 설정을 해 주어야 한다. 

 

Tomcat 설치 디렉터리의 conf/context.xml 파일을 열고, 

<Context> 태그를 다음과 같이 수정한다. 

 

<Context reloadable="true" privileged="true"> 

 

그러면 Tomcat 시작 시 에러가 발생하지 않으며, 서블릿도 정상적으로 실행된다. 

 

 

----------------------------------------------------------------- 

4. Turn on Servlet Reloading 

The next step is to tell Tomcat to check the modification dates of the 

 class files of requested servlets, and reload ones that have changed  

since they were loaded into the server's memory. This slightly degrades  

performance in deployment situations, so is turned off by default.  

However, if you fail to turn it on for your development server, you'll  

have to restart the server every time you recompile a servlet that has  

already been loaded into the server's memory. Since this tutorial  

discusses the use of Tomcat for development, this change is strongly  

recommended. 

 

 

To turn on servlet reloading, edit Edit install_dir/conf/context.xml and change 

 

  <Context> 

    to 

 

  <Context reloadable="true" privileged="true">  

 

    Note that the privileged entry is really to support the invoker  

servlet (see the following section), so you can omit that entry if you  

do not use the invoker. 

 

원본 위치 <http://blog.naver.com/PostView.nhn?blogId=chahojun&logNo=90030693912&beginTime=0&jumpingVid=&from=search&redirect=Log&widgetTypeCall=true&topReferer=http%3A%2F%2Fcafeblog.search.naver.com%2Fsearch.naver%3Fsm%3Dtab_hty%26where%3Dpost%26query%3Djava.lang.SecurityException%253A%2BServlet%2Bof%2Bclass%2Borg.apache.catalina.servlets.InvokerServlet%2Bis%2Bprivileged%2Band%2Bcannot%2Bbe%2Bloaded%2Bby%2Bthis%2Bweb%2Bapplication%26x%3D17%26y%3D22>