⁂ Spring FrameWork/: 기본 익히기(Boot 기반)

[Spring] #6-2 컨트롤러로 게시판 만들기

김갱환 2022. 11. 1. 17:04

1. 컨트롤러를 활용하여서 게시판 페이지를 불러와보자!

 

1) DTO 만들기

package kr.co.itwill.bbs;

public class BbsDTO {
	private String wname;
	private String subject;
	private String content;
	private String passwd;
	
	// 기본 생성자, getter, setter, toString()	
	public BbsDTO() {}

	public String getWname() {
		return wname;
	}

	public void setWname(String wname) {
		this.wname = wname;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getPasswd() {
		return passwd;
	}

	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}

	@Override
	public String toString() {
		return "BbsDTO [wname=" + wname + ", subject=" + subject + ", content=" + content + ", passwd=" + passwd + "]";
	}

} // class end

 

2) 컨트롤러 만들기

package kr.co.itwill.bbs;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class BbsCont {

	public BbsCont() {
		System.out.println("-----------BbsCont() 객체 생성됨");
	} // end
	
	// 결과확인 http://localhost:9095/bbs/create.do GET 방식으로 호출
	@RequestMapping(value = "/bbs/create.do", method = RequestMethod.GET)
	public ModelAndView bbsForm() {
		ModelAndView mav = new ModelAndView();
		mav.setViewName("bbs/bbsForm");
		return mav;
	} // bbsForm() end
	
	
	
} // class end

 

3) bbsForm.jsp 페이지 만들기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>bbsForm.jsp</title>
</head>
<body>
	<table border="1">
		<tr>
			<th>작성자</th>
			<td><input type="text" name="wname" size="10" maxlength="20"
				required></td>
		</tr>
		<tr>
			<th>제목</th>
			<td><input type="text" name="subject" size="20" maxlength="100"
				required></td>
		</tr>
		<tr>
			<th>내용</th>
			<td><textarea rows="5" cols="30" name="content"></textarea></td>
		</tr>
		<tr>
			<th>비밀번호</th>
			<td><input type="password" name="passwd" size="10"
				maxlength="10" required></td>
		</tr>
		<tr>
			<td colspan="2" align="center"><input type="submit" value="쓰기">
				<input type="reset" value="취소"></td>
		</tr>
	</table>
</body>
</html>

 

4) 결과 : 뷰단에 불러온 화면

 

 + 이런 경우에는 페이지의 이름을 문자열로 저장만 하면 되기 때문에 String으로 호출 가능하다.

@RequestMapping(value = "/bbs/create.do", method = RequestMethod.GET)
public String bbsForm() {
    return "bbs/bbsForm";
} // bbsForm()

 

 

2. 컨트롤러를 활용하여서 사용자가 입력한 값을 받아와 결과 페이지를 출력해보자!

 

 다음으로는 bbsForm에 사용자가 입력한 값을 받아와 결과페이지를 출력해보려 한다.

// 동일한 요청 명령어를 GET | POST 방식으로 구분해서 호출 가능하다
@RequestMapping(value = "/bbs/create.do", method = RequestMethod.POST)
public ModelAndView bbsIns(HttpServletRequest req) {
    // 사용자가 입력 요청한 정보 가져오기
    String wname	= req.getParameter("wname").trim();
    String subject	= req.getParameter("subject").trim();
    String content	= req.getParameter("content").trim();
    String passwd	= req.getParameter("passwd").trim();

    ModelAndView mav = new ModelAndView();
    mav.setViewName("bbs/bbsResult");

    mav.addObject("wname", wname);
    mav.addObject("subject", subject);
    mav.addObject("content", content);
    mav.addObject("passwd", passwd);		

    return mav;
} // bbsForm() end

 

 여기서 명령어가 같다.

 하지만 GET 방식과 POST 방식으로 요청한 값을 전달하는 방식이 다르다.

 그렇기 때문에 같은 명령어라해도 다른 기능을 수행할 수 있다.

 

 이렇게 입력을 하면?

 

 이렇게 받아와진다.

 

 여기서 url에 주목하자.

 둘 다 같은 명령어 url로 출력이 된다.

 실제 url은 다를지라도 사용자에겐 같은 url로 보이게 된다.

 이는 보안이 더 강화될 수 있는 요소로 사용될 수도 있는 것이다(멋져!).

 

 

 

3. DTO를 활용해서 결과 페이지를 출력해보자

 

 DTO를 활용하여 결과 페이지를 출력하는 방법도 있다.

 이 때 새로운 어노테이션을 써야 하는데 바로 @ModelAttribute 이다.

 

1) 컨트롤러 만들기

// 2) 매개변수가 DTO일 경우
// -> 해당 클래스(BbsDTO)에 반드시 폼 컨트롤 요소 이름으로 되어있는 멤버변수와 각 getter, setter의 변수가 동일해야한다.
// @ModelAttribute는 생략이 가능하다
public ModelAndView bbsIns(@ModelAttribute BbsDTO dto) {
    ModelAndView mav = new ModelAndView();
    mav.setViewName("bbs/bbsResult2");
    mav.addObject("dto", dto);
    return mav;		
} // bbsIns() end

 

2) JSP와 EL로 가져온 값을 뷰페이지에 출력시키기

<%@page import="kr.co.itwill.bbs.BbsDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>bbsResult.jsp</title>
</head>
<body>
	<h3>* 글쓰기 결과 *</h3>
	
	1) JSP<br>
<%
	BbsDTO dto = (BbsDTO)request.getAttribute("dto");
	out.println("작성자 : " + dto.getWname() + "<br>"); 
	out.println("제목 : " + dto.getSubject() + "<br>");
	out.println("내용 : " + dto.getContent() + "<br>");
	out.println("비밀번호 :" + dto.getPasswd() + "<br>");
%>
	<hr>
	2) EL<br>
	<!-- BbsDTO 클래스에 반드시 getter와 setter 함수가 있어야 함 -->
	작성자 : ${dto.wname}<br>
	제목 : ${dto.subject}<br>
	내용 : ${dto.content}<br>
	비밀번호 : ${dto.passwd}
	<hr>
	작성자 : ${wname}<br>
	제목 : ${subject}<br>
	내용 : ${content}<br>
	비밀번호 : ${passwd}<br>


</body>
</html>

dto가 붙지 않으면 값을 가져오지 못한다