2023. 11. 8. 02:52ㆍ학부 강의/웹프로그래밍 (Spring)
0. 출처
아직 배우고 있는 중이라 부정확한 정보가 포함되어 있을 수 있습니다!
주의하세요!
올인원 스프링 프레임워크 참고.
1. 프로젝트 설명
일반 도서관에서 사용할 만한 프로그램이다.
도서 대여, 반납, 희망 도서 신청, 회원 가입 등 기능을 제공한다.
가. 관리자 기능
나. 사용자 기능
2. 프로젝트 생성
새로운 Spring Legacy Project를 생성한다.
- Project name : BookRentalPjt
- Template : Spring MVC Project
- Package name : com.office.library
pom.xml
의 java와 spring-framework 버전을 수정한 다음 web.xm
l에 한글 인코딩 설정을 추가한다.
resources, views 폴더에 실습에 필요한 JSP 파일을 붙여 넣는다.
user 폴더는 아직 비워둔다.
(JSP, CSS, 이미지 파일 복사 : http://www.hanbit.co.kr/src/4663)
3. 관리지 회원가입
오늘은 빨간 박스로 표시한 기능을 구현할 것이다.
- 관리자 홈 만들기
- 관리자 회원가입 화면 만들기
- 관리자 회원가입 처리하기
- 컨트롤 기능 구현
- 서비스 기능 구현
- DAO 기능 구현
가. 관리자 홈 화면
@Controller
@RequestMapping("/admin")
public class AdminHomeController {
@RequestMapping(value= {"","/"}, method = RequestMethod.GET)
public String home() {
System.out.println("[AdminHomeController] home()");
String nextPage = "admin/home";
return nextPage;
}
}
@RequestMapping("/admin")
:AdminHomeController
은 관리자 홈 화면에 대한 요청/admin
을 처리한다.String nextPage = "admin/home";
:/WEB-INF/views/sign_up_ok.jsp
을 view로 사용한다.@RequestMapping(value= {"","/"}, method = RequestMethod.GET)
:home()
은/admin/
과/admin
모두를 처리함.
http://localhost:8090/library/admin
이나 http://localhost:8090/library/admin/
으로 접속하면 DispatcherServlet
은 해당 AdminHomeController
를 호출한다.
나. 관리자 회원가입 화면
// home.jsp
<body>
<jsp:include page="../include/header.jsp" />
<jsp:include page="./include/nav.jsp" />
...
<jsp:include page="../include/footer.jsp" />
...
<jsp:include page="./include/nav.jsp" />
:admin/home.jsp
는admin/include/nav.jsp
를 include한다. 이하동일
<!-- admin/include/nav.jsp -->
<%@page import="com.office.library.admin.member.AdminMemberVo"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<link href="<c:url value='/resources/css/admin/include/nav.css' />" rel="stylesheet" type="text/css">
<jsp:include page="./nav_js.jsp" />
<nav>
<div id="nav_wrap">
<%
AdminMemberVo loginedAdminMemberVo = (AdminMemberVo) session.getAttribute("loginedAdminMemberVo");
if (loginedAdminMemberVo != null) {
%>
<div class="menu">
<ul>
<li><a href="<c:url value='/admin/member/logoutConfirm' />">로그아웃</a></li>
<li><a href="<c:url value='/admin/member/modifyAccountForm' />">계정수정</a></li>
<c:if test="${loginedAdminMemberVo.a_m_id eq 'super admin'}">
<li><a href="<c:url value='/admin/member/listupAdmin' />">관리자목록</a></li>
</c:if>
<li><a href="<c:url value='/book/admin/getRentalBooks' />">대출도서</a></li>
<li><a href="<c:url value='/book/admin/getAllBooks' />">전체도서</a></li>
<li><a href="<c:url value='/book/admin/getHopeBooks' />">희망도서(입고처리)</a></li>
<li><a href="<c:url value='/book/admin/registerBookForm' />">도서등록</a></li>
</ul>
</div>
<%
} else {
%>
<div class="menu">
<ul>
<li><a href="<c:url value='/admin/member/loginForm' />">로그인</a></li>
<li><a href="<c:url value='/admin/member/createAccountForm' />">회원가입</a></li>
</ul>
</div>
<%
}
%>
<div class="search">
<form action="<c:url value='/book/admin/searchBookConfirm' />" name="search_book_form" method="get">
<input type="text" name="b_name" placeholder="Enter the name of the book you are looking for.">
<input type="button" value="search" onclick="searchBookForm();">
</form>
</div>
</div>
</nav>
AdminMemberVo loginedAdminMemberVo = (AdminMemberVo) session.getAttribute("loginedAdminMemberVo");
: 세션에서 로그인된 관리자 정보를 가져온다.if (loginedAdminMemberVo != null) { … } else { … }
: 로그인 상태에 따라서 다른 화면을 보여줌.
<li><a href="<c:url value='/admin/member/loginForm' />">로그인</a></li>
<li><a href="<c:url value='/admin/member/createAccountForm' />">회원가입</a></li>
관리자 계정 생성과 관련된 href
주소 /admin/member/...
를 처리하기 위해서 AdminMemberController
생성한다.
//BookRentalPjt/src/main/java/com/office/library/admin/member/AdminMemberController.java
@Controller
@RequestMapping("/admin/member")
public class AdminMemberCotroller {
@RequestMapping(value="/createAccountForm", method=RequestMethod.GET)
public String createAccountForm() {
System.out.println("[AdminMemberController] createAccoutForm()");
String nextPage = "admin/member/create_account_form";
return nextPage;
}
}
회원 가입 요청에 회원 가입 양식을 반환하는 createAccountForm
메서드를 생성, 맵핑한다.
<!-- WEB-INF/views/admin/member/create_account_form.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<jsp:include page="../../include/title.jsp" />
<link href="<c:url value='/resources/css/admin/create_account_form.css' />" rel="stylesheet" type="text/css">
<jsp:include page="../include/create_account_form_js.jsp" />
</head>
<body>
<jsp:include page="../../include/header.jsp" />
<jsp:include page="../include/nav.jsp" />
<section>
<div id="section_wrap">
<div class="word">
<h3>CREATE ACCOUNT FORM</h3>
</div>
<div class="create_account_form">
<form action="<c:url value='/admin/member/createAccountConfirm' />" name="create_account_form" method="post">
<input type="text" name="a_m_id" placeholder="INPUT ADMIN ID."> <br>
<input type="password" name="a_m_pw" placeholder="INPUT ADMIN PW."> <br>
<input type="password" name="a_m_pw_again" placeholder="INPUT ADMIN PW AGAIN."> <br>
<input type="text" name="a_m_name" placeholder="INPUT ADMIN NAME."> <br>
<select name="a_m_gender">
<option value="">SELECET ADMIN GENDER.</option>
<option value="M">Man</option>
<option value="W">Woman</option>
</select> <br>
<input type="text" name="a_m_part" placeholder="INPUT ADMIN PART."> <br>
<input type="text" name="a_m_position" placeholder="INPUT ADMIN POSITION."> <br>
<input type="email" name="a_m_mail" placeholder="INPUT ADMIN MAIL." ><br>
<input type="text" name="a_m_phone" placeholder="INPUT ADMIN PHONE."> <br>
<input type="button" value="create account" onclick="createAccountForm();">
<input type="reset" value="reset">
</form>
</div>
<div class="login">
<a href="<c:url value='/admin/member/loginForm' />">login</a>
</div>
</div>
</section>
<jsp:include page="../../include/footer.jsp" />
</body>
</html>
회원가입에 사용할 View다.
<form action="<c:url value='/admin/member/createAccountConfirm' />" name="create_account_form" method="post">
:/admin/member/createAccountConfirm
url로create_account_form
라는 이름으로 HTTP POST method로 전송한다.
<input type="button" value="create account" onclick="createAccountForm();">
: “create account” 버튼을 누르면createAccountForm()
을 동작한다.
: 이는../include/create_account_form_js.jsp
에 정의되어 있는 함수다.
: 비어있는 정보가 있는지 확인한다.
관리자 계정을 생성하기 위해서 필요한 정보를 입력하고 “create account” 버튼을 누른다.
@Controller
@RequestMapping("/admin/member")
public class AdminMemberCotroller {
@Autowired
AdminMemberService adminMemberService;
...
@RequestMapping(value="/createAccountConfirm", method = RequestMethod.POST)
public String createAccountConfirm(AdminMemberVo adminMemberVo) {
System.out.println("[AdminMemberController] createAccoutConfirm()");
String nextPage = "admin/member/create_account_ok";
int result = adminMemberService.createAccountConfirm(adminMemberVo);
if(result <= 0)
nextPage = "admin/member/create_account_ng";
return nextPage;
}
}
AdminMemberController
에 /admin/member/createAccountConfirm
을 처리하기 위한 메서드를 추가한다.
public String createAccountConfirm(AdminMemberVo adminMemberVo) {
: 회원의 정보를 입력받기 위해서 VO 객체를 이용한다. (AdminMemberVo
의 대한 구체적인 내용은 생략)int result = adminMemberService.createAccountConfirm(adminMemberVo);
: 서비스에서 구체적인 처리를 맡기고 결과를 받아온다.- 회원가입에 성공하면
WEB-INF/views/admin/member/create_account_ok.jsp
를WEB-INF/views/admin/member/create_account_ng.jsp
를 view로 사용한다.
참고 - HTTP Method 선택
@RequestMapping(value = "/createAccountForm", method= RequestMethod.GET)
@GetMapping("/createAccountForm")
@RequestMapping(value = "/createAccountConfirm", method= RequestMethod.POST)
@PostMapping("/createAccountConfirm")
@GetMapping
, @PostMapping
와 같이 사용할 수도 있다.
다. 관리자 회원가입 서비스 구현
AdminMemberService
에 회원가입 요청을 처리하는 createAccountConfirm()
를 구현한다.
@Service
public class AdminMemberService {
final static public int ADMIN_ACCOUNT_ALREADY_EXIST = 0;
final static public int ADMIN_ACCOUNT_CREATE_SUCCESS = 1;
final static public int ADMIN_ACCOUNT_CREATE_FAIL = -1;
@Autowired
AdminMemberDao adminMemberDao;
public int createAccountConfirm(AdminMemberVo adminMemberVo) {
System.out.println("[AdminMemberService] createAccountConfirm()");
boolean isMember = adminMemberDao.isAdminMember(adminMemberVo.getA_m_id());
if(!isMember) {
int result = adminMemberDao.insertAdminAccount(adminMemberVo);
if(result > 0)
return ADMIN_ACCOUNT_CREATE_SUCCESS;
else
return ADMIN_ACCOUNT_CREATE_FAIL;
}else {
return ADMIN_ACCOUNT_ALREADY_EXIST;
}
}
}
관리자 계정을 생성하기에 앞서서 문제가 없는지 확인한다.
ADMIN_ACCOUNT_ALREADY_EXIST
,ADMIN_ACCOUNT_CREATE_SUCCESS
,ADMIN_ACCOUNT_CREATE_FAIL
: 관리자 계정 생성과 관련된 상태 코드 추가한다.boolean isMember = adminMemberDao.isAdminMember(adminMemberVo.getA_m_id());
: 동일한 id의 관리자 계정이 존재하는지 확인한다.int result = adminMemberDao.insertAdminAccount(adminMemberVo);
: DAO 객체에게 새로운 관리자 계정을 생성할 것을 요청한다.
AdminMemberVo
는 다음에 실제 DB랑 연결하면서 구현하겠다.
'학부 강의 > 웹프로그래밍 (Spring)' 카테고리의 다른 글
[Spring] 관리자 로그인 (2) | 2023.12.20 |
---|---|
[Spring] 데이터베이스 (0) | 2023.11.09 |
[Spring] Service, DAO 그리고 VO (0) | 2023.11.07 |
[Spring] 클라이언트의 요청이 처리되는 과정 (0) | 2023.11.02 |
[Spring] STS, Tomcat (1) | 2023.10.28 |