RequestDispatcher
- 현재의 요청에 대한 정보를 저장했다가 다른 자원(Servlet,JSP,HTML 등) 으로 전달(forward,include)하는 기능을 제공한다.
RequestDispatcher는 같은 웹 애플리케이션 내에서 다른 리소스로 요청을 전달하거나 포함하는 데 사용되는 객체이다. 이는 Servlet API의 일부이며 웹 애플리케이션에서 Model-View-Controller (MVC) 아키텍처를 구현하는 데 일반적으로 사용된다.
RequestDispatcher 인터페이스는 forward()와 include() 두 가지 메서드를 제공한다.
- forward() 메서드는 JSP 페이지와 같은 다른 리소스로 제어를 전송하는 데 사용된다.
- include() 메서드는 다른 리소스의 출력을 현재 페이지의 출력에 포함시키는 데 사용된다.
즉, RequestDispatcher는 다른 페이지나 서블릿으로 현재 요청을 보내거나 다른 페이지나 서블릿의 출력을 현재 페이지에 포함시키는 데 사용된다.. 이를 통해 웹 애플리케이션에서 유연한 처리가 가능해지며, 코드의 재사용성이 높아진다.
Servlet Filter
- 지정한 URL 패턴에 해당하는 요청에 대해 서블릿 실행 전후에 해당 요청이나 응답에 공통적으로 적용할 작업을 수행하는 객체를 뜻한다.
- 필터 체인 형태로 제공된다.
Servlet Filter
Servlet Filter는 Java Servlet API에서 제공하는 기능 중 하나로, HTTP 요청과 응답을 처리하기 전에 그 사이에서 추가적인 처리를 수행할 수 있도록 해주는 컴포넌트이다.
Filter는 일종의 체인 형태로 동작한다.
클라이언트가 서버에 요청을 보내면, 이 요청은 Filter 체인의 맨 앞에서부터 순차적으로 각 Filter를 거치며 필터링된다. 필터링은 일반적으로 요청과 응답의 헤더와 바디를 수정하거나, 인증과 권한 부여를 위한 처리, 요청과 응답에 대한 로깅 등의 작업을 수행한다.
Filter는 다음과 같은 장점을 제공한다
- 중복 코드 제거: 여러 서블릿에서 공통으로 사용되는 코드를 Filter로 분리하여 중복을 제거할 수 있다.
- 보안 강화: Filter를 이용하여 모든 요청에 대한 보안 검사나 인증 처리 등을 통합적으로 수행할 수 있다.
- 코드 가독성 향상: 서블릿 코드에서 비즈니스 로직과 관계 없는 처리를 Filter로 분리하여 코드 가독성을 향상시킬 수 있다.
Filter는 javax.servlet.Filter 인터페이스를 구현하여 작성된다.
또한 web.xml 파일에서 필터의 매핑과 순서를 설정할 수 있다.
최근에는 @WebFilter 어노테이션을 사용하여 필터를 등록하는 방법도 제공됩니다.
Listener
- Servlet Container가 수행한 특정한 타입의 동작(이벤트)를 감지하여 해당 이벤트에 대해 별도의 작업을 수행하는 객체이다.
Listener
Event Source | Event | Event Listener | |
ServletContext | ServletContextEvent | ServletContextListener | 웹 애플리케이션 시작, 종료 |
ServletContext | ServletContextAttributeEvent | ServletContextAttributeListener | ServletContext 속성 변경 |
HttpSession | HttpSessionEvent | HttpSessionListener | 세션 시작, 종료 |
HttpSession | HttpSessionBindingEvent | HttpSessionAttributeListener | 세션 속성 변경 |
ServletRequest | ServletRequestEvent | ServletRequestListener | ServletRequest 생성, 종료 |
ServletRequest | ServletRequestAttributeEvent | ServletRequestAttributeListener | ServletRequest 속성 변경 |
MIME (Multipurpose Internet Mail Extensions)
- 전자 우편을 위한 인터넷 표준 포맷
- MIME 형식의 이메일 메세지는 SMTP나 POP,IMAP 같은 표준 프로토콜로 전송된다.
MIME(Multipurpose Internet Mail Extensions) 타입은 웹에서 파일의 형식을 구분하기 위해 사용된다.
자주사용하는 MIME TYPE
- text/html : HTML 문서를 나타내는 MIME 타입이다. 웹 브라우저에서 HTML 문서를 받을 때 사용된다.
- text/plain : 일반 텍스트를 나타내는 MIME 타입이다. 예를 들어, 서블릿에서 출력하는 일반 텍스트 메시지를 브라우저에서 받을 때 사용된다.
- image/jpeg : JPEG 형식의 이미지를 나타내는 MIME 타입이다. 웹 페이지에서 이미지를 보여줄 때 사용된다.
-image/png : PNG 형식의 이미지를 나타내는 MIME 타입이다.. JPEG 대신 PNG를 사용하면 이미지의 투명도와 압축률이 더 좋아지는 등의 이점이 있다.
- application/pdf : PDF 문서를 나타내는 MIME 타입이다. 웹 페이지에서 PDF 문서를 보여줄 때 사용된다.
- application/json : JSON 데이터를 나타내는 MIME 타입이다. 웹 페이지에서 JSON 데이터를 전송하거나 받을 때 사용된다.
- application/xml : XML 데이터를 나타내는 MIME 타입이다. 웹 페이지에서 XML 데이터를 전송하거나 받을 때 사용된다.
- application/octet-stream : 이진 파일을 나타내는 MIME 타입이다. 예를 들어, 파일 다운로드 기능을 구현할 때 사용된다.
위와 같은 MIME 타입은 서블릿과 JSP에서 응답(Response)을 생성할 때 Content-Type 헤더에 설정하여 클라이언트(웹 브라우저)가 올바르게 인식하도록 해야 한다.
Servelt 3.0 Annotation
Java 어노테이션(Annotation)은 소스 코드에 메타데이터를 추가하는 방법 중 하나이다. 메타데이터는 프로그램의 동작이나 구조에 대한 정보를 담고 있다. 어노테이션은 주로 컴파일러, 개발 도구, 프레임워크 등이 사용하며, 코드에 대한 정보를 부여하여 자동화된 프로세스를 지원하거나 코드를 문서화하는 데 도움이 된다.
- @WebServlet
- Web.xml에서 <Servlet>, <Servlet-mapping> 제거
- @WebServlet 추가
-
@Slf4j @WebServlet(name = "fileUploadServlet", urlPatterns = "/file/fileUpload") public class FileUploadServlet extends HttpServlet { // ... }
- @WebInitParam
- .@WebServlet 내부에 <init-param> , </init-param> 제거
- @WebInitParam 추가
-
@WebServlet( name = "loginServlet", urlPatterns = "/login", initParams = { @WebInitParam(name="id",value = "admin"), @WebInitParam(name="pwd",value = "1234"), } ) public class LoginServlet extends HttpServlet { // ... }
- @WebFilter
- <filter>, </filter-mapping> 제거, @WebFilter 추가
-
@WebFilter( filterName = "characterEncodingFilter", urlPatterns = "/*", initParams = { @WebInitParam(name = "encoding", value = "UTF-8") } ) public class CharacterEncodingFilter implements Filter { // ... }
- @WebListener
- <listener> 제거, @WebListener 추가
-
@WebListener public class ServletContextListener implements javax.servlet.ServletContextListener { // ... }
- @MultipartConfig
<context-param>
javax.servlet.ServletContainerInitializer interface
- 웹 애플리케이션 초기화 단계에서 프로그램적으로 Servlet, Filter, Listener 등을 등록할 수 있는 인터페이스이다.
- 서버가 실행될 때 ServletContainerInitializer service provider를 찾은 뒤 @HandleTypes로 정의된 클래스를 실행한다.
public interface ServletContainerInitializer { public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException; }
ServletContainerInitializer 구현
javax.servlet.ServletContainerInitializer 파일 생성
- resources/META-INF/services 폴더 하위에 javax.servlet.ServletContainerInitializer 파일 생성 후
- 파일 내용으로 구현 클래스 FQCN (Fully Qualifide Class Name)을 작성한다.
@HandlesTypes(value = {
javax.servlet.http.HttpServlet.class,
javax.servlet.Filter.class,
javax.servlet.ServletContextListener.class,
javax.servlet.http.HttpSessionListener.class
})
public class WebAppInitializer implements ServletContainerInitializer {
@Override
public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("url","https://nhnacademy.com");
servletContext.setInitParameter("counterFileName","counter.dat");
}
}
- web.xml에서 context-param을 제거한다.
'2024 SW ACADEMY' 카테고리의 다른 글
POJO, Java Beans (1) | 2024.01.23 |
---|---|
JAVA Servlet / jsp (1) (0) | 2024.01.19 |
CSS/JAVASCRIPT (1) | 2024.01.17 |
관계 대수 질의 (0) | 2024.01.10 |