클라이언트 요청 처리
InsertBoardController.java
@Controller
public class InsertBoardController{
@RequestMapping(value="/insertBoard.do")
public void insertBoard(HttpServletRequest request){
System.out.println("글 등록 처리");
//1. 사용자 입력 정보 추출
String title = request.getParameter("title");
String writer = request.getParameter("writer");
String content = request.getParameter("content");
//2. DB 연동 처리
BoardVO vo = new BoardVO();
vo.setTitle(title);
vo.setWriter(writer);
vo.setContent(content);
BoardDAO dao = new BoardDAO();
dao.insertBoard(vo);
}
}
사용자 입력 정보는 HttpServletRequest의 getParameter() 메소드를 사용하여 추출.
사용자가 입력하는 정보가 많거나 변경되는 상황이 많을 때마다 Controller 클래스가 수정되어야 하는 단점.
Command 객체
Controller 메소드 매개변수로 받은 VO객체.
사용자 입력 정보 추출, VO 객체 생성, 값 설정을 모두 컨테이너가 자동으로 처리.
@Controller
public class InsertBoardController{
@RequestMapping(value="/insertBoard.do")
public void insertBoard(BoardVO vo)){
System.out.println("글 등록 처리");
BoardDAO dao = new BoardDAO();
dao.insertBoard(vo);
}
}
① 클라이언트가 글 등록 정보 입력.
② 서버에 "insertBoarddo" 요청 전달.
③ 스프링 컨테이너는 @Controller가 붙은 모든 컨트롤러 객체 생성.
④ InsertBoardController가 가지고 있는 insertBoard() 메소드 실행.
⑤ 매개변수에 해당하는 BoardVO 객체를 스프링 컨테이너가 생성.
⑥ 사용자가 입력한 파라미터 값들을 추출하여 BoardVO 객체에 저장. 이때, BoardVO 클래스의 Setter 메소드들이 호출됨.
⑦ insertBoard() 메소드를 호출할 때, 사용자 입력값들이 설정된 BoardVO 객체가 인자로 전달됨.
※ Form 태그 안의 파라미터 이름과 Command 객체의 Setter 메소드 이름이 일치해야 함.
JSP에서 Command객체 사용
1.
"${...}" 구문을 이용 or ${requestScope.Command객체명.변수명}/${sessionScope.Command객체명.변수명}/...
(Command객체의 scope은 page, request, session, application 모두 적용인듯?)
2. form:form tag 활용 → 변수명으로 접근 가능 (taglib 설정해야 함!)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test2</title>
</head>
<body>
<h1>test2</h1>
<form:form action="result" modelAttribute="userDataBean">
이름 : <form:input path="user_name"/><br>
아이디 : <form:input path="user_id"/><br>
비밀번호 : <form:password path="user_pw" showPassword="true" /><br>
우편번호 : <form:input path="user_postcode"/><br>
주소1 : <form:input path="user_addr1"/><br>
주소2 : <form:input path="user_addr2"/><br>
<button type="submit">확인</button>
</form:form>
</body>
</html>
비교
@ModelAttribute
스프링 컨테이너가 생성하는 Command 객체의 이름은 클래스 이름의 첫 글자를 소문자로 변경한 이름이 자동으로 설정됨.
이 이름을 변경하려면 @ModelAttribute 사용.
@RequestParam
Command객체에 없는 파라미터를 Controller 클래스에서 사용할 때 사용.
'◦ Spring Project > Basic' 카테고리의 다른 글
Redirect vs Forward (0) | 2022.02.26 |
---|---|
form:form (0) | 2022.02.24 |
Controller에서 View로 데이터 전달 (0) | 2022.02.24 |
Client에서 보낸 값 Server에서 받을 때 (0) | 2022.02.23 |
Spring 초기설정 Java 버전 (0) | 2022.02.23 |