스프링 MVC아키텍쳐
스프링 MVC의 역할 분리
- DIspatcherServlet : 모든 요청을 받아서 요청분석
- HandlerMapping : 컨트롤러 찾기
- HandlerAdapter : 컨트롤러를 실행
- Controller : 개발자가 웹에서 처리하고 싶은 내용을 기술(Servlet.java에서 작업했던 내용을 컨트롤러에 정의)
- ViewResolver : View의 정보를 기준으로 어떤 View를 response해야 하는지 확인
- VIew : 실제 응답할 뷰
Controller
- @RequestMapping이 정의된 메소드
1) 매개변수
String => 파라미터명과 동일하게 정의하면 View에서 넘겨주는 파라미터를 추출(request.getParameter)
DTO => 입력하는 모든 파라미터를 DTO로 만들어서 넘겨줌(스프링MVC내부에서)
2) 리턴타입
String => 뷰의 정보
ModelAndView => Model은 뷰(JSP)에 공유할 데이터, View는 뷰의 정보
@RequestMapping(" ")
: 괄호() 안에 있는 경로와 컨트롤러를 매핑해주는 역할. value와 method값(등)을 줄 수 있음
실습 정리하기
- Springmvc패키지의 IndexController.java부터 시작. CLRUD 중 List인 회원목록보기 정리
package main;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController {
@RequestMapping("/index.do")
public String index() {
System.out.println("index컨트롤러 실행");
return "main/index";
}
}
=> 컨트롤러로 사용하기 위한 클래스에 @Controller 태그를 입력하고, @RequestMapping를 이용해 경로를 설정해준다. @RequestMapping의 괄호 안에 있는 경로("/index.do")를 요청하면 index() 메소드가 실행되게 할 것이다. 라고 정의한 코드이다.
- main/index 파일로 이동해서 회원목록보기 작업을 해볼 것이다.
<body>
<h1>index페이지</h1>
<hr/>
<h3><a href="#">스프링mvc테스트확인</a></h3>
<h3><a href="/mvc/test.do">test컨트롤러 요청해보기</a></h3>
<h3><a href="/mvc/emp/list.do">회원목록보기</a></h3>
<h3><a href="/mvc/emp/insert.do">회원가입하기</a></h3>
<!-- ${pageContext.request.contextPath} -->
</body>
</html>
회원목록보기 클릭
* ${pageContext.request.contextPath}
: context-path를 모를 때 사용. 상대경로
package emp;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class ListController {
EmpDAO dao;
public ListController() {
}
@Autowired
public ListController(EmpDAO dao) {
super();
this.dao = dao;
}
@RequestMapping("/emp/list.do")
public ModelAndView showlist() {
ModelAndView mav = new ModelAndView("emp/emp_list");
List<EmpDTO> emplist = dao.getMemberList();
System.out.println("데이터===>"+emplist);
mav.addObject("emplist",emplist);
return mav;
}
}
=> list목록을 가져오는 작업을 하는 메소드를 실행시켜 DB데이터를 가져와 넘겨줘야 하기 때문에 EmpDAO객체를 생성해준다. 멤버변수와 생성자를 만들고 호출한 메소드의 리턴타입에 맞는 변수를 만들어 받아온 데이터를 담아준다.
CRUD를 하면서, 스프링을 하면서 처음보는 클래스가 나왔는데 바로 ModelAndView라는 클래스이다.
ModelAndView
: 모델(뷰에 넘겨줄 데이터를 담은 객체)과 뷰 두 가지를 리턴하며, 뷰를 직접 지정할 수 있다.
ModelAndView객체를 생성하여 DB로부터 받아온 데이터를 추가하고 뷰로 넘길 때 뷰에서 어떤 이름으로 받을지를 정해줘야 한다. 전에 했던 setAttribute처럼 말이다. 위의 코드에서는 "emplist"로 지정해줬다.
* @RequestMapping을 사용할 때 value와 method 값을 지정해줄 수 있다.
@RequestMapping(value = "/emp/read.do",method = RequestMethod.GET)
@RequestMapping(value = "/emp/insert.do", method = RequestMethod.POST)
=> value에는 원래 했던 것처럼 경로를 지정해주고, method는 어떤 방식으로 요청했을 때 실행되게 할 것인지에 대해 정할 수 있다(Get, Post).
* 파라미터 추출 방법 2가지
public ModelAndView read(String deptno)
public String insert(@RequestParam("dept")String deptno, String name)
=> @RequestParam 괄호()안에 특정 이름을 설정할 수 있다.
String타입의 파라미터 deptno의 이름을 dept로 설정할 것이다(dept로 넘겨줘야 함).
- 전에 했던 방법과 동일한 방법으로 jsp에서 데이터("emplist")받아 웹페이지에 뿌리기
<%
ArrayList<EmpDTO> emplist = (ArrayList<EmpDTO>)request.getAttribute("emplist");
int size = emplist.size();
%>
<%for(int i=0; i<size; i++) {
EmpDTO emp = emplist.get(i);%>
<tr>
<td><a href="/mvc/emp/read.do?deptno=<%= emp.getDeptno()%>"><%= emp.getDeptno()%></a></td>
<td><%= emp.getName() %></td>
<td><%= emp.getId() %></td>
<td><%= emp.getAddr() %></td>
<td><%= emp.getPoint() %></td>
<td><%= emp.getGrade() %></td>
<td><a href="/mvc/emp/delete.do?id=<%=emp.getId()%>">삭제</a></td>
</tr>
<% } %>
- 출력 결과
'Spring' 카테고리의 다른 글
2022-12-02 정적파일보관, JSTL사용법 (0) | 2022.12.05 |
---|---|
2022-12-01~02 스프링MVC프로젝트 서버구축 및 mybatis 연결해서 게시판 만들기 (0) | 2022.12.05 |
2022-11-29 스프링 MVC프로젝트 생성하기 정리 (0) | 2022.11.29 |
2022-11-29 스프링 jdbc(DB연결) - CRUD (0) | 2022.11.29 |
2022-11-28 스프링 jdbc(DB연결) - CRUD (0) | 2022.11.28 |
댓글