[Spring] SpringBoot JSTL 사용하여 Controller 에서 ModelAndView를 이용하여 View로 넘겨주기

이혜지·2021년 1월 19일
1

Spring

목록 보기
9/15
post-thumbnail

환경

  • VScode
  • Spring Boot
  • Gradle
  • Controller-Model-Service-Repository 구조
  • JPA 사용

SpringBoot를 이용하여 Restful한 api를 만들었다.
crud 기능을 가지고있는 api를 호출하면 json형식을 리턴하는 함수를 작성했다가,
Controller 단에서 jsp파일로 값을 보내고싶었다.
단, ajax가 아니라 jstl를 이용해서 list를 table형식에 뿌려서 확인하고 싶었다.

처음엔 Service단에서 아예 JSON으로 값을 받게끔 작성하였다가,
jstl에서 사용할 <c:forEach> 가 map혹은 list 형식을 받기때문에 JSON String Type이 아니라,
List나 ArrayList로 값을 jsp파일로 넘겨줘야 했다.

넘겨줄때는 ModelAndView를 사용하여 넘겨준다.


Controller단
UserController.java

@RestController
@RequestMapping("/")
public class UserController {
    
    @Autowired
    private UserService userService;

    @GetMapping(value = "/usersList.do", produces = MediaType.APPLICATION_JSON_VALUE)
    public ModelAndView getAllUsers(){

        ArrayList<User> users = userService.getAllUsersForJstl();
        
        ModelAndView mav = new ModelAndView("/listUsers"); //뷰이름직접지정 
        mav.addObject("users", users);

        return mav;

    }

Model단
User.java


@Getter
@Setter
@ToString
@Entity(name = "users")
public class User {
    //DAO + DTO와 같은 역할 ..
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int user_id;

    private String name;

    private String email;

}

Repository단
UserRepository.java

public interface UserRepository extends JpaRepository<User, Integer>{
    //DAO랑 같은 역할 ,,
    ArrayList<User> findByNameContaining(String name);
}

Service단
UserService.java

  //모든 유저 정보 가져오기
        public ArrayList<User> getAllUsersForJstl() {
            ArrayList<User> users = (ArrayList<User>) userRepository.findAll();
                       System.out.println(users.toString());
                return users;
        }

JSP파일
listUsers.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 목록</title>
</head>

<body>
   <table border="1">
    <tr>
        <td>번호</td>
        <td>이름</td>
        <td>이메일</td>
    </tr>
    <c:forEach var="user" items="${users}">
    <tr>
        <td>${user.user_id}</td>
        <td>${user.name}</td>
        <td>${user.email}</td>
        
    </tr>  
    </c:forEach>
</table>

</body>

</html>

localhost:port/userList.do 로 들어가면

JSTL forEach 문으로 table 생성

profile
공유 문화를 지향하는 개발자입니다.

0개의 댓글