[인터돌™] 공부 해보자!! 열심히~~~

반응형

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 버전부터는 org.apache.catalina.servlets.InvokerServlet 클래스가 독점적 클래스로 바꿔어서 그렇단다.
그래서 다음과 같이 설정을 해 주어야 한다.

Tomcat 설치 디렉터리의 conf/context.xml 파일을 열고,
<Context> 태그를 다음과 같이 수정한다.

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

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

[원문 출처 : http://www.xmlstory.com/entry/tomcat60servlet ]

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band