https://hyunki99.tistory.com/58
지난 포스팅에서 MVC 모델2가 뭔지 알아봤습니다.
게시판 기능들을 직접 구현해 봅시다. 😀
💻 미리보기
⦁ 기능
어드민 계정으로 로그인하면 유저 관리 페이지가 나옵니다.
일반 유저면 게시판으로 들어가집니다.
회원가입, 글 작성, 수정, 삭제 등 기능이 구현되어 있습니다.
📝 구현 순서
⦁ MVC 모델2 순서
모델 2는 항상 중간 통로 역할인 서블릿을 거쳐야 합니다.
예를 들면, 사용자가 특정 요청을 보내면 서블릿은 요청에 맞는 jsp를 응답해 주거나
DB 작업이 필요한 경우 xxxxAction 클래스에서 DAO의 메서드를 호출해
로직을 실행하고 응답 해줍니다.
⦁ 📑 예시
1. 로그인 JSP 파일에서 폼을 실행하면 MemberLogin.auth로 요청을 보냅니다.
// JSP 파일
<h3>로그인 페이지</h3>
<form id="userinfoForm" action="http://localhost:8080/MemberLogin.auth" method="post">
<table>
<tr>
<td>아이디 : </td>
<td> <input type="text" name="id"> </td>
</tr>
<tr>
<td>비밀번호 : </td>
<td> <input type="text" name="pw"> </td>
</tr>
<tr>
<td align="center">
<a href="/Signup.auth"> 회원가입 </a>
</td>
<td align="center">
<input type="submit" value="로그인">
</td>
</tr>
</table>
</form>
</center>
2. 서블릿에서 해당 URL(MemberLogin.auth)의 응답을 작성합니다.
if(command.equals("/MemberLogin.auth")) {
action = new MemberLoginAction();
try{
forward = action.execute(request, response);
} catch(Exception e) {
e.printStackTrace();
}
}
✔ 로그인은 DB 작업이 필요하기 때문에 MemberLoginAction 클래스를 생성합니다.
3. MemberLoginAction 클래스는 DAO의 memberLogin(id, pw)
메서드를 호출해 로직을 실행합니다.
이후 유저를 이동시킬 URL을 forward 객체에 저장하고 리턴해줍니다.
package net.auth.action;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.auth.db.AuthDAO;
public class MemberLoginAction implements Action {
public ActionForward execute(HttpServletRequest request,HttpServletResponse response) throws Exception{
AuthDAO authdao = new AuthDAO();
ActionForward forward= new ActionForward();
HttpSession session = request.getSession();
request.setCharacterEncoding("utf-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
Boolean memberLogin = authdao.memberLogin(id, pw);
System.out.println(memberLogin);
if(memberLogin == false){
forward.setRedirect(true);
forward.setPath("/Login.auth");
return forward;
}
session.setAttribute("login", memberLogin);
session.setAttribute("id", id);
if(memberLogin && id.equals("admin")){
//어드민 로그인
forward.setRedirect(true);
forward.setPath("/MemberList.auth");
return forward;
} else {
forward.setRedirect(true);
forward.setPath("/BoardList.bo");
return forward;
}
}
}
🧾AuthDAO 클래스의 memberLogin(id, pw) 메서드는
DB를 조회해 id와 pw가 동일한 유저가 있는지 확인합니다.
#DAO의 메서드
//로그인
public Boolean memberLogin(String id, String pw){
String member_login_sql = "SELECT COUNT(id) AS result FROM user_info WHERE id=? AND pw=?";
try{
pstmt = con.prepareStatement(member_login_sql);
pstmt.setString(1, id);
pstmt.setString(2, pw);
rs = pstmt.executeQuery();
while(rs.next()){
if(rs.getInt(1) == 1) {
return true;
}
}
return false;
}catch(Exception ex){
System.out.println("getMemberInfo err : " + ex);
}finally{
if(rs!=null) try{rs.close();}catch(SQLException ex){}
if(pstmt!=null) try{pstmt.close();}catch(SQLException ex){}
}
return false;
}
4. 다시 서블릿이 리턴 받은 forward 객체를 통해 최종적으로 유저에게 응답하게 됩니다.
조금 복잡해 보일 수 있지만 이해하면 정말 간단합니다.
어떤 동작을 하더라도 무조건 서블릿을 거쳐야 하고,
만약 비즈니스 로직, DB 사용을 해야 한다면 Action 클래스를 생성해 DAO를 사용하고,
아니라면 그냥 JSP를 응답해 주면 됩니다.
구현할 때 500 에러가 엄청 많이 발생하였는데, ( forward is null, DB error 등..)
간단한 기능이라도 파일을 여러 개 생성해야 하니 헷갈리기 쉬운 것 같습니다.
하지만 흐름을 놓치지 않고 집중해서 코드를 작성하면 어렵지 않습니다. 😀
📝 참고 파일
✔ 오라클 쿼리문
-- 회원정보 테이블 생성
CREATE TABLE user_info(
ID VARCHAR2(12) PRIMARY KEY,
PW VARCHAR2(12),
EMAIL VARCHAR2(15),
NAME VARCHAR2(10),
BIRTH VARCHAR2(10),
HOBBY VARCHAR2(50),
INTRO VARCHAR2(301)
);
/
--로그인
SELECT COUNT(id) AS result FROM user_info WHERE id=? AND pw=?;
--회원가입
INSERT INTO user_info values(?, ?, ?, ?, ?, ?, ?);
--관리자 페이지 유저 명단
SELECT * FROM user_info;
--유저 상세정보
SELECT * FROM user_info WHERE ID = ?;
--유저 삭제
DELETE FROM user_info WHERE ID=?
✨ JSP 후기
아마 JSP 마지막 포스팅이 될 것 같습니다.
리액트를 먼저 사용해 봐서 그런지 배우면서 불편한 점이 많았습니다.
기능 구현에 새로운 파일을 만들어야 하거나,
환경 설정에 시간이 오래 걸리는 점 등이 있었습니다.
또, 이클립스가 문제인 건지 사소한 버그가 엄청 많았습니다. 😂
(껐다 키니까 된다거나 파일 다시 만드니까 된다거나..)
JSP를 배우면서 웹 개발의 근본을 배운 느낌이라 좋았고,
REST API가 왜 주목받는지 알게 되었습니다.
JSP 개발자분들 존경합니다. 👍
참고 문헌 :
'Front-End > JSP' 카테고리의 다른 글
[JSP] MVC 모델2 게시판 만들기-1 (서블릿, 자바 빈즈, JDBC, JSP 활용) (5) | 2022.10.13 |
---|---|
[JSP] JDBC 회원가입 및 관리자 페이지 구현 실습 (1) | 2022.10.11 |
[JSP] JSP에서 DB연동하기 (JDBC, 오라클, 커넥션 풀) (3) | 2022.10.08 |
[JSP] 자바빈즈로 회원가입 페이지 구현하기 (useBean 액션 사용, 미사용 버전 2가지) (1) | 2022.09.21 |
[JSP] 간단한 장바구니 구현하기 (세션 사용) (2) | 2022.09.20 |