[Spring 13-2] 리소스 파일(이미지 파일) 불러오는 방법

임승현·2023년 2월 24일

Spring

목록 보기
37/46

🌈요청 처리 클래스 생성

📃ResourceController.java

※ xyz.itwill10.controller 패키지에 ResourceController.java 클래스 생성

package xyz.itwill10.controller;
//
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
//
@Controller
public class ResourceController {
	@RequestMapping("/resource")
	public String resource() {
		return "resource_display";
	}
}

🌈JSP 문서 생성

📃resource_display.jsp

※ WEB-INF/views 폴더에 resource_display.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
<link href="<c:url value="/css/style.css"/>" type="text/css" rel="stylesheet">
</head>
<body>
	<h1 class="text">리소스 파일</h1>
	<hr>
	<%-- 리소스 파일(Resource File) : 클라이언트가 웹문서(HTML 문서)를 해석하여 실행하기 위해 필요한 정보를 제공하는 서버에 저장된 파일 --%>
	<%-- → CSS 파일, JavaScript Source 파일, 멀티미디어 파일 등 --%>
	<%-- → 리소스 파일을 WEB-INF 폴더에 저장할 경우 클라이언트는 리소스 파일 요청 불가능  --%>
	<%-- WEB-INF 폴더 : 웹서버에서 실행되는 프로그램(서블릿)에서만 접근 가능한 폴더 - 클라이언트에게는 은닉화 처리 --%>
	<%--                                                                                                           --%>
	<%-- SpringMvc 프로그램에서는 클라이언트의 모든 요청을 Front Controller를 이용하여 처리되도록 설정 --%>
	<%-- 문제점) 클라이언트가 서버의 리소스 파일을 요청할 경우 Front Controller가 요청을 받아 
		리소스 파일의 요청 URL 주소와 매핑된 요청 처리 메소드를 검색하지만 존재하지 않으므로 404 에러코드 발생 --%>
	<%-- → Front Controller을 특정 확장자로 요청하는 경우 제외 --%>
	<%-- 해결법) 클라이언트가 리소스 파일을 요청한 경우 Front Controller가 요청처리 메소드를 호출하지 않고 
		직접 응답되도록 Spring Bean Configuration File 설정 - servlet-context.xml --%>
	<%--                                                                                                           --%>
	<%-- 리소스 파일을 상대경로로 표현하여 처리한 경우 페이지의 요청 URL 주소 경로와 리소스 파일의 경로가 다른 경우 404 에러코드 발생 --%>
	<%-- → 리소스 파일은 절대경로로 표현하는 것을 권장 --%>
	<img src="images/Koala.jpg" width="200">
	<%--                                                                                                           --%>
	<%-- 컨텍스트 이름이 변경될 경우 컨텍스트 경로가 변경되어 404 에러 코드 발생 --%>
	<%-- → 컨텍스트 경로는 직접 지정하지 않고 객체로 제공받아 사용 --%>
	<img src="/spring/images/Koala.jpg" width="200"><%-- 절대경로로 적용 --%>
	<%-- 컨텍스트 경로를 EL의 pageContext 내장객체로 제공받아 사용 --%>
	<img src="${pageContext.request.contextPath }/images/Koala.jpg" width="200"><%-- 컨텍스트 경로로 적용 --%>
	<%-- 컨텍스트 경로를 Core 태그 라이브러리의 URL 태그로 제공받아 사용 --%>
	<img src="<c:url value="/images/Koala.jpg"/>" width="200"><%-- 코어 태그 라이브러리 적용 --%>
	<%-- 컨텍스트 경로를 Spring 태그 라이브러리의 URL 태그로 제공받아 사용 --%>
	<img src="<spring:url value="/images/Koala.jpg"/>" width="200"><%-- 코어 태그 라이브러리 적용 --%>
</body>
</html>

🌈환경설정 수정

📃servlet-context.xml

※ src/main/webapp/WEB-INF/spring/appServlet 폴더에 servlet-context.xml 수정

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<!-- resources : 클라이언트 요청을 Front Controller가 직접 응답 처리되도록 설정하는 엘리먼트 -->
<!-- → 클라이언트의 리소스 파일 요청에 대한 응답 처리를 위해 사용하는 엘리먼트 -->
<!-- mapping 속성 : 클라이언트에 의해 요청되는 리소스 파일의 요청 URL 주소 패턴을 속성값으로 설정 -->
<!-- → [**] 패턴 문자를 속성값으로 사용한 경우 현재 폴더 및 하위 폴더의 리소스 파일 요청 가능 -->
<!-- location 속성 : 클라이언트 요청에 의해 리소스 파일을 검색하기 위한 폴더를 속성값으로 설정 -->
<!-- <resources mapping="/resources/**" location="/resources/" /> -->
<resources mapping="/images/**" location="/resources/images/" />
<resources mapping="/css/**" location="/resources/css/" />

📢이미지 파일 저장 위치


※ src/main/webapp/resources 폴더에 저장
※ resources 폴더에 image 폴더를 새로 만들어서 저장 가능

0개의 댓글