본문 바로가기

웹 개발/JSP

[Web_JSP] 12

실습(MVC)

- [Web_JSP] 10 이어서

 

1.MemberDAO.java

package com.member.domain.dao;

import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.member.domain.vo.MemberVO;
import com.mybatis.config.MyBatisConfig;
 
public class MemberDAO {
	SqlSessionFactory sqlSessionFactory = MyBatisConfig.getSqlSessionFactory();
	SqlSession sqlSession;
	
	public MemberDAO() {
		sqlSession = sqlSessionFactory.openSession(true);
	}
	
	//회원가입
	public void join(MemberVO memberVO) {
		sqlSession.insert("Member.join", memberVO);
	}
	
	//아이디 중복검사
	public boolean checkId(String memberId) {
		return (Integer)sqlSession.selectOne("Member.checkId", memberId) == 1;
	}
	
	//회원 전체 목록
	public List<MemberVO> selectMembers(){
		return sqlSession.selectList("Member.selectMembers");
	}
	
	//로그인
	public Integer login(HashMap<String, String> memberMap) {
		return sqlSession.selectOne("Member.login", memberMap);
	}
}

 

 

 

2. MemberMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http//mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Member">
	<!-- 회원가입 -->
	<insert id="join" parameterType="memberVO">
		insert into tbl_member
		(member_id, member_name, member_pw, member_gender, member_address, member_address_detail)
		values(#{memberId}, #{memberName}, #{memberPw}, #{memberGender}, #{memberAddress}, #{memberAddressDetail})
	</insert>
	
	<!-- 아이디 중복검사 -->
	<!-- 기본 자료형은 앞에 _를 붙이고, 클래스 자료형은 앞글자를 소문자로만 바꿔준다. -->
	<select id="checkId" parameterType="string" resultType="int">
		select count(member_id) from tbl_member where member_id = #{memberId}
	</select>
	
	<!-- 회원목록 -->
	<select id="selectMembers" resultType="memberVO">
		select member_number, member_id, member_name, member_pw, member_gender, member_address, member_address_detail
		from tbl_member order by member_name desc
	</select>
	
	<!-- 로그인 -->
	<select id="login" parameterType="map" resultType="_int">
		select member_number from tbl_member
		where member_id = #{memberId} and member_pw = #{memberPw}
	</select>
	
</mapper>

 

 

 

3. MemberJoinOk.java

package com.member;

import java.io.IOException;
import java.util.Base64;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.member.action.Action;
import com.member.action.ActionInfo;
import com.member.domain.dao.MemberDAO;
import com.member.domain.vo.MemberVO;
 
public class MemberJoinOk implements Action{
	
	@Override
	public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException{
		req.setCharacterEncoding("UTF-8");
		ActionInfo actionInfo = new ActionInfo();
		MemberVO memberVO = new MemberVO();
		MemberDAO memberDAO = new MemberDAO();
		
		memberVO.setMemberId(req.getParameter("memberId"));
		memberVO.setMemberName(req.getParameter("memberName"));
		memberVO.setMemberPw(new String(Base64.getEncoder().encode(req.getParameter("memberPw").getBytes())));
		memberVO.setMemberGender(req.getParameter("memberGender"));
		memberVO.setMemberAddress(req.getParameter("memberAddress"));
		memberVO.setMemberAddressDetail(req.getParameter("memberAddressDetail"));

		memberDAO.join(memberVO);
		
//		req.setAttribute("memberName", memberVO.getMemberName());
		req.setAttribute("memberList", memberDAO.selectMembers());
		System.out.println(memberDAO.selectMembers().get(0).getMemberName());
		
		actionInfo.setRedirect(false);
		actionInfo.setPath("/joinSuccess.jsp");
		
		return actionInfo;
	}
}

 

 

 

4. MemberLoginOk.java

package com.member;

import java.io.IOException;
import java.util.Base64;
import java.util.HashMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.member.action.Action;
import com.member.action.ActionInfo;
import com.member.domain.dao.MemberDAO; 

public class MemberLoginOk implements Action {

	@Override
	public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		req.setCharacterEncoding("UTF-8");
		
		ActionInfo actionInfo = new ActionInfo();
		HttpSession session = req.getSession();
		HashMap<String, String> memberMap = new HashMap<>();
		MemberDAO memberDAO = new MemberDAO();
		String memberId = req.getParameter("memberId");
		String memberPw = req.getParameter("memberPw");
		int memberNumber = 0;
		memberPw = new String(Base64.getEncoder().encode(memberPw.getBytes()));
		
		memberMap.put("memberId", memberId);
		memberMap.put("memberPw", memberPw);
		
		try {
//			로그인 실패시, null들어온다!
//			그래서 int로 못바꾸니까 Exception 뜸!
			memberNumber = memberDAO.login(memberMap);
			//여기 밑으로 내려오는 건 로그인 성공 시에만 가능
			session.setAttribute("memberNumber", memberNumber);
				//세션 초기화
//			session.invalidate();
		} catch (Exception e) {
			//로그인 실패
			System.out.println("로그인 실패");
			actionInfo.setRedirect(false);
			actionInfo.setPath("/login.jsp");
		}
		actionInfo.setRedirect(false);
		actionInfo.setPath("/loginSuccess.jsp");
		
		return actionInfo;
	}

}

 

 

 

