패키지와 클래스 생성
BbsDTO.java
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
BbsCont.java
package kr.co.itwill.bbs;
import org.springframework.stereotype.Controller;
@Controller
public class BbsCont {
public BbsCont() {
System.out.println("-----BbsCont()객체 생성됨");
}//end
}//class end
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>
<h3>* 글쓰기 *</h3>
<form action="">
<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>
</form>
</body>
</html>
BbsCont.java
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
package kr.co.itwill.bbs;
import javax.servlet.http.HttpServletRequest;
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)
/* 1)
public ModelAndView bbsForm() {
ModelAndView mav = new ModelAndView();
mav.setViewName("bbs/bbsForm"); // /WEB-INF/views/bbs/bbsForm.jsp
return mav;
}//bbsForm() end
*/
//2) 위의 1)번과 동일하게 페이지 이동 가능하다
public String bbsForm() {
return "bbs/bbsForm"; // /WEB-INF/views/bbs/bbsForm.jsp
}//bbsForm() end
//동일한 요청 명령어를 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;
}//bbsIns() end
}//class end
bbsResult.jsp
<%@ 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>
작성자 : ${requestScope.wname}<br>
제목 : ${requestScope.subject}<br>
내용 : ${requestScope.content}<br>
비밀번호 : ${requestScope.passwd}<br>
<hr>
작성자 : ${wname}<br>
제목 : ${subject}<br>
내용 : ${content}<br>
비밀번호 : ${passwd}<br>
</body>
</html>
url을 직접 입력하거나 <a href="">를 통해 웹페이지로 이동하는 것은 GET 방식이다. POST 방식으로 이동하기 위해서는 JavaScript를 통해야 한다.
Myweb에서와는 달리 여기서는 한글 인코딩 작업을 따로 하지 않았다.
공통 코드를 모아 놓은 ssi.jsp에 우리는 한글 인코딩 작업을 해주었다. 하지만 spring을 사용하면서 한 번도 이 작업을 하지 않았지만 한글이 깨지지 않았다. spring에서는 한글 인코딩을 따로 해주지 않아도 인코딩이 되도록 구조화되어있다.
BbsCont.java
package kr.co.itwill.bbs;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
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)
/* 1)
public ModelAndView bbsForm() {
ModelAndView mav = new ModelAndView();
mav.setViewName("bbs/bbsForm"); // /WEB-INF/views/bbs/bbsForm.jsp
return mav;
}//bbsForm() end
*/
//2) 위의 1)번과 동일하게 페이지 이동 가능하다
public String bbsForm() {
return "bbs/bbsForm"; // /WEB-INF/views/bbs/bbsForm.jsp
}//bbsForm() end
//동일한 요청 명령어를 GET | POST 방식으로 구분해서 호출 가능하다
@RequestMapping(value = "/bbs/create.do", method = RequestMethod.POST)
/*1)
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;
}//bbsIns() end
*/
//2)매개변수(parameter)가 DTO 객체인 경우
//->해당 클래스(BbsDTO)에 반드시 폼 컨트롤 요소 이름을 되어 있는 멤버변수와 각 getter, setter함수가 있어야 한다.
//->예를 들어 <input type=text name=wname>와 private String wname의 이름이 동일해야 한다
//->@ModelAttribute 생략 가능
public ModelAndView bbsIns(@ModelAttribute BbsDTO dto) {
ModelAndView mav = new ModelAndView();
mav.setViewName("bbs/bbsResult2");
mav.addObject("dto", dto);
return mav;
}//bbsIns() end
}//class end
빨간색과 초록색 과정이 있어야만 파란색 부분을 사용할 수 있다.
오른쪽 화면의 파란색 박스로 표시된 두 개의 과정이 왼쪽 화면의 파란색 박스와 같다.
※ 참고
어노테이션을 사용하여 getter와 setter를 만들지 않고 getter와 setter가 있는 것으로 인식시키는 라이브러리가 있다.
bbsResult2.jsp
<%@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}<br>
</body>
</html>
새 패키지 및 LoginCont, LoginDTO 클래스 생성
LoginDTO.java
package kr.co.itwill.login;
public class LoginDTO {
private String id;
private String pw;
public LoginDTO() {}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
}//class end
LoginCont.java
package kr.co.itwill.login;
import org.springframework.stereotype.Controller;
@Controller
public class LoginCont {
public LoginCont() {
System.out.println("-----LoginCont()객체 생성됨");
}//end
}//class end
추가
//결과확인 http://localhost:9095/login.do
@RequestMapping(value = "/login.do", method = RequestMethod.GET)
public String loginForm() {
return "login/loginForm"; // /WEB-INF/views/login/loginForm.jsp
}//loginForm() end
}//class end
loginForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>loginForm.jsp</title>
</head>
<body>
<h3>로그인</h3>
<form method="post" action="login.do">
<table border="1">
<tr>
<td colspan="2" align="center">* 로그인 *</td>
</tr>
<tr>
<td>아이디</td>
<td><input type="text" name="id" size="20"></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="pw" size="20"></td>
</tr>
<tr>
<td colspan=2 align=center>
<input type="submit" value="확인">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
</body>
</html>
LoginCont.java
package kr.co.itwill.login;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class LoginCont {
public LoginCont() {
System.out.println("-----LoginCont()객체 생성됨");
}//end
//결과확인 http://localhost:9095/login.do
@RequestMapping(value = "/login.do", method = RequestMethod.GET)
public String loginForm() {
return "login/loginForm"; // /WEB-INF/views/login/loginForm.jsp
}//loginForm() end
@RequestMapping(value = "/login.do", method = RequestMethod.POST)
public ModelAndView loginProc(@ModelAttribute LoginDTO dto, HttpServletRequest req, HttpServletResponse resp, HttpSession session) { //매개변수는 예시를 위해 여러 개 적음(여기서는 dto, session만 있어도 됨)
String id = dto.getId();
String pw = dto.getPw();
ModelAndView mav = new ModelAndView();
if(id.equals("itwill") && pw.equals("1234")) {
mav.setViewName("login/loginResult");
session.setAttribute("s_id", id);
session.setAttribute("s_pw", pw);
req.setAttribute("message", "<h3>로그인 성공</h3>");
} else {
mav.setViewName("login/msgView");
req.setAttribute("message", "<p>아이디와 비번이 일치하지 않습니다</p>");
req.setAttribute("link", "<a href='javascript:history.back()'>[다시시도]</a>");
}//if end
return mav;
}//loginProc() end
}//class end
loginResult.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>loginResult.jsp</title>
</head>
<body>
<h1>로그인 결과</h1>
1)JSP<br>
<%=request.getAttribute("message")%><br>
아이디(세션) : <%=session.getAttribute("s_id")%><br>
비번(세션) : <%=session.getAttribute("s_pw")%><br>
<hr>
2)EL<br>
${requestScope.message}<br>
아이디(세션) : ${sessionScope.s_id}<br>
비번(세션) : ${sessionScope.s_pw}<br>
${message}<br>
아이디(세션) : ${s_id}<br>
아이디(세션) : ${s_pw}<br>
</body>
</html>
msgView.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>msgView.jsp</title>
</head>
<body>
<h2>* 로그인 결과 *</h2>
${requestScope.message}
<p>${requestScope.link}</p>
<hr>
${message}
<p>${link}</p>
</body>
</html>
'웹개발 교육 > Spring' 카테고리의 다른 글
[69일] spring (7) - mymelon mediagroup 수정, 삭제 (0) | 2022.11.03 |
---|---|
[68일] spring (6) - mymelon mediagroup 추가, 리스트 (0) | 2022.11.02 |
[67일] spring (4) - 계산 (0) | 2022.11.01 |
[66일] spring (3) - MVC (0) | 2022.10.31 |
[66일] spring (2) - 프로젝트 생성 (0) | 2022.10.31 |