상품 목록
먼저 상품목록 출력 기능입니다.
상품 목록의 전반적인 흐름은 아래와 같습니다.
주소창에 http://localhost 라고 입력하면 상품목록이 출력됩니다.
모든 요청은 항상 Controller를 경유하게 됩니다.
ProductController 는 ProductRepository 에게 자료를 요청합니다.
ProductRepository 는 sql 명령어를 생성하여 실행 결과를 Controller에 되돌려줍니다.
Controller는 그 자료를 저장하여 list.html 페이지에 보내 출력시킵니다.
[해설]
@Controller
public class ProductController
@Controller 어노테이션이 붙은 클래스는 Spring Framework에서 관리하는 bean입니다. bean은 Java 클래스의 객체를 의미합니다. 웹애플리케이션이 시작될 때 @Controller 어노테이션이 붙은 클래스가 자동으로 실행되고 메모리에 로딩됩니다.
@Autowired
ProductRepository productRepository;
@Autowired 어노테이션은 ProductRepository 객체를 productRepository 참조변수에 연결시켜주는 역할을 합니다. 이것을 어려운 용어로 의존관계 주입이라고 합니다.
아래와 같은 코드는 참조변수만 있고 실제로 가리키는 내용이 없으므로 아무 일도 할 수 없는 변수입니다.
ProductRepository productRepository;
우변에 ProductRepository 객체가 생성되어 있어야 참조변수를 통해 method를 호출할 수 있습니다.
ProductRepository productRepository=new ProductRepository();
하지만 ProductRepository는 인터페이스이므로 new로 생성을 할 수 없습니다.
스프링 프레임워크의 내부적인 처리에 의해서버가 시작될 때 ProductRepository의 인스턴스가 만들어지고 메모리에 로딩이 된 상태입니다.
Controller의 return은 실제값을 리턴하는 것이 아니라 jsp 페이지 또는 다른 url로 이동하는 기능입니다.
여기서의 redirect는 다른 주소로 이동을 시키는 명령어입니다.
이 코드는 다시 Controller의 / 를 호출하게 됩니다.
@RequestMapping(value = "/", method = { RequestMethod.GET, RequestMethod.POST })
@RequestMapping
url과 method를 연결시켜주는 어노테이션입니다.
value="url pattern"
여기서는 value="/" 이므로 http://localhost/ 를 요청했을 때를 의미합니다.
사용자가 http://localhost 라고 입력하면 public ModelAndView list() method가 호출됩니다.
method = { RequestMethod.GET, RequestMethod.POST }
get 방식 또는 post 방식으로 모두 호출할 경우 실행됩니다.
public ModelAndView list(@RequestParam(defaultValue = "") String productName, ModelAndView mav) {
ModelAndView는 Model + View의 기능을 가지는 클래스입니다. Model에 자료를 저장한 후 지정된 View로 이동하는 기능을 제공합니다.
@RequestParam(defaultValue = "")
html form에서 전달된 데이터를 변수에 매핑시켜 주는 어노테이션입니다.
form에서 태그의 name이 a 라면
<input ... name="a">
컨트롤러에서는
@RequestParam String a
이런 식으로 양쪽의 이름을 같게 해주면 데이터가 전달됩니다.
mav.setViewName("list");
이동할 View의 이름을 지정합니다. list.html 페이지로 이동을 하게 됩니다.
if (productName.equals("")) {
}
전달된 상품이름이 빈값이면 전체 상품목록을 모델에 저장합니다.
mav.addObject("list", productRepository.findAll(Sort.by(Sort.Direction.ASC, "productName")));
mva.addObject(key, value) 구조로 되어 있습니다. 변수명은 list, 값은 상품목록 리스트입니다.
findAll() 함수는 모든 레코드를 조회하는 함수입니다.
Sort.by(Sort.Direction.ASC, "productName") 는 상품이름 기준 오름차순으로 정렬하라는 의미입니다.
else {
mav.addObject("list", productRepository.findByProductNameContaining(productName,
Sort.by(Sort.Direction.ASC, "productName")));
}
상품이름이 빈값이 아니면 해당되는 상품목록을 찾아서 저장합니다.
findByProductNameContaining() 함수는 상품이름이 포함된 레코드들을 찾는 함수입니다.
return mav;
ModelAndView 객체를 리턴합니다. 지정된 list.html 로 이동하여 상품목록이 출력됩니다.
[실행 결과]
프로젝트에서 우클릭을 하고 Run As > spring boot app을 클릭하면 웹서버가 시작됩니다.
또는 com.example.product 패키지의 JpaApplication.java 클래스를 우클릭한 후 Run As > Spring Boot App 메뉴를 클릭합니다.
스프링 부트가 성공적으로 실행되었습니다.
Console에 에러가 없으면 정상적으로 실행된 것입니다.
Tomcat 서비스가 80번 포트에서 실행중임을 알 수 있습니다.
웹브라우저를 실행하신 후 주소창에 http://localhost를 입력하면 상품목록을 볼 수 있습니다.
아직은 아무 상품도 등록된 것이 없습니다.
상품 등록 기능까지 만든 후에 아래와 같은 화면을 볼 수 있습니다.
상품명에 상품이름을 입력하고 [조회] 버튼을 누르면 해당되는 상품목록을 검색하여 화면에 출력합니다.
번호 | 제목 | 작성자 | 작성일 | 추천 | 조회 |
19 |
상품 삭제
vita
|
2023.11.15
|
추천 0
|
조회 132
|
vita | 2023.11.15 | 0 | 132 |
18 |
상품 수정
vita
|
2023.11.15
|
추천 0
|
조회 112
|
vita | 2023.11.15 | 0 | 112 |
17 |
상품 상세
vita
|
2023.11.15
|
추천 0
|
조회 125
|
vita | 2023.11.15 | 0 | 125 |
16 |
상품 등록
vita
|
2023.11.15
|
추천 0
|
조회 105
|
vita | 2023.11.15 | 0 | 105 |
15 |
상품 목록
vita
|
2023.11.15
|
추천 0
|
조회 147
|
vita | 2023.11.15 | 0 | 147 |
14 |
14. detail.html
vita
|
2023.11.15
|
추천 0
|
조회 119
|
vita | 2023.11.15 | 0 | 119 |
13 |
13. write.html
vita
|
2023.11.15
|
추천 0
|
조회 135
|
vita | 2023.11.15 | 0 | 135 |
12 |
12. list.html
vita
|
2023.11.15
|
추천 0
|
조회 130
|
vita | 2023.11.15 | 0 | 130 |
11 |
11. error.html
vita
|
2023.11.15
|
추천 0
|
조회 123
|
vita | 2023.11.15 | 0 | 123 |
10 |
10. main.css
vita
|
2023.11.15
|
추천 0
|
조회 119
|
vita | 2023.11.15 | 0 | 119 |