📃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"; } }
📃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 폴더를 새로 만들어서 저장 가능