- 1. 프로젝트 만들기
1. project name: spring_02
2. base-package: com.icia.ex2
인천 일보 아카데미 42일차 -1- IntelliJ - Spring Framework 프로젝트 만들어보기
IntelliJ 를 사용하여 Spring Framework -프로젝트 만들어보기 IntelliJ에서는 스프링 부트 프로젝트 자동생성은 지원하기 때문에 말들기 정말 쉽지만 스프링 프라임워크는 자동 생성을 지원하지 않습니
guping.tistory.com
- 2. 주요 동작
1. 모든 요청은 HomeController에서 처리함
2. 프로젝트 시작하면 index.jsp 출력
- 3. index.jsp
1. hello1.jsp를 출력하기 위한 링크 있음(요청주소: /hello1)
2. hello2.jsp를 출력하기 위한 버튼 있음(요청주소: /hello2)
- 4. hello1.jsp
1. index.jsp로 가기위한 링크 있음
- 5. hello2.jsp
1. 버튼을 클릭하면 js 함수로 /hello-param1 로 이름과 나이 파라미터를 전송한다.
2. 전송된 값은 HomeController 메서드에서 콘솔에 출력한다.
여기까지가 전날 배운 내용의 실습입니다
- Model - 사용해보기
Model은 스프링 프레임워크에서 제공하는 인터페이스입니다
사용 문법
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@controller
public class HomeController {
@GetMapping("/hello3")
public String hello3(Model model){
Model을 매개변수로 받아 사용합니다
String s1 = "안녕하세요";
출력하고 싶은 문자열을 s1에 넣어주었습니다
model.addAttribute("m1",s1);
m1로 속성이름을 설정하고 s1을 속성값으로 view에 넘겨줍니다
return "hello3";
}
}
hello3에는 안녕하세요라는 문구가 없지만
${m1}로 model에 받아온 값을 출력했습니다
이렇게 Model에 담긴 값을 꺼내 출력할때는 ${속성이름} 을 사용합니다
요약 :
Model은 Controller에서 매개변수로 가져와 사용한다
model.addAttribute("속성이름",속성값); < 값을 넣음
${속성 이름} < model의 속성값을 출력
- Model - 응용 객체 출력
StudentDTO 객체를 만들고 객체에 담긴 값을
Model을 사용하여 객체에 담긴 값을 출력해봅시다
사용 문법
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/hello4")
public String hello4(Model model){
StudentDTO studentDTO = new StudentDTO();
studentDTO객체를 만들었습니다
studentDTO.setId(1L);
studentDTO.setStudentName("학생1");
studentDTO.setStudentNumber("12341234");
set메소드를 사용하여 정보를 넣어줍니다
model.addAttribute("student",studentDTO);
Model 인터페이스로 student라는 속성이름에 속성값으로 객체를 담습니다
return "hello4";
}
}
요약
<h3>학생정보</h3>
학번: ${student.id}<br>
이름: ${student.studentName}<br>
학번: ${student.studentNumber}<br>
객체로 담았을 때 객체안의 필드 이름으로
각각 출력이 가능하다
한방에: ${student}
Model로 담은 속성이름만 작성하면
한번에 모든 값이 출력된다
- Model - 응용 List 출력
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
private StudentDTO newStudent(int i){
StudentDTO studentDTO = new StudentDTO();
studentDTO.setId((long)i);
studentDTO.setStudentName("학생"+i);
studentDTO.setStudentNumber("1111110"+i);
return studentDTO;
특정 학생의 정보를 담는게 아니기 때문에
사용하기 쉽게 메소드로 만들었습니다
}
@GetMapping("/hello5")
public String Hello5(Model model){
List<StudentDTO> sList = new ArrayList<>();
StudentDTO를 담는 ArrayList를 만들어줍니다
for (int i = 1 ; i<=10 ; i++){
sList.add(newStudent(i));
위에서 만든 메소드를 이용하여
i가 1씩 증가하며 리스트에 저장됩니다
}
model.addAttribute("sList",sList);
Model 인터페이스를 사용하여 sList라는 속성이름에
위에서 저장한 sList를 속성값으로 담았습니다
return "hello5";
}
}
<body>
<h2>hello5.jsp</h2>
<h3>학생정보</h3>
<table class="table table-dark table-hover" style="text-align: center">
<tr>
<th>id</th>
<th>이름</th>
<th>학번</th>
</tr>
보기좋게 테이블태그로 만들어주고 tr태그와 th태그를 이용하여
첫번째 줄에는 각항목의 주제를 넣어줍니다
<c:forEach items="${sList}" var="s">
Core Tag Library로 포이치문을 사용하였습니다
items: 반복할 대상 , var:반복변수
//for(StudentDTO s: sList)
<tr>
<td>${s.id}</td>
<td>${s.studentName} </td>
<td>${s.studentNumber} </td>
</tr>
포이치문이 반복되며 한줄씩 출력합니다
</c:forEach>
</table>
</body>
- 자투리
1. 메인주소는 같지만 전송 방식이 다르기 때문에 다르다고 판단되어 같은 주소로 사용 가능하다
1.
@GetMapping ("/form-param1") 와 @PostMapping ("/form-param1")는
2. 파라미터의 변수 이름과 메소드에서 사용하는 변수의 이름이 같으면 생략 가능하다
2.
<form action="/form-param1" method="post">
<input type="text" name="p3"> <br>
<input type="text" name="p4"> <br>
<input type="submit" value="전송">
</form>
@PostMapping("/form-param1")
public String formParam2(@RequestParam String p3,@RequestParam String p4) {
System.out.println("p3 = " + p3 + ", p4 = " + p4);
return "index";
}
원래는 이렇게 써야한다
@PostMapping("/form-param1")
public String formParam1(@RequestParam("p3") String p3,@RequestParam("p4") String p4){
System.out.println("p3 = " + p3 + ", p4 = " + p4);
return "index";
}