ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Web] Tomcat/Servlet 참고용 기록
    Servlet 2022. 11. 24. 22:33

    개인참고용 기록

     

    톰캣이 설치되어있는 디렉토리를 $로 간주한다.

     

    • 톰캣 시작

    $/bin/startup.bat파일 실행


    • http 요청을 처리하기 위한 파일들을 모아놓은 디렉토리

    $/webapps/ROOT디렉토리


    • ContextPath

    톰캣에 여러 애플리케이션이 돌아갈 때 애플리케이션 별로 요청url들을 분리할 필요가 있을 때 ContextPath 설정

     

    $/conf/server.xml파일 <Host name>엘리먼트 내부에 다음의 <Context Path>엘리먼트 추가

    <Context Path="news" docBase="C:\dev\tomcat\apache-tomcat-9.0.69\webapps\newsApplication" privileged="true"/>

    localhost:8080/news와 같이 news로 시작하는 요청들은 모두 webapps/newsApplication 디렉토리 내부에서 파일을 찾아 클라이언트의 요청에 응답한다.

    localhost:8080/news/test.txt<- newsApplication디렉토리의 test.txt파일을 찾아 응답


    • Servlet의 경우 url 요청 주소 맵핑하는 법

    서블릿 클래스들은 모두 WEF-INF의 classes디렉토리에 위치해야함

     

    SampleServlet.java

    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServlet;
    
    public class SampleServlet extends HttpServlet {
    
    	@Override
    	public void service(ServletRequest req, ServletResponse res) 
        	throws ServletException, IOException {
    		System.out.println("SampleServlet's service method called");
    	}
    }

     

    SampleServlet.class

    컴파일시켜 클래스 파일 배치

     

    서블릿은 정적 리소스가 존재하는 디렉토리 구조에 맞춰 /를 끊은 url방식으로 요청하는 것이 아닌 web.xml에 어떠한 서블릿이 존재한다는 것과 각각의 서블릿이 처리할 url 패턴을 기술해야한다.

      <servlet>
            <servlet-name>sample servlet</servlet-name>
            <!-- 패키지.클래스 -->
            <servlet-class>SampleServlet</servlet-class>
      </servlet>
    
       <servlet-mapping>
            <servlet-name>sample servlet</servlet-name>
            <!-- SampleServlet이 처리할 url 패턴 정의 -->
            <url-pattern>/sampleservlet/*</url-pattern>
       </servlet-mapping>

     

    톰캣 재시작 후 localhost:8080/news/sampleservlet/모든문자열 에 해당하는 url 요청은 SampleServlet이 처리한다.

     

    @WebServlet 어노테이션을 사용하면 web.xml에 기술하지 않아도 된다.

     

    web.xml에서 어노테이션을 탐색을 수행하도록 boolean값을 변경해야 한다.

    true에서 false로 변경

     

    SampleServlet2.java

    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    
    @WebServlet("sampleservlet2/*")
    public class SampleServlet2 extends HttpServlet {
    	@Override
    	public void service(ServletRequest req, ServletResponse res) 
        throws ServletException, IOException {
    		
    	}
    }

     

    SampleServlet2.class

     

    톰캣 재시작 후 url 요청


    • url pattern

    $/conf/web.xm(부모 web.xml)에 설정되어 있는 서블릿과 서블릿 url 맵핑

        <servlet>
            <servlet-name>default</servlet-name>
            <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
            <init-param>
                <param-name>debug</param-name>
                <param-value>0</param-value>
            </init-param>
            <init-param>
                <param-name>listings</param-name>
                <param-value>false</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
    
        <!-- The mapping for the default servlet -->
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
        <servlet>
            <servlet-name>jsp</servlet-name>
            <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
            <init-param>
                <param-name>fork</param-name>
                <param-value>false</param-value>
            </init-param>
            <init-param>
                <param-name>xpoweredBy</param-name>
                <param-value>false</param-value>
            </init-param>
            <load-on-startup>3</load-on-startup>
        </servlet>
    
        <!-- The mappings for the JSP servlet -->
        <servlet-mapping>
            <servlet-name>jsp</servlet-name>
            <url-pattern>*.jsp</url-pattern>
            <url-pattern>*.jspx</url-pattern>
        </servlet-mapping>

    댓글

Designed by Tistory.