5. MemberFrontController.java

package com.member;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.ibatis.session.SqlSession;
 
import com.member.action.ActionInfo;
import com.member.domain.vo.MemberVO;
import com.mybatis.config.MyBatisConfig;

public class MemberFrontController extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doProcess(req, resp);
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doProcess(req, resp);
	}

	protected void doProcess(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String requestURL = req.getRequestURI();
		String command = requestURL.substring(requestURL.lastIndexOf("/") + 1);
		ActionInfo actionInfo = null;
		
		if(command.equals("JoinOk.me")) {
			actionInfo = new MemberJoinOk().execute(req, resp);
			
		} else if(command.equals("Join.me")) {
			actionInfo = new ActionInfo();
			actionInfo.setRedirect(true);
			actionInfo.setPath(req.getContextPath() + "/join.jsp");
		} else if(command.equals("CheckIdOk.me")) {
			new CheckIdOk().execute(req, resp);
		} else if(command.equals("MemberLoginOk.me")) {
			actionInfo = new MemberLoginOk().execute(req, resp);
		} else {
			// 404 일 때 출력할 에러 페이지 경로 작성
		}
		
		
		if(actionInfo != null) {
			if(actionInfo.isRedirect()) {
				resp.sendRedirect(actionInfo.getPath());
			}else {
				RequestDispatcher dispatcher = req.getRequestDispatcher(actionInfo.getPath());
				dispatcher.forward(req, resp);
			}
		}
		
	}
}

 

 

 

6. config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>
	
	<typeAliases>
		<typeAlias type="com.member.domain.vo.MemberVO" alias="memberVO"/>
	</typeAliases>

	<environments default="mysql">
		<environment id="mysql">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/form"/>
				<property name="username" value="root"/>
				<property name="password" value="1234"/>
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="com/mybatis/mapper/MemberMapper.xml"/>
	</mappers>
	
</configuration>

 

 

7. main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

 

 

 

8. index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:forward page="Main.main"/>
</body>
</html>

 

 

 

9. joinSuccess.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 성공</title>
</head>
<body>
	<table border="1" style="margin: 0 auto;">
		<tr>
			<th>번호</th>
			<th>이름</th>
			<th>아이디</th>
			<th>비밀번호</th>
			<th>성별</th>
			<th>주소</th>
			<th>상세주소</th>
		</tr>
		<c:forEach var="member" items="${memberList}">
			<c:if test="${member.getMemberName() != '한동석' }">
			<tr>
				<td><c:out value="${member.getMemberNumber()}"/></td>
				<td><c:out value="${member.getMemberName()}"/></td>
				<td><c:out value="${member.getMemberId()}"/></td>
				<td><c:out value="${member.getMemberPw()}"/></td>
				<td><c:out value="${member.getMemberGender()}"/></td>
				<td><c:out value="${member.getMemberAddress()}"/></td>
				<td><c:out value="${member.getMemberAddressDetail()}"/></td>
			</tr>
			</c:if>
		</c:forEach>
	</table> 
</body>
</html>

 

 

 

 

'웹 개발 > JSP' 카테고리의 다른 글

[Web_JSP] 14  (0) 2022.06.02
[Web_JSP] 13  (0) 2022.06.01
[Web_JSP] 11  (0) 2022.05.30
[Web_JSP] 10  (0) 2022.05.29
[Web_JSP] 09  (0) 2022.05.28