Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- grpc
- Linux
- IntelliJ
- error
- 리액트
- MySQL
- Jenkins
- vue.js
- jenkins 설치
- nginx
- JavaScript
- spring
- java
- Docker
- Jenkins Pipeline
- jenkins github
- MongoDB
- REACT
- CI/CD
- jenkins jdk
- jenkins install
- jpa
- subnetmask
- grafana
- Spring Boot
- jenkins github 연동
- gradle
- jenkins maven
- docker network
- 리눅스
Archives
- Today
- Total
뭐든 즐기면서 ;)
JAVA Servlet API 본문
728x90
Servlet API
- JAVA를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램입니다.
- JAVA로 작성되어 있으므로 JAVA의 특징을 모두 가지고 있습니다.
- 독자적으로 실행가능한 일반적인 JAVA 코드와는 다르게(JVM) 톰캣과 같은 JSP/Servlet 컨테이너에서 실행됩니다.
- JSP/Servlet 컨테이너 종류
- Tomcat
- JEUS
- Web Logic
- JBOSS 등
- JSP/Servlet 컨테이너 종류
- JSP/Servlet 컨테이너에서 제공하는 servlet-api 관련 jar파일을 사용합니다.
- Tomcat에 경우 \%CATALINA_HOME\%\lib\servlet-api.jar 파일을 제공받습니다.
- 서버에서 실행되므로 보안 강화
- 스레드 방식으로 실행
서블릿 request/response 과정
Client ( request ) > Web Server ( Was로 처리 위임 ) > Was Server ( Servlet 호출하여 기능 수행[코드실행] )
> Was Server ( 결과 반환 ) > Web Server > Client ( response )
서블릿 생명주기
서블릿도 Java Class의 일종이므로 인스턴스가 생성돼(메모리에 적재) 사용되어지고 서비스 수행 후 소멸하는 과정을 거칩니다.
- Servlet의 생명주기 메서드
- init() - 서블릿 실행 초기에 기능 수행과 관련된 것을 설정할 때 호출합니다.
- doGet(), doPost() - HttpServletRequest, HttpServletResponse를 매개변수로 받습니다.
- destroy() - 서블릿이 메모리에서 소멸될 때 호출됩니다.
서블릿 class 작성
package practice.servletApi;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SampleServlet extends HttpServlet {
@Override
public void init() throws ServletException {
System.out.println("init 메서드 호출");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet 메서드 호출");
}
@Override
public void destroy() {
System.out.println("destory 메서드 호출");
}
}
서블릿 url 매핑
- 각 프로젝트 하위의 web.xml 에 설정합니다. (project/src/webapp/WEB-INF/web.xml)
- 아래와 같이 여러개로 선언 가능합니다. ( http://www.domain.com/*.do 와 같은 형식으로 요청가능.)
- <servlet/> <servlet-mapping/> 태그를 이용합니다. 여러개의 Servlet클래스를 사용할 때 <servlet>태그를 씁니다.
- <servlet-mapping><servlet-name>에 적은 <servlet>이 url과 매핑되어 해당하는 HttpServlet 클래스를 호출합니다.
<servlet>
<servlet-name>servlet1</servlet-name>
<url-pattern>practice.servletApi.SampleServlet</url-pattern>
</servlet>
<servlet>
<servlet-name>servlet2</servlet-name>
<url-pattern>practice.servletApi.SampleServlet2</url-pattern>
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>servlet2</servlet-name>
<url-pattern>*.file</url-pattern>
</servlet-mapping>
서블릿 동작 과정
- client url request
- 톰캣이 web.xml에 서블릿을 확인합니다.
- 톰캣은 해당 서블릿이 메모리에 존재하는지 확인합니다. 존재할 경우에는 6번으로 이동합니다.
- SampleServlet, SampleServlet2를 메모리에 적재합니다.
- init() 메소드 호출
- doGet() 또는 doPost() 호출
- destroy() 호출 (때에 따라)
- response to client
** 동일한 작업(url)의 경우, 서블릿은 메모리에 적재되어 있는 서블릿 클래스를 재사용합니다.
재사용할 경우 init()호출은 생략되며, doGet() 또는 doPost() 메소드가 호출됩니다.
Spring Servlet의 경우 web.xml은 아래와 같이 작성되어질 것입니다. 자세한 내용은 Spring 카테고리에 작성하겠습니다.
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/spring/servlet-*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
728x90
'BACK > JAVA' 카테고리의 다른 글
HashMap getOrDefault 함수 (0) | 2022.07.05 |
---|---|
JAVA SortedSet 정렬 방법 / JAVA SortedSet Comparable (0) | 2022.06.28 |
Java 올림 / Java Math / Java Math ceil (0) | 2022.03.21 |
JAVA 함수형 인터페이스란 (0) | 2021.11.15 |
JAVA 개념 / JAVA 이론 / JAVA 기본개념 (0) | 2021.11.14 |
Comments