본문 바로가기
Java

서블릿과 서블릿 컨텍스트(html 파일 불러오기)

by 개발자공부 2024. 7. 1.

서블릿 컨텍스트( ServletContext )

ServletContext는 웹 애플리케이션의 실행 환경을 나타내는 객체이다. 애플리케이션 전반에 걸쳐 공유되는 정보를 제공하고 애플리케이션 자원에 접근할 수 있게 해준다. ServletContext는 웹 애플리케이션이 초기화될 때 서버에 의해 생성되며, 애플리케이션이 종료될 때까지 유지된다.

 

ServletContext 주요 역할

▶ 초기화 파라미터 읽기 : web.xml에 정의된 초기화 파라미터를 읽을 수 있다.

▶ 로그 작성 : 애플리케이션 수준의 로그를 작성할 수 있다.

▶ 자원 접근 : 웹 애플리케이션의 자원(파일 등)에 접근할 수 있다.

▶ 다른 서블릿과의 통신 : 다른 서블릿이나 JSP와 정보를 공유할 수 있다.

 

getResourceAsStream 메서드

ServletContext의 메서드로 지정된 경로에 있는 자원을 InputStream으로 반환한다. 이를 통해 웹 애플리케이션 내의 파일을 읽을 수 있다.

// 현재 서블릿의 ServletContext 객체를 가져옵니다.
ServletContext context = getServletContext(); 

// 지정된 경로에 있는 자원을 읽어들입니다. 
// 반환된 InputStream을 통해 파일의 내용을 읽을 수 있습니다.
InputStream inputStream = context.getResourceAsStream(htmlFilePath);

 


시나리오 코드

package com.tenco.controller;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

@WebServlet("/todolist")
public class TodoListServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public TodoListServlet() {
        super();
    }

    // GET 방식
    // http://localhost:8080/class_servlet_01/todolist
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 다시 HTML 형식을 만들어서 클라이언트에게 내려주는 것은 서블릿에게 너무 불편하다.
		// 서블릿 컨텍스트라는 객체를 활용해서 코드를 만들어보자.
		
		response.setContentType("text/html; charset=UTF-8");
		
		// HTML 파일 읽기 (파일명에 오타가 없도록 주의)
		String htmlFilePath = "/todoListPage.html";
		// 지정된 경로에 있는 자원을 읽어들인다.
		// 반환된 InputStream을 통해 파일의 내용을 읽을 수 있다.
		InputStream inputStream = getServletContext().getResourceAsStream(htmlFilePath);
		// 읽어들이는 값이 null일 때 방어적 코드
		if(inputStream == null) {
			response.getWriter().write("<html><body>해당 파일을 찾을 수 없음 404</body></html>");
		}
		
		BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
		// 단일 스레딩 - StringBulider
		// 멀티 스레딩 - StringBuffer
		StringBuffer htmlContent = new StringBuffer();
		String line;
		while((line = reader.readLine()) != null) {
			htmlContent.append(line);
		}
		// 자원 닫기
		reader.close();
		response.getWriter().write(htmlContent.toString());
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Todo List</title>
    <style type="text/css">
        body {
            background-color: #eee;
        }

        .wrapper {
            text-align: center;
            width: 500px;
            margin: 50px auto;
            background-color: #fff;
            padding: 50px 10px 100px;
            border-radius: 20px;
            box-sizing: border-box;
        }

        .quick_menu {
            display: flex;
            flex-direction: column;
        }

        .quick_menu a {
            background-color: #eee;
            text-decoration: none;
            color: #333;
            border-radius: 6px;
            padding: 10px;
            margin: 5px;
            background-color: #eee;
        }
    </style>
</head>

<body>
    <div class="wrapper">
        <div>
            <h1>할 일 목록</h1>
        </div>
        <div class="quick_menu">
            <a
                href="https://www.11st.co.kr/?gclid=EAIaIQobChMIq7bQv6iFhwMV6cNMAh1kOAPCEAAYASAAEgKtYPD_BwE&gad_source=1&utm_term=11+%B9%F8%B0%A1&utm_campaign=%B1%B8%B1%DBPC_11%B9%F8%B0%A1&utm_source=%B1%B8%B1%DB_PC_S&utm_medium=%B0%CB%BB%F6">11번가
                홈페이지</a>
            <a href="https://www.kyobobook.co.kr/">교보문고 홈페이지</a>
            <a
                href="https://www.sambamall.com/main.do?&utm_source=google_pc&utm_medium=cpc&utm_content=PC-01-Bicycle_main&utm_term=%7Bkeyword%7D&gad_source=1&gclid=EAIaIQobChMIiNza_qiFhwMVQdAWBR2diwJNEAAYASAAEgJw1_D_BwE">삼천리
                자전거 홈페이지</a>
            <a href="https://www.acmicpc.net/">백준 홈페이지</a>
        </div>
    </div>
</body>

</html>

 

실행결과

 

'Java' 카테고리의 다른 글

서블릿과 데이터베이스 연동  (0) 2024.07.01
디자인 패턴 - 싱글톤 패턴  (0) 2024.07.01
Get, Post 요청 방식 이해하기  (1) 2024.07.01
Dynamic Web Project 1  (0) 2024.06.29
DAO,DTO,VO,Entity  (0) 2024.06.21