public void setLocale(Locale loc);
public void setCharacterEncoding(String charset);
public void setContentType(String type);
public void setContentLength(int len);
public void setContentLengthLong(long len);
public PrintWriter getWriter() throws IOException;
public ServletOutputStream getOutputStream() throws IOException;
public void setBufferSize(int size);
public int getBufferSize();
public void flushBuffer() throws IOException;
public void resetBuffer();
public boolean isCommitted();
//...
HttpServletResponseAPI
public void setHeader(String name, String value);
public void addHeader(String name, String value);
public void setStatus(int sc);
public void sendError(int sc, String msg) throws IOException;
public void sendRedirect(String location) throws IOException;
public void addCookie(Cookie cookie);
// ...
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 {
// ...
}