[Web] MVC Pattern🌏

jy9922·2022년 7월 27일
0

Web

목록 보기
4/4
post-thumbnail

Layerd Architecture의 적용

Presentation Layer
Business Layer
Persistence Layer
Database Layer

MVC pattern🚩

MVC (Model View Controller)

software system을 3가지 type의 component로 분할하는 소프트웨어 패턴이다.

MVC를 포함한 로직

MVC를 이용한 구현

Project명 : BookStoreProject
context root : book

login 구현

  1. HTML 구현

  2. Java Resource에 Servlet을 만든다.

    • package : member.controller
    • class : LoginController
  3. Logic 처리를 위해 Java Resource에 class를 만든다.

    • package : member.service
    • class : MemberService
  4. client에서 입력받은 데이터를 service에 전달하기 위해 VO가 필요하다.

    • package : member.vo
    • class : Member

로그인 페이지 소스코드

✅ member/login.html

<body>
	<div>로그인하세요!</div><br><br>
	<!-- login 처리 Controller에 action! -->
	<form action="/book/login" method="POST">
		ID : <input type="text" name="userID"><br><br>
		PW : <input type="password" name="userPW"><br><br>
		<input type="submit" value="로그인">
	</form>
</body>

✅ member/loginfail.html

<body>
	로그인에 실패했어요..!
</body>

✅ member/loginSuccess.jsp

<%@ page import="member.vo.Member"%>
<body>
	<% Member member = (Member)request.getAttribute("member"); %>
	<%=member.getName()%>님 환영합니다.
</body> 	 

✅ MemberController class

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 입력받고
		String id = request.getParameter("userID");
		String pw = request.getParameter("userPW");
		// 2. 로직처리
		// 	  로직처리하기 위해서 서비스 객체를 생성(service class가 필요)
		//    client에서 입력받은 데이터를 service에 전달하기 위해 VO가 필요하다
		//    VO를 만들기 위해 class가 있어야 한다
		
		Member member = new Member();
		member.setId(id);
		member.setPw(pw);
		
		MemberService service = new MemberService();
		member = service.login(member);
		// 3. 출력
		// 로그인에 성공하면 vo객체 안에 로그인한 사람의 이름이 들어가 있다
		if (member != null) {
			// 로그인에 성공하면 JSP 이용해서 출력해야 해요!
			// member VO 객체를 JSP에게 전달해야 해요
			// 즉, Controller servlet이 request를 전달해서 다른 servlet(JSP)을 호출
			// 여기서는 경로가 context root까지 잡히는 점 주의하자!
			RequestDispatcher rd = request.getRequestDispatcher("/member/loginSuccess.jsp");
			request.setAttribute("member", member); // 결과 데이터를 붙여서 보내줘야 한다
			rd.forward(request, response);
		}else {
			// 내가 가지고 있는 오류에 관련된 HTML을 적으면 된다.
			// context root부터 경로를 적어준다.
			response.sendRedirect("/book/member/loginfail.html");
		}
	}

✅ MemberService class

/* Business Method가 나와야 한다 */
public class MemberService {
	
	// login 처리하는 business method
	public Member login(Member member) {
		// 로그인이 되는지 확인하는 로직처리
		// Database 처리
		// Database 처리를 위해 DAO가 있어야 해요. (class도 존재해야 해요)
		try {
			MemberDAO dao = new MemberDAO();
			member = dao.select(member);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(e);
		}
		return member;	
	}
}

✅ DAO class

public class MemberDAO {
	// 데이터 베이스에 사람이 있는지 유무
	private DataSource ds;
	
	public MemberDAO() throws Exception {
		// 데이터베이스를 찾을 수 있는 메서드
		Context init = new InitialContext();
		ds = (DataSource) init.lookup("java:comp/env/jdbc/MySQLDB");
	}
	public Member select(Member member) throws Exception{
		Connection con = ds.getConnection();
		System.out.println("connection 획득 성공!");
		
		String sql = "SELECT * FROM members WHERE id=? AND pw=?";
		PreparedStatement pstmt = con.prepareStatement(sql);
		pstmt.setString(1, member.getId());
		pstmt.setString(2, member.getPw());
		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			// 로그인이 된다는 의미
			member.setName(rs.getString("name"));
			return member;
		}
		return null;
	}

✅ Member class (VO)

package member.vo;

public class Member {
	private String id;
	private String pw;
	private String name;
	
	public Member() {
		
	}
	
	public Member(String id, String pw, String name) {
		super();
		this.id = id;
		this.pw = pw;
		this.name = name;
	}

	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;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

0개의 댓글

관련 채용 정보