Layerd Architecture의 적용
Presentation Layer
Business Layer
Persistence Layer
Database LayerMVC pattern🚩
software system을 3가지 type의 component로 분할하는 소프트웨어 패턴이다.
Project명 : BookStoreProject
context root : book
HTML 구현
Java Resource에 Servlet을 만든다.
Logic 처리를 위해 Java Resource에 class를 만든다.
client에서 입력받은 데이터를 service에 전달하기 위해 VO가 필요하다.
<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>
<body>
로그인에 실패했어요..!
</body>
<%@ page import="member.vo.Member"%>
<body>
<% Member member = (Member)request.getAttribute("member"); %>
<%=member.getName()%>님 환영합니다.
</body>
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");
}
}
/* 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;
}
}
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;
}
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;
}
}