일기장
Published 2023. 5. 19. 19:53
서블릿과 JSP 웹개발

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)  - 데이터 삭제

 

  1. pageContext 저장소:
    • pageContext는 JSP 페이지에서만 사용되는 객체로, JSP 페이지와 관련된 정보를 저장하고 제공합니다.
    • pageContext를 통해 JSP 페이지에서 다른 객체에 접근하고 데이터를 공유할 수 있습니다.
  2. request 저장소:
    • request는 HttpServletRequest 객체를 통해 접근할 수 있는 저장소입니다.
    • 클라이언트의 요청과 관련된 데이터를 저장하고 전달합니다.
    • 요청이 처리되는 동안 데이터가 유지됩니다.
  3. session 저장소:
    • session은 HttpSession 객체를 통해 접근할 수 있는 저장소입니다.
    • 클라이언트와 서버 간의 상태 유지를 위해 사용됩니다.
    • 클라이언트의 접속이 유지되는 동안 데이터가 유지됩니다.
    • 클라이언트들의 개별 저장소이기에 가장 서버의 부담이 많이 가므로 신중한 사용이 요구됩니다.
  4. 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
profile

일기장

@공군급양

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!