ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로필 페이지 5
    Spring Boot/프로필 페이지 만들기 2021. 12. 16. 21:23

    이제 실제로 프로필 화면에 업로드한 이미지를 뿌려보도록 한다.

     

    UserController.java 에서 profile.jsp 파일에 Model 객체로 넘겨준 userEntity 를 사용하기만 하면된다.

     

    <UserController.java> 파일

     

    	@GetMapping("/user/{id}")
    	public String profile(@PathVariable int id, Model model) {
    		User userEntity = userService.회원프로필(id);
    		model.addAttribute("user", userEntity);
    		return "user/profile";
    	}

     

     

     

     

    UserController.java 파일에서 

    	model.addAttribute("user", userEntity);

    이렇게 profile.jsp 파일에 데이터를 전달해주기 때문에, profile.jsp 파일에서는 이 데이터를 사용하려면

    ${user.name} 이런식으로 사용하면 됨.

    여기서 user는, user 테이블(모델?)을 의미하므로 user.name은 user 테이블에 있는 name 변수 값을 사용한다는 뜻

     

    특히, ${} 이런 식으로 사용 하는 것을 EL 표현식이라고 하는데,

    여기서는 그냥 변수명 user.name 같이 사용하면,

    user.getName 이 되는 거임

    (get 함수 자동 호출)

     

     

    여러 이미지를 뿌리기 위해, profile.jsp 파일에서 아래와 같이 <c:forEach> 문법 사용

    (profile.jsp 파일이 양이 많아서 필요한 부분만 조금씩 첨부하겠음)

     

    			<c:forEach var="image" items="${user.images}">
    				<div class="img-box">
    					<a href=""> <img src="/upload/${image.postImageUrl}"/>
    					</a>
    					<div class="comment">
    						<a href="#" class=""> <i class="fas fa-heart"></i><span>0</span>
    						</a>
    					</div>
    				</div>
    			</c:forEach>

     

     

    아래 코드의 뜻은,

    	<c:forEach var="image" items="${user.images}">

     

    user 모델에서 images 변수 값들을 가져와서 itmes 에 담고,

    그 값들을 하나하나 image 라고 하여 forEach 를 돌면서

    forEach 문 내부에 있는 아래의 코드에서 사용

     

    <img src="/upload/${image.postImageUrl}" />

     

    위의 <img src>를 자세히 설명하자면,

    여기에는 이미지 경로(위에서 /upload/부분) + 파일명(postImageUrl 부분 )이 나와야 하는데, 

    이 자료들은 우리가 프로필 페이지 1,2 글에서 만들었던 1) 경로와 2) postImageUrl  에 있다.

     

     

    1) C:/Hello/Hi/upload/ 

    -> application.yml 에 설정함

    (참고 : 프로필 페이지 1 글 : https://happy-fun.tistory.com/170)

     

    2) postImageUrl 

    -> UUID + 파일명(a.jpg 등)

    (참고 : 프로필 페이지 2 글 : https://happy-fun.tistory.com/171)

     

    2개가 필요하다.

    그래야,

    " C:/Hello/Hi/upload/ "  경로에 있는,

    " UUID + 파일명 " 이름을 갖는 파일을 찾을 수 있음

     

     

    이 때 

    2) postImageUrl 을 적으면 그 앞에 자동으로 1) application.yml 에서 설정한 경로를 붙여주도록 하는 방법이 있음

    WebMvcConfig.java 파일 만듦

     

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer{
    
    	
    	@Value("${file.path}")
    	private String uploadFolder;
    	
    	@Override
    		public void addResourceHandlers(ResourceHandlerRegistry registry) {
    			WebMvcConfigurer.super.addResourceHandlers(registry);
    			
    			
    			registry
    				.addResourceHandler("/upload/**") 
    				.addResourceLocations("file:///"+uploadFolder)
    				.setCachePeriod(60*10*6) 
    				.resourceChain(true)
    				.addResolver(new PathResourceResolver());
    		}
    }

     

     

     

     

     

    @Configuration : ioc 

     

    WebMvcConfigurer 를 implements 하여,

    WebMvcConfig 클래스는 web 설정 파일이 됨

     

    ImageService.java 파일에서 했던 것처럼,

    	@Value("${file.path}")
    	private String uploadFolder;

    이런식으로 하여 application.yml 파일에 설정한 경로,

     

    <application.yml> 파일

    path 를 예를 들어 C:/Hello/Hi/upload/ 

    를 가져온다.

     

    즉, 위의 변수 uploadFolder 에는 C:/Hello/Hi/upload/  이 값이 들어가 있음

     

    1) 

    .addResourceHandler("/upload/**")

    jsp페이지에서 /upload/** 이런 주소 패턴이 나오면 아래 코드가 발동

     

    즉 예를 들어 profile.jsp 파일에서

     

    <img src="/upload/${image.postImageUrl}" />

    이런식으로 사용할 수 있음 (/upload/) 이렇게

     

     

    2) 

    	.addResourceLocations("file:///"+uploadFolder)

    즉, profile.jsp 파일에서 /upload/** 이런 주소를 사용했다면

    "file:///"+uploadFolder

    얘가 발동됨.

    그런데, uploadFolder 는, C:/Hello/Hi/upload/ 이 값임.

     

     

    즉, 다시 정리하자면 jsp 파일에서

    /upload/** 이런 주소를 사용했다면,

    file:///C:/Hello/Hi/upload/

    이렇게 된다는 거임

     

     

    .setCachePeriod(60*10*6)

    유효기간 

    60 초 * 10 = 10분

    10분 * 6 = 1시간

     

    .resourceChain(true)

    이렇게 true 라고 해주면 이것들이 발동되고

     

    .addResolver(new PathResourceResolver());

    이렇게 해주면 됨.

     

     

    **

    나중에 사용할 때 우리가 변경해줘야 하는 부분은

     

    1)

    .addResourceHandler("/upload/**")

    여기서 "/upload/**"

     

    2)

    	.addResourceLocations("file:///"+uploadFolder)

    여기서 "file:///"+uploadFolder

     

    이 2개 주소 부분만 바꿔주면 됨 

     

     

     

    이렇게 한 다음,

    즉,UserController.java 에서 profile.jsp 파일에 Model객체로 데이터 전달해주고, 

    WebMvcConfig.java 설정 파일 만든 다음 

    profile.jsp 파일에서 ${} 이 식으로 사용하면

     

    프로필 화면이 아래와 같이 변하게 됨.(네모친 부분)

     

     

     

    hi는 사용자의 name 값이다.

    profile.jsp 파일에 아래와 같이 입력하면 사용자의 name 값이 나옴

     

    ${user.name}

    아래의 코드는 profile.jsp 파일에서 이미지를 나타내는 부분.

     

    			<c:forEach var="image" items="${user.images}">
    				<div class="img-box">
    					<a href=""> <img src="/upload/${image.postImageUrl}"/>
    					</a>
    					<div class="comment">
    						<a href="#" class=""> <i class="fas fa-heart"></i><span>0</span>
    						</a>
    					</div>
    				</div>
    			</c:forEach>

     

     

     

    UserController.java 파일로부터 model 객체에서 받은 데이터들을 

    items = "${user.images}" 에 담고

    forEach 문을 돌면서

    이 데이터들을 하나씩 꺼내 image 라는 이름으로 사용함

     

    <img src="/upload/${image.postImageUrl}"/>

    이 코드에서 사용하는데, 즉 서버의 

    /upload 주소에 있는 각 이미지들을 가져와서 화면에 뿌리라는 뜻

     

     

     

    그리고 만약 프로필 화면에서 이미지에서 오른쪽 버튼 클릭 후 검사 버튼을 누르면

    아래와 같이 /upload/UUID값 logo.jpg

    를 볼 수 있다.

    logo.jpg는 업로드한 이미지 파일 이름이다.

     

     

     

    참고자료 : 이지업 강의 사이트 "스프링부트 SNS프로젝트 - 포토그램 만들기"

     

     

     

    'Spring Boot > 프로필 페이지 만들기' 카테고리의 다른 글

    프로필 페이지 8  (0) 2021.12.18
    프로필 페이지 7 - @JsonIgnoreProperties  (0) 2021.12.18
    프로필 페이지 4  (0) 2021.12.16
    프로필 페이지 3  (0) 2021.12.15
    프로필 페이지 2  (0) 2021.12.15

    댓글

Designed by Tistory.