1. 싱글톤이란?
- 싱글톤은 객체를 한 번만 만들어서 여러 곳에서 공유하는 방식입니다.
- 이렇게 하면 메모리를 절약할 수 있고, 객체의 일관성을 유지할 수 있습니다.
2. JSP와 서블릿의 관계
- JSP는 웹 페이지를 만들기 위한 기술입니다.
- JSP는 HTML 코드 안에 자바 코드를 넣어서 동적인 웹 페이지를 만들 수 있습니다.
- JSP는 내부적으로 서블릿으로 바뀌어서 실행됩니다.
- 서블릿은 웹 애플리케이션 서버에서 동작하는 자바 클래스입니다.
- 서블릿은 클라이언트의 요청을 받고, 처리한 뒤에 응답을 보내는 역할을 합니다.
3. 서블릿과 Spring의 차이점
- 서블릿은 웹 애플리케이션 개발을 위한 표준 기술입니다.
- Spring은 서블릿을 기반으로 발전시킨 프레임워크입니다.
- Spring은 개발자가 웹 애플리케이션을 편리하게 개발할 수 있도록 도와줍니다.
- Spring은 의존성 주입, 트랜잭션 처리 등 다양한 기능을 제공하여 개발을 쉽게 할 수 있습니다.
4. JSP의 기본객체(request, response, session, application, out)
- JSP 기본 객체는 JSP 페이지에서 자동으로 생성되며, import 없이 사용할 수 있습니다.
- JSP 기본 객체는 JSP 페이지에서 다양한 정보를 저장하고 조작하는 데 사용됩니다.
- JSP 기본 객체는 JSP 페이지의 기능을 확장하는 데 사용할 수 있습니다.
객체 이름 | 설명 |
---|---|
request | 클라이언트의 요청 정보를 저장하는 객체입니다. |
response | 서버의 응답 정보를 저장하는 객체입니다. |
session | 클라이언트의 세션 정보를 저장하는 객체입니다. |
application | 웹 애플리케이션의 정보를 저장하는 객체입니다. |
out | JSP 페이지가 생성하는 결과를 출력하는 객체입니다. |
pageContext | JSP 페이지에 대한 정보를 저장하는 객체입니다. |
exception | 에러 페이지에서만 사용되는 객체입니다. |
5. Servlet Context 내의 저장소
- setAttribute(String name, Object value) - 맵형태의 저장소 안에 데이터 쓰기
- getAttribute(String name) - 데이터 읽기
- removeAttribute(String name) - 데이터 삭제
- pageContext 저장소:
- pageContext는 JSP 페이지에서만 사용되는 객체로, JSP 페이지와 관련된 정보를 저장하고 제공합니다.
- pageContext를 통해 JSP 페이지에서 다른 객체에 접근하고 데이터를 공유할 수 있습니다.
- request 저장소:
- request는 HttpServletRequest 객체를 통해 접근할 수 있는 저장소입니다.
- 클라이언트의 요청과 관련된 데이터를 저장하고 전달합니다.
- 요청이 처리되는 동안 데이터가 유지됩니다.
- session 저장소:
- session은 HttpSession 객체를 통해 접근할 수 있는 저장소입니다.
- 클라이언트와 서버 간의 상태 유지를 위해 사용됩니다.
- 클라이언트의 접속이 유지되는 동안 데이터가 유지됩니다.
- 클라이언트들의 개별 저장소이기에 가장 서버의 부담이 많이 가므로 신중한 사용이 요구됩니다.
- application 저장소:
- application은 ServletContext 객체를 통해 접근할 수 있는 저장소입니다.
- 웹 애플리케이션 전체에서 공유되는 데이터를 저장하고 관리합니다.
- 서버가 실행되는 동안 데이터가 유지됩니다.
6. URL 패턴
URL 패턴은 웹 애플리케이션에서 요청을 처리하는 데 사용되는 패턴입니다. 스프링은 URL 패턴을 통해 어떤 요청을 어떤 핸들러(컨트롤러)가 처리할지를 결정합니다. URL 패턴은 일반적으로 확장자 패턴(.do, .html)이나 경로 패턴(/users/*)으로 지정할 수 있습니다.
@Controller
@RequestMapping("/users")
public class UserController {
@RequestMapping("/{id}")
public String getUser(@PathVariable("id") int userId) {
// 사용자 정보를 가져오는 로직
return "user-profile";
}
}
7. Dispatcher Servlet
Dispatcher Servlet은 스프링 웹 애플리케이션에서 중앙 집중식으로 요청을 처리하는 핵심 컴포넌트입니다. 웹 애플리케이션으로 들어오는 모든 요청을 받아 적절한 핸들러(컨트롤러)로 분배합니다. Dispatcher Servlet은 스프링 컨테이너와 웹 컨테이너 사이의 연결 역할을 합니다.
<web-app>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern> //default로 들어오는 URL패턴들을 모두 dispatcher가 처리하도록 함
</servlet-mapping>
</web-app>
8. Expression Language (EL)
표현 언어(Expression Language, EL)는 JSP에서 데이터를 표현하고 조작하기 위한 스크립트 언어입니다. EL은 JSP 페이지에서 Java 코드를 사용하지 않고도 변수, 속성, 컬렉션 등의 데이터에 접근할 수 있게 해줍니다. EL은 간단하고 직관적인 문법을 제공하여 JSP 페이지의 가독성을 높이고 개발 생산성을 향상시킵니다.
<p>Welcome, ${user.name}!</p>
9. JSTL (JSP Standard Tag Library)
JSTL은 JSP 페이지에서 자주 사용되는 공통 기능을 제공하는 태그 라이브러리입니다. JSTL을 사용하면 반복문, 조건문, 변수 선언 등을 포함한 다양한 작업을 간편하게 처리할 수 있습니다. JSTL은 EL과 함께 사용되어 JSP 페이지
의 로직을 단순화하고 가독성을 높일 수 있습니다.
<c:forEach var="item" items="${cart.items}">
<p>${item.name}: ${item.price}</p>
</c:forEach>
// 이러한 태그 라이브러리를 사용하지 않는다면
// <%{%> <%}%> 이렇게 간단한 중괄호마저도 따로따로 처리하여 가독성이 크게 떨어짐
10. Filter
Filter는 웹 애플리케이션에서 요청과 응답을 처리하는 데 사용되는 컴포넌트입니다. Filter는 Servlet Container에 의해 관리되며, 여러 개의 Filter를 체인 형태로 구성하여 요청 전후의 작업을 처리할 수 있습니다. 스프링에서 Filter는 보안, 인증, 로깅 등과 같은 공통된 작업을 처리하는 데 사용됩니다.
@WebFilter(urlPatterns = "/*") // 이러한 URL패턴으로 들어온 모든 서블릿들에 대해 필터를 적용시킴
public class LoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 요청 전처리 로직
System.out.println("Request logging: " + request.getRemoteAddr());
chain.doFilter(request, response);
// 응답 후처리 로직
System.out.println("Response logging: " + response.getContentType());
}
}
'웹개발' 카테고리의 다른 글
GetMapping, PostMapping (0) | 2023.05.20 |
---|---|
@RequestsParam, @ModelAttribute (0) | 2023.05.20 |
MVC패턴 예제 (0) | 2023.05.17 |
HTTP에서 바이너리 파일 다루기 (0) | 2023.05.15 |
HTTP에 대한 이해 (0) | 2023.05.15 |