-
[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값을 변경해야 한다.
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